package main import ( "airlines/pkg/adapters/xlsx" csvwriter "airlines/pkg/csvWriter" "fmt" "os" "sync" ) 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() { 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()) } } 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() }