コード例 #1
0
 protected abstract void ReadEntry(CsvEntry entry);
コード例 #2
0
ファイル: CsvReader.cs プロジェクト: gitter-badger/Elania
        protected CsvEntry GetEntry(string csv)
        {
            var result = new CsvEntry();

            csv = csv.Trim();

            // Check for empty and commented lines.
            if (csv != string.Empty && !csv.StartsWith("//"))
            {
                int  ptr = 0, braces = 0;
                bool inString = false, comment = false;
                for (int i = 0; i < csv.Length; ++i)
                {
                    // End of line?
                    var eol = (i == csv.Length - 1);

                    // Quotes
                    if (csv[i] == '"' && braces == 0)
                    {
                        inString = !inString;
                    }

                    // Braces
                    if (!inString)
                    {
                        if (csv[i] == '{')
                        {
                            braces++;
                        }
                        else if (csv[i] == '}')
                        {
                            braces--;
                        }
                    }

                    // Comments
                    if (!inString && csv[i] == '/' && csv[i + 1] == '/')
                    {
                        comment = true;
                    }

                    if ((csv[i] == Seperator && braces == 0 && !inString) || eol || comment)
                    {
                        // Inc by one to get the last char
                        if (eol)
                        {
                            i++;
                        }

                        // Get value
                        var v = csv.Substring(ptr, i - ptr).Trim(' ', '\t', '"');

                        // Trim surrounding braces
                        if (v.Length >= 2 && v[0] == '{' && v[v.Length - 1] == '}')
                        {
                            v = v.Substring(1, v.Length - 2);
                        }

                        result.Fields.Add(v);

                        // Skip over seperator
                        ptr = i + 1;

                        // Stop at comments
                        if (comment)
                        {
                            break;
                        }
                    }
                }
            }

            return(result);
        }