Вы можете использовать Regex
, чтобы найти вещи в этом направлении (вам нужно было бы сделать немного больше для указанных значений) ...
var value = @"14 S 20 ? OSE ? NHY ""Norsk Hydro"" NO0005052605 1 ""20180921"" 48.6 2068998276 NOK S I ? ? 1 Y"+"\n";
var pattern = new Regex(@"^(""(.*?)""|[^ ""]+)( (""(.*?)""|[^ ""]+)){19,19}\n$");
var match = pattern.Match(value);
if (match.Success)
{
for (int ctr = 1; ctr < match.Groups.Count; ctr++)
{
Console.WriteLine(" Group {0}: {1}", ctr, match.Groups[ctr].Value);
int captureCtr = 0;
foreach (Capture capture in match.Groups[ctr].Captures)
{
Console.WriteLine(" Capture {0}: {1}",
captureCtr, capture.Value);
captureCtr++;
}
}
}
Или, если вы хотите не-Regex решение: использовать string.Split
используя пробел в конструкторе Queue<string>
s, а затем обрабатывать очередь в цикле, Dequeue
каждый элемент за раз.
Если элемент начинался с *Затем 1010 * имеет еще один цикл Dequeue
, входящий в List<string>
до тех пор, пока соответствующий элемент не заканчивается закрывающей кавычкой, после чего восстанавливают указанное значение, используя string.Join(" ", list)
.