12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- # Example program to show the parsecsv module
- # This program reads a CSV file and computes sum, mean, minimum, maximum and
- # the standard deviation of its columns.
- # The CSV file can have a header which is then used for the output.
- import os, streams, parsecsv, strutils, math, stats
- if paramCount() < 1:
- quit("Usage: statcsv filename[.csv]")
- var filename = addFileExt(paramStr(1), "csv")
- var s = newFileStream(filename, fmRead)
- if s == nil: quit("cannot open the file " & filename)
- var
- x: CsvParser
- header: seq[string]
- res: seq[RunningStat]
- open(x, s, filename, separator=';', skipInitialSpace = true)
- while readRow(x):
- if processedRows(x) == 1:
- newSeq(res, x.row.len) # allocate space for the result
- if validIdentifier(x.row[0]):
- # header line:
- header = x.row
- else:
- newSeq(header, x.row.len)
- for i in 0..x.row.len-1: header[i] = "Col " & $(i+1)
- else:
- # data line:
- for i in 0..x.row.len-1:
- push(res[i], parseFloat(x.row[i]))
- x.close()
- # Write results:
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(header[i])
- stdout.write("\nSum")
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(res[i].sum)
- stdout.write("\nMean")
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(res[i].mean)
- stdout.write("\nMin")
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(res[i].min)
- stdout.write("\nMax")
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(res[i].max)
- stdout.write("\nStdDev")
- for i in 0..header.len-1:
- stdout.write("\t")
- stdout.write(res[i].standardDeviation)
- stdout.write("\n")
|