1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
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()
}
|