// implémentation de filepath.Visitor func (ls *LecteurScripts) VisitFile(path string, f os.FileInfo) { pathToken := strings.Split(path, "/") if strings.HasSuffix(path, ".csv") { f, err := os.Open(path) if err != nil { return } defer f.Close() r := bufio.NewReader(f) switch pathToken[len(pathToken)-1] { case "bralduns.csv": bra.ParseFichierCsvStatique(r, ls.MemMap, func() bra.Visible { return new(bra.Braldun) }) case "communautes.csv": bra.ParseFichierCsvStatique(r, ls.MemMap, func() bra.Visible { return new(bra.Communauté) }) case "lieux_villes.csv": bra.ParseFichierCsvStatique(r, ls.MemMap, func() bra.Visible { return new(bra.LieuVille) }) case "regions.csv": bra.ParseFichierCsvStatique(r, ls.MemMap, func() bra.Visible { return new(bra.Région) }) case "villes.csv": bra.ParseFichierCsvStatique(r, ls.MemMap, func() bra.Visible { return new(bra.Ville) }) default: vue, _ := bra.ParseFichierCsvDynamique(r, ls.readTimeFromFilePath(pathToken), ls.MemMap, ls.verbose) ls.NbReadFiles++ if vue != nil { //~ fmt.Printf(" -> vue : %+v\n", vue) if vue.Voyeur > 0 && vue.Time > 0 { if ls.MemMap.DernièresVues[vue.Voyeur] == nil || vue.Time > ls.MemMap.DernièresVues[vue.Voyeur].Time { ls.MemMap.DernièresVues[vue.Voyeur] = vue } } } } } }
func visit(path string, f os.FileInfo, err error) error { if f.IsDir() { fmt.Printf("dir: %s\n", path) } else { file_size := f.Size() f, err := os.Open(path) if err != nil { log.Fatal(err) } x, err := exif.Decode(f) f.Close() if err != nil { log.Fatal(err) } date, _ := x.Get("DateTimeOriginal") fmt.Printf("%s\t", date.StringVal()) expo, _ := x.Get("ExposureTime") n0, d0 := expo.Rat2(0) fmt.Printf("%v/%v\t", n0, d0) fnumber, _ := x.Get("FNumber") n1, d1 := fnumber.Rat2(0) fmt.Printf("%v/%v\t", n1, d1) focal, _ := x.Get("FocalLength") n2, d2 := focal.Rat2(0) fmt.Printf("%v/%v\t", n2, d2) iso, _ := x.Get("ISOSpeedRatings") if iso != nil { fmt.Printf("%v\t", iso.Int(0)) } else { fmt.Printf("noiso\t") } fmt.Printf("%s\t%d\n", path, file_size) } return nil }