public void should_encode_csv() { var file = new FileNode(NodeType.Array, typeof(List<Record>), Options.Create(x => x.IncludePublicFields())); var row = new RowNode(1) { { new ValueNode("Property", "oh,"), x => {} }, { new ValueNode("Field", "\"hai\""), x => {} }, { new ValueNode("Null"), x => {} } }; file.Add(row, x => {}); file.EncodeToString().ShouldEqual(Data); }
public void Write(RowNode node) { if (_columns == null) _columns = node.Select(x => x.Name).ToArray(); if (!_columns.Any()) return; Action<object[]> writeLine = x => _writer.Value.Write(x.Select(Encode) .Aggregate((a, i) => a + _delimiter + i) + _newLine); if (_header && _firstRow) writeLine(_columns); var fields = new object[_columns.Length]; node.Where(x => _columns.Contains(x.Name)) .ForEach(x => fields[_columns.IndexOf(x.Name)] = x.Value); writeLine(fields); _writer.Value.Flush(); _firstRow = false; }
private List<RowNode> ParseFile() { var nodes = new List<RowNode>(); var parser = new TextFieldParser(new StreamReader(_readStream, _encoding)); parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(_options.CsvDelimiter); if (parser.EndOfData) return nodes; var columns = parser.ReadFields(); if (columns == null || columns.Length == 0) return nodes; while (!parser.EndOfData) { var fields = parser.ReadFields(); if (fields == null || fields.Length == 0) continue; var rowNode = new RowNode(_rowNumber++); nodes.Add(rowNode); for (var i = 0; i < fields.Length; i++) { rowNode.Add(new ValueNode(columns[i], rowNode, fields[i] == "" ? null : fields[i]), x => {}); } } return nodes; }
private List<RowNode> ParseFile(TextReader reader) { var nodes = new List<RowNode>(); using (var parser = new TextFieldParser(reader)) { parser.TextFieldType = FieldType.Delimited; parser.SetDelimiters(_options.CsvDelimiter); if (parser.EndOfData) return nodes; var columns = parser.ReadFields(); if (columns == null || columns.Length == 0) return nodes; while (!parser.EndOfData) { var fields = parser.ReadFields(); if (fields == null || fields.Length == 0) continue; var rowNode = new RowNode(_rowIndex++); nodes.Add(rowNode); for (var i = 0; i < fields.Length; i++) { rowNode.Add(new ValueNode(columns[i], fields[i]), x => {}); } } } return nodes; }