Browse files

First push.

  • Loading branch information...
0 parents commit bd571e67cbfd0be742126f24b3eaa7230031753d @voodootikigod committed Dec 27, 2009
Showing with 2,109 additions and 0 deletions.
  1. +23 −0 README.md
  2. +194 −0 lib/csv.js
  3. +1,800 −0 test/basic_sample.csv
  4. +16 −0 test/each_test.js
  5. +27 −0 test/parse_test.js
  6. +49 −0 test/test_helper.js
23 README.md
@@ -0,0 +1,23 @@
+CSV
+===
+
+A CSV parser for node.js that will parse provided text data or stream parse a file. This allows you to process large files efficiently and using the raw power of node.js's event system.
+
+API
+---
+
+`var csv = require('./lib/csv');`
+
+Imports the CSV parser into your code for use under the variable named 'csv'. Use this to access the functions within the CSV parser.
+
+`csv.each('file.csv')`
+
+Opens and stream parses a CSV file provided by the first argument value. The second argument can be an _options_ object with the following attributes:
+
+ * _headers_: true or false values expected, if true the first row of the provided file will be used as headers and not emitted as data. Furthermore all other rows within the CSV will be converted from array objects to new objects with attributes identified in the headers row.
+ * _strDelimiter_: String delimiter that is used to separate data values within the file. Default is ",", but can be any value.
+ * _readAmount_: Number of bytes to read on each cycle. The smaller the value, the faster the 'data' event is emitted, but it will be more processor and memory intensive. Default is recommended.
+
+`csv.parse("a,b,c,e,f\nk,l,m,s,d")`
+
+Parses a string CSV value and emits 'data' events. Second argument can be an options object with the same attributes as above.
194 lib/csv.js
@@ -0,0 +1,194 @@
+// CSV parser for node.js that handles all standard CSV parsing and
+// returns the data elements in a single 'data' event emmitter.
+// Currently the only exported function is each(filename, option),
+// where filename is the file to process and options can have any
+// of the following:
+//
+// strDelimiter: The string to use for delimiting data elements.
+// headers: If the first line of the file represents headers.
+// Setting this will convert the translated array into
+// an object with the headers as attributes and the
+// values assigned.
+// readAmount: Number of bytes to read before parsing and processing.
+//
+//
+//
+//
+var posix = require("posix");
+var sys = require("sys");
+
+
+// CSVToArray Parsing function from http://www.bennadel.com/blog/1504-Ask-Ben-Parsing-CSV-Strings-With-Javascript-Exec-Regular-Expression-Command.htm
+// This will parse a delimited string into an array of
+// arrays. The default delimiter is the comma, but this
+// can be overriden in the second argument.
+function CSVToArray( strData, strDelimiter ){
+ // Check to see if the delimiter is defined. If not,
+ // then default to comma.
+ strDelimiter = (strDelimiter || ",");
+
+ // Create a regular expression to parse the CSV values.
+ var objPattern = new RegExp(
+ (
+ // Delimiters.
+ "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
+
+ // Quoted fields.
+ "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
+
+ // Standard fields.
+ "([^\"\\" + strDelimiter + "\\r\\n]*))"
+ ),
+ "gi"
+ );
+
+
+ // Create an array to hold our data. Give the array
+ // a default empty first row.
+ var arrData = [[]];
+ // Create an array to hold our individual pattern
+ // matching groups.
+ var arrMatches = null;
+ // Keep looping over the regular expression matches
+ // until we can no longer find a match.
+ while (arrMatches = objPattern.exec( strData )){
+ // Get the delimiter that was found.
+ var strMatchedDelimiter = arrMatches[ 1 ];
+ // Check to see if the given delimiter has a length
+ // (is not the start of string) and if it matches
+ // field delimiter. If id does not, then we know
+ // that this delimiter is a row delimiter.
+ if (
+ strMatchedDelimiter.length &&
+ (strMatchedDelimiter != strDelimiter)
+ ){
+
+ // Since we have reached a new row of data,
+ // add an empty row to our data array.
+ arrData.push( [] );
+ }
+
+
+ // Now that we have our delimiter out of the way,
+ // let's check to see which kind of value we
+ // captured (quoted or unquoted).
+ if (arrMatches[ 2 ]){
+
+ // We found a quoted value. When we capture
+ // this value, unescape any double quotes.
+ var strMatchedValue = arrMatches[ 2 ].replace(
+ new RegExp( "\"\"", "g" ),
+ "\""
+ );
+
+ } else {
+
+ // We found a non-quoted value.
+ var strMatchedValue = arrMatches[ 3 ];
+
+ }
+
+
+ // Now that we have our value string, let's add
+ // it to the data array.
+ arrData[ arrData.length - 1 ].push( strMatchedValue );
+ }
+
+ // Return the parsed data.
+ return( arrData );
+}
+
+
+
+
+
+
+
+exports.each = function (filename, options) {
+ options = (options || {});
+ var strDelimiter = (options.strDelimiter || ",");
+ var headers = null;
+ var position = 0;
+ var readAmount = (options.readAmount || 4096);
+ var buffer = "";
+ var fd = null;
+ var stream = new process.EventEmitter();
+
+ var emit_row = function(row) {
+ var data = CSVToArray(row)[0];
+ if (options["headers"]) {
+ if (headers == null) {
+ headers = data;
+ } else {
+ var obj = {};
+ data.forEach(function(d,i) { obj[headers[i]] = d; });
+ data = obj;
+ }
+ }
+ stream.emit("data", data);
+ }
+
+ var readMore = function() {
+ posix.read(fd, readAmount, position)
+ .addCallback(function(data, bytesRead) {
+ position += bytesRead;
+ buffer += data;
+ var parts = buffer.split("\n");
+ var pl = parts.length;
+ if (pl > 1) {
+ for( var i = 0; i < (pl - 1); i++) {
+ emit_row(parts[i]);
+ }
+ buffer = parts[pl-1];
+ }
+ if (bytesRead == readAmount) {
+ readMore();
+ } else {
+ emit_row(buffer);
+ }
+ })
+ .addErrback(function(e){stream.emit("error",e)})
+ .addListener('eof',function(){posix.close(fd)})
+ .addListener('error',function(){posix.close(fd)});
+ };
+
+ posix.open(filename, process.O_RDONLY, 0666)
+ .addCallback(function (_fd) {
+ if (_fd) {
+ fd = _fd;
+ readMore();
+ }
+ });
+
+ return stream;
+};
+
+exports.parse = function(str, options, data_listener) {
+
+ if (typeof options == "function") {
+ data_listener = options;
+ options = {};
+ }
+ if (typeof data_listener != "function") {
+ throw new Exception("Data listener must be provided");
+ }
+ options = (options || {});
+ var stream = new process.EventEmitter();
+ stream.addListener("data", data_listener);
+ var parts = str.split("\n");
+ var pl = parts.length;
+ var headers = null;
+ for( var i = 0; i < pl; i++) {
+ var data = CSVToArray(parts[i])[0];
+ if (options["headers"]) {
+ if (headers == null) {
+ headers = data;
+ } else {
+ var obj = {};
+ data.forEach(function(d,i) { obj[headers[i]] = d; });
+ data = obj;
+ }
+ }
+ stream.emit('data', data);
+ }
+};
1,800 test/basic_sample.csv
@@ -0,0 +1,1800 @@
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
+a,test,of,csv,parsing,for,me
+the,next,line,of,data,for,you
16 test/each_test.js
@@ -0,0 +1,16 @@
+var helper = require('./test_helper'),
+ sys = require("sys"),
+ csv = require("../lib/csv");
+
+
+helper.testCase("Each Tests", {
+ testParseMultiLine: function(test) {
+ var count = 0;
+ csv.each("basic_sample.csv").addListener("data", function(data) {
+ count += 1;
+ sys.puts(count);
+ });
+ test.assertTrue(count == 1800);
+ }
+});
+
27 test/parse_test.js
@@ -0,0 +1,27 @@
+var helper = require('./test_helper'),
+ sys = require("sys"),
+ csv = require("../lib/csv");
+
+
+helper.testCase("Parse Tests", {
+ testParseSingleLine: function(test) {
+ var parser = csv.parse("a,test,of,csv,parsing,for,me", function(data) {
+ test.assertArrayEquals(["a", "test", "of", "csv", "parsing", "for", "me"], data);
+ });
+ },
+
+ testParseMultiLine: function(test) {
+ var count = 0;
+ var parser = csv.parse("a,test,of,csv,parsing,for,me\na,test,of,csv,parsing,for,me", function(data) {
+ count += 1
+ });
+ test.assertTrue(count == 2);
+ },
+
+ testParseComplexCSV: function(test) {
+ var parser = csv.parse("a,\"test of the power\",234,3.1444", function(data) {
+ test.assertArrayEquals(["a", "test of the power", 234, 3.1444], data);
+ });
+ }
+});
+
49 test/test_helper.js
@@ -0,0 +1,49 @@
+var test = require('mjsunit'),
+ sys = require('sys');
+
+exports.testCase = function(caseName, tests) {
+ var testCount = 0, passes = 0, fails = 0;
+
+ function wrapAssertions(name) {
+ var assertions = {};
+
+ [
+ 'assertEquals',
+ 'assertArrayEquals',
+ 'assertTrue',
+ 'assertFalse',
+ 'assertNaN',
+ 'assertThrows',
+ 'AssertInstanceOf',
+ 'assertDoesNotThrow',
+ 'assertUnreachable'
+ ].forEach(function(assert) {
+ assertions[assert] = function() {
+ testCount++;
+ try {
+ test[assert].apply(this, arguments);
+ passes++;
+ } catch(e) {
+ sys.puts(name + ': ' + e);
+ fails++;
+ }
+ }
+ });
+
+ return assertions;
+ }
+
+
+ for (var name in tests) {
+ if (name.match(/^test/)) {
+ tests[name](wrapAssertions(name));
+ }
+ }
+
+ process.addListener('exit', function() {
+ var passFail = (testCount == passes) ? ' \033[0;32mGOOD!\033[1;37m' : ' \033[0;31mBAD!\033[1;37m';
+ sys.puts(caseName + " - Assertions: " + testCount + " Passed: " + passes + " Failed: " + fails + passFail);
+ });
+}
+
+

0 comments on commit bd571e6

Please sign in to comment.