First, the raw input data:
CPF PRIVATE INCOMPLETO DATA DA ÚLTIMA COMPRA TICKET MÉDIO TICKET DA ÚLTIMA COMPRA LOJA MAIS FREQUÊNTE LOJA DA ÚLTIMA COMPRA 041.091.641-25 0 0 NULL NULL NULL NULL NULL 058.189.421-98 0 0 NULL NULL NULL NULL NULL 769.013.439-49 0 0 NULL NULL NULL NULL NULL I have this struct:
type row struct { cpf string private bool incompleto bool ultCompra string ticketMedio float64 ticketUltimo float64 lojaMaisFreq string lojaUltCompra string } I created a slice of it:
var parsedData []row And i want to write data in a for range loop. The data comes from a txt and i parsed it.
I did a for range loop with with strings.Field like this:
for i1, v1 := range data { // ignore the first line because it is the header if i1 == 0 { continue } lines := strings.Fields(v1) The data is now a [][]string like this:
[004.350.709-32 0 0 2013-05-27 599,60 599,60 79.379.491/0008-50 79.379.491/0008-50] [152.110.128-01 0 0 2013-05-27 449,90 449,90 79.379.491/0008-50 79.379.491/0008-50] [067.737.339-28 0 0 2013-05-27 299,90 299,90 79.379.491/0008-50 79.379.491/0008-50] So i iterate over it in a for range loop:
for i2, v2 := range data { fmt.Println(i2, "-", v2) } Which gives me this:
0 - 004.350.709-32 1 - 0 2 - 0 3 - 2013-05-27 4 - 599,60 5 - 599,60 6 - 79.379.491/0008-50 7 - 79.379.491/0008-50 After this i created functions to treat all the data to be compatible with each field in the struct.
Now... How do i put everything into the slice of structs? Here is what i'm doing:
// using the index of the first loop newIndex := i1 - 1 // since it ignores 0 which is the header switch i2 { case 0: parsedData[newIndex].cpf = cleanStrings(v2) case 1: parsedData[newIndex].private = strToBool(v2) case 2: parsedData[newIndex].incompleto = strToBool(v2) case 3: parsedData[newIndex].ultCompra = v2 case 4: parsedData[newIndex].ticketMedio = strToFloat(v2) case 5: parsedData[newIndex].ticketUltimo = strToFloat(v2) case 6: parsedData[newIndex].lojaMaisFreq = cleanStrings(v2) case 7: parsedData[newIndex].lojaUltCompra = cleanStrings(v2) } But this is wrong. It gives me index out of range. Since it is an empty slice I probably have to append to it instead, but i can't wrap my head around how to do this.
I have to create a new row struct for every loop?