Example #1
0
        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());
            }
        }
Example #2
0
        public FCsvLine AddHeadLine()
        {
            FCsvLine line = new FCsvLine(FCsvLineType.Head);

            _headLines.Push(line);
            return(line);
        }
Example #3
0
        public FCsvLine AddFooterLine()
        {
            FCsvLine line = new FCsvLine(FCsvLineType.Footer);

            _footerLines.Push(line);
            return(line);
        }
Example #4
0
        public FCsvLine CreateLine(FCsvLineType type)
        {
            FCsvLine line = new FCsvLine(type);

            line._heads = _heads;
            return(line);
        }
Example #5
0
        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());
            }
        }
Example #6
0
        //============================================================
        public void LoadFile(string filename)
        {
            FCsvReader reader = new FCsvReader(filename);

            while (reader.HasNext())
            {
                FCsvLine line = reader.ReadLine();
                line._heads = _heads;
                _lines.Push(line);
            }
        }
Example #7
0
 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);
 }
Example #8
0
 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);
 }
Example #9
0
        //============================================================
        // <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);
        }
Example #10
0
 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);
         }
     }
 }
Example #11
0
 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);
         }
     }
 }
Example #12
0
 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());
     }
 }
Example #13
0
        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());
            }
        }