Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections.Generic;
- using System.Text;
- namespace TableParser
- {
- public class FieldsParserTask
- {
- public static List<string> ParseLine(string inputLine)
- {
- var word = new StringBuilder();
- var line = inputLine + " ";
- var parsedLine = new List<string>();
- for (var i = 0; i < line.Length; i++)
- {
- var ch = line[i];
- if (ch == '\"' || ch == '\'')
- {
- AddNotEmptyWord(word, parsedLine);
- var token = ReadField(line, i, parsedLine);
- AddNotEmptyWord(new StringBuilder(token.Value), parsedLine);
- i += token.Length;
- }
- else if (ch == ' ')
- AddNotEmptyWord(word, parsedLine);
- else
- word.Append(ch);
- }
- if (parsedLine.Count == 0 && inputLine != "")
- parsedLine.Add("");
- return parsedLine;
- }
- private static Token ReadField(string line, int startIndex, List<string> parsedLine)
- {
- var field = new StringBuilder();
- var typeOfQuote = line[startIndex];
- for (var i = startIndex + 1; i < line.Length; i++)
- {
- var ch = line[i];
- if (ch == '\\')
- field.Append(line[++i]);
- else if (ch != typeOfQuote)
- field.Append(ch);
- if (ch == typeOfQuote || i == line.Length - 2)
- {
- var length = i - (startIndex + 1);
- return new Token(field.ToString(), startIndex, length + 1);
- }
- }
- return new Token("", startIndex, 0);
- }
- private static void AddNotEmptyWord(StringBuilder word, List<string> list)
- {
- if (word.Length != 0)
- list.Add(word.ToString());
- word.Clear();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement