go-hep.org/x/hep@v0.38.1/csvutil/README.md (about)

     1  csvutil
     2  =======
     3  
     4  [![GoDoc](https://godoc.org/go-hep.org/x/hep/csvutil?status.svg)](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  ```