go-hep.org/x/hep@v0.38.1/csvutil/README.md (about) 1 csvutil 2 ======= 3 4 [](https://godoc.org/go-hep.org/x/hep/csvutil) 5 6 `csvutil` is a set of types and funcs to deal with CSV data files in a somewhat convenient way. 7 8 ## Installation 9 10 ```sh 11 $> go get go-hep.org/x/hep/csvutil 12 ``` 13 14 ## Documentation 15 16 Documentation is available on [godoc](https://godoc.org): 17 18 [godoc.org/go-hep.org/x/hep/csvutil](https://godoc.org/go-hep.org/x/hep/csvutil) 19 20 ## Example 21 22 ### Reading CSV into a struct 23 24 ```go 25 package main 26 27 import ( 28 "io" 29 "log" 30 31 "go-hep.org/x/hep/csvutil" 32 ) 33 34 func main() { 35 fname := "testdata/simple.csv" 36 tbl, err := csvutil.Open(fname) 37 if err != nil { 38 log.Fatalf("could not open %s: %v\n", fname, err) 39 } 40 defer tbl.Close() 41 tbl.Reader.Comma = ';' 42 tbl.Reader.Comment = '#' 43 44 rows, err := tbl.ReadRows(0, 10) 45 if err != nil { 46 log.Fatalf("could read rows [0, 10): %v\n", err) 47 } 48 defer rows.Close() 49 50 irow := 0 51 for rows.Next() { 52 data := struct { 53 I int 54 F float64 55 S string 56 }{} 57 err = rows.Scan(&data) 58 if err != nil { 59 log.Fatalf("error reading row %d: %v\n", irow, err) 60 } 61 } 62 err = rows.Err() 63 if err != nil { 64 log.Fatalf("error: %v\n", err) 65 } 66 } 67 ``` 68 69 ### Reading CSV into a slice of values 70 71 ```go 72 package main 73 74 import ( 75 "io" 76 "log" 77 78 "go-hep.org/x/hep/csvutil" 79 ) 80 81 func main() { 82 fname := "testdata/simple.csv" 83 tbl, err := csvutil.Open(fname) 84 if err != nil { 85 log.Fatalf("could not open %s: %v\n", fname, err) 86 } 87 defer tbl.Close() 88 tbl.Reader.Comma = ';' 89 tbl.Reader.Comment = '#' 90 91 rows, err := tbl.ReadRows(0, 10) 92 if err != nil { 93 log.Fatalf("could read rows [0, 10): %v\n", err) 94 } 95 defer rows.Close() 96 97 irow := 0 98 for rows.Next() { 99 var ( 100 I int 101 F float64 102 S string 103 ) 104 err = rows.Scan(&I, &F, &S) 105 if err != nil { 106 log.Fatalf("error reading row %d: %v\n", irow, err) 107 } 108 } 109 err = rows.Err() 110 if err != nil { 111 log.Fatalf("error: %v\n", err) 112 } 113 } 114 ``` 115 116 ### Writing CSV from a struct 117 118 ```go 119 package main 120 121 import ( 122 "log" 123 124 "go-hep.org/x/hep/csvutil" 125 ) 126 127 func main() { 128 fname := "testdata/out.csv" 129 tbl, err := csvutil.Create(fname) 130 if err != nil { 131 log.Fatalf("could not create %s: %v\n", fname, err) 132 } 133 defer tbl.Close() 134 tbl.Writer.Comma = ';' 135 136 err = tbl.WriteHeader("## a simple set of data: int64;float64;string\n") 137 if err != nil { 138 log.Fatalf("error writing header: %v\n", err) 139 } 140 141 for i := 0; i < 10; i++ { 142 data := struct { 143 I int 144 F float64 145 S string 146 }{ 147 I: i, 148 F: float64(i), 149 S: fmt.Sprintf("str-%d", i), 150 } 151 err = tbl.WriteRow(data) 152 if err != nil { 153 log.Fatalf("error writing row %d: %v\n", i, err) 154 } 155 } 156 157 err = tbl.Close() 158 if err != nil { 159 log.Fatalf("error closing table: %v\n", err) 160 } 161 } 162 ``` 163 164 ### Writing from a slice of values 165 166 ```go 167 package main 168 169 import ( 170 "log" 171 172 "go-hep.org/x/hep/csvutil" 173 ) 174 175 func main() { 176 fname := "testdata/out.csv" 177 tbl, err := csvutil.Create(fname) 178 if err != nil { 179 log.Fatalf("could not create %s: %v\n", fname, err) 180 } 181 defer tbl.Close() 182 tbl.Writer.Comma = ';' 183 184 err = tbl.WriteHeader("## a simple set of data: int64;float64;string\n") 185 if err != nil { 186 log.Fatalf("error writing header: %v\n", err) 187 } 188 189 for i := 0; i < 10; i++ { 190 var ( 191 f = float64(i) 192 s = fmt.Sprintf("str-%d", i) 193 ) 194 err = tbl.WriteRow(i, f, s) 195 if err != nil { 196 log.Fatalf("error writing row %d: %v\n", i, err) 197 } 198 } 199 200 err = tbl.Close() 201 if err != nil { 202 log.Fatalf("error closing table: %v\n", err) 203 } 204 } 205 ```