Advertisement
Guest User

Untitled

a guest
Oct 20th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.04 KB | None | 0 0
  1. using System.Collections.Generic;
  2. using System.Text;
  3.  
  4. namespace TableParser
  5. {
  6.     public class FieldsParserTask
  7.     {
  8.         public static List<string> ParseLine(string inputLine)
  9.         {
  10.             var word = new StringBuilder();
  11.             var line = inputLine + " ";
  12.             var parsedLine = new List<string>();
  13.  
  14.             for (var i = 0; i < line.Length; i++)
  15.             {
  16.                 var ch = line[i];
  17.                 if (ch == '\"' || ch == '\'')
  18.                 {
  19.                     AddNotEmptyWord(word, parsedLine);
  20.                     var token = ReadField(line, i, parsedLine);
  21.                     AddNotEmptyWord(new StringBuilder(token.Value), parsedLine);
  22.                     i += token.Length;
  23.                 }
  24.                 else if (ch == ' ')
  25.                     AddNotEmptyWord(word, parsedLine);
  26.                 else
  27.                     word.Append(ch);
  28.             }
  29.             if (parsedLine.Count == 0 && inputLine != "")
  30.                 parsedLine.Add("");
  31.             return parsedLine;
  32.         }
  33.  
  34.         private static Token ReadField(string line, int startIndex, List<string> parsedLine)
  35.         {
  36.             var field = new StringBuilder();
  37.             var typeOfQuote = line[startIndex];
  38.             for (var i = startIndex + 1; i < line.Length; i++)
  39.             {
  40.                 var ch = line[i];
  41.                 if (ch == '\\')
  42.                     field.Append(line[++i]);
  43.                 else if (ch != typeOfQuote)
  44.                     field.Append(ch);
  45.                 if (ch == typeOfQuote || i == line.Length - 2)
  46.                 {
  47.                     var length = i - (startIndex + 1);
  48.                     return new Token(field.ToString(), startIndex, length + 1);
  49.                 }
  50.             }
  51.             return new Token("", startIndex, 0);
  52.         }
  53.  
  54.         private static void AddNotEmptyWord(StringBuilder word, List<string> list)
  55.         {
  56.             if (word.Length != 0)
  57.                 list.Add(word.ToString());
  58.             word.Clear();
  59.         }
  60.     }
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement