Exemple #1
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());
            }
        }