public static void ParseLineWithoutClose(FCsvLine line, FCharReader reader, FCsvFormat format) { char delimiter = format.Delimiter; FString value = new FString(); while (reader.HasNext()) { // Read char ch = reader.Read(); // Check if (ch == '\n') { line.Append(value.Flush()); break; } else if (ch == delimiter) { line.Append(value.Flush()); continue; } value.Append(ch); } if (!value.IsEmpty) { line.Append(value.Flush()); } }
public FCsvLine AddHeadLine() { FCsvLine line = new FCsvLine(FCsvLineType.Head); _headLines.Push(line); return(line); }
public FCsvLine AddFooterLine() { FCsvLine line = new FCsvLine(FCsvLineType.Footer); _footerLines.Push(line); return(line); }
public FCsvLine CreateLine(FCsvLineType type) { FCsvLine line = new FCsvLine(type); line._heads = _heads; return(line); }
public void ReadHeads() { FCsvLine line = ReadLine(); if (line != null) { line._type = FCsvLineType.Head; _headLines.Push(line); _logger.Debug(this, "ReadHeads", "Read heads {0}", line.Dump()); } }
//============================================================ public void LoadFile(string filename) { FCsvReader reader = new FCsvReader(filename); while (reader.HasNext()) { FCsvLine line = reader.ReadLine(); line._heads = _heads; _lines.Push(line); } }
public void ReadFooter(FCsvLine line) { _stopped = true; line._type = FCsvLineType.Footer; _defineCount = RInt.Parse(line.Last); if (_readedCount != _defineCount) { _status = FCsvReadStatus.InvalidCount; } _footerLines.Push(line); _logger.Debug(this, "ReadFooter", "Read footer count={0}/{1}", _readedCount, _defineCount); }
protected FCsvLine NextLine() { if (_reader != null && _reader.HasNext()) { FCsvLine line = RCsv.ParseLine(_reader, _format); if (line != null) { if (_skipBlank && line.IsEmpty) { return(NextLine()); } line._heads = _heads; return(line); } } return(null); }
//============================================================ // <T>解析CSV文件行。</T> // // @param reader 读取器 // @param format 格式器 // @return 行对象 //============================================================ public static FCsvLine ParseLine(FCharReader reader, FCsvFormat format) { FCsvLine line = null; if (reader.HasNext()) { line = new FCsvLine(); if (format.DataClose) { ParseLineWithClose(line, reader, format); } else { ParseLineWithoutClose(line, reader, format); } } return(line); }
public void WriteFooter() { if (_headLines.IsEmpty()) { FCsvLine line = new FCsvLine(FCsvLineType.Footer); int count = _heads.Count; line.Append(_format.FooterChar); line.Append(_writedCount.ToString()); WriteLine(line); } else { foreach (FCsvLine line in _footerLines) { WriteLine(line); } } }
public void WriteHeads() { if (_headLines.IsEmpty()) { FCsvLine line = new FCsvLine(FCsvLineType.Head); int count = _heads.Count; for (int n = 0; n < count; n++) { line[n] = _heads[n].Description; } WriteLine(line); } else { foreach (FCsvLine line in _headLines) { WriteLine(line); } } }
public void WriteLine(FCsvLine line) { if (line != null) { if (_writer == null) { throw new FFatalException("Not found opened handle"); } FString result = new FString(); if (line.Type == FCsvLineType.Data) { _writedCount++; line.ToString(result, _format.Delimiter, _format.DataClose); } else { line.ToString(result, _format.Delimiter, false); } _writer.WriteLine(result.ToString()); } }
public static void ParseLineWithClose(FCsvLine line, FCharReader reader, FCsvFormat format) { char delimiter = format.Delimiter; bool inComment = false; FString value = new FString(); while (reader.HasNext()) { // Read char ch = reader.Read(); // Check if (inComment) { if (ch == '"') { char nch = reader.Get(1); if (nch == '"') { value.Append(ch); reader.Skip(1); continue; } if (nch == '\n') { line.Append(value.Flush()); reader.Skip(1); break; } if (nch == delimiter) { reader.Skip(1); } inComment = false; line.Append(value.Flush()); continue; } } else { if (ch == '\n') { line.Append(value.Flush()); break; } else if (ch == '"') { inComment = true; continue; } else if (ch == delimiter) { line.Append(value.Flush()); continue; } } value.Append(ch); } if (!value.IsEmpty) { line.Append(value.Flush()); } }