diff options
Diffstat (limited to 'cmd/xlsx')
| -rw-r--r-- | cmd/xlsx/main.go | 88 |
1 files changed, 59 insertions, 29 deletions
diff --git a/cmd/xlsx/main.go b/cmd/xlsx/main.go index 4ccb01e..b960448 100644 --- a/cmd/xlsx/main.go +++ b/cmd/xlsx/main.go @@ -2,46 +2,76 @@ package main import ( "airlines/pkg/adapters/xlsx" + csvwriter "airlines/pkg/csvWriter" "fmt" "os" + "sync" ) -// func readXLSX(path string) { -// tickets, err := xlsx.UnmarshallXlsxFile("/home/alex/ds-data/YourBoardingPassDotAero/YourBoardingPassDotAero-2017-11-30.xlsx") -// if err != nil { -// panic(err) -// } - -// } - func main() { tickets := make([]xlsx.Ticket, 0) baseDir := "/home/alex/ds-data/YourBoardingPassDotAero/" items, _ := os.ReadDir(baseDir) + var mu sync.Mutex + var wg sync.WaitGroup + sem := make(chan struct{}, 8) for _, item := range items { if !item.IsDir() { - fmt.Println("Processing file:", item.Name()) - parsedTickets, err := xlsx.UnmarshallXlsxFile(baseDir + item.Name()) - if err != nil { - panic(err) - } - tickets = append(tickets, parsedTickets...) + wg.Add(1) + sem <- struct{}{} + go func(name string) { + defer func() { <-sem }() + defer wg.Done() + fmt.Println("Processing file:", name) + parsedTickets, err := xlsx.UnmarshallXlsxFile(baseDir + name) + if err != nil { + panic(err) + } + mu.Lock() + defer mu.Unlock() + tickets = append(tickets, parsedTickets...) + + }(item.Name()) } } - // for _, ticket := range tickets { - // u, err := ticket.ToUser() - // if err != nil { - // panic(err) - // } - // f, err := ticket.ToFlight() - // if err != nil { - // panic(err) - // } - // c, err := ticket.ToCard() - // if err != nil { - // panic(err) - // } - // fmt.Printf("%+v %+v %+v\n", u, f, c) - // } + wg.Wait() + + fmt.Println("finished") + + file, err := csvwriter.NewCsvWriter("/tmp/output.csv") + if err != nil { + panic(err) + } + defer file.Close() + + file.Write([]string{"Number", "FromAer", "FromCoordsLat", "FromCoordsLong", "ToAer", "ToCoordsLat", "ToCoordsLong", "DateUnix"}) + + for i, ticket := range tickets { + if i%(len(tickets)/100) == 0 { + fmt.Printf("%f\n", float32(i)/float32(len(tickets))*100) + } + if i%(len(tickets)/100*5) == 0 { + file.Sync() + } + // u, err := ticket.ToUser() + // if err != nil { + // panic(err) + // } + f, err := ticket.ToFlight() + if err != nil { + panic(err) + } + file.Write([]string{f.Number, + f.From, fmt.Sprintf("%v", f.FromCoords.Lat), fmt.Sprintf("%v", f.FromCoords.Long), + f.To, fmt.Sprintf("%v", f.ToCoords.Lat), fmt.Sprintf("%v", f.ToCoords.Long), + fmt.Sprintf("%v", f.Date.Unix()), + }) + // c, err := ticket.ToCard() + // if err != nil { + // panic(err) + // } + // fmt.Printf("%+v %+v %+v\n", u, f, c) + } + file.Sync() } |
