сохраняйте разрывы строк из многострочного текстового поля в определенных разделах

#c# #.net #string #replace

Вопрос:

Я хочу предоставить метод, который разбивает содержимое многострочного текстового поля и позволяет сохранять разрывы строк для определенных разделов. Например, входные данные выглядят следующим образом:

 title1: 11.11.2021 title2: documentation title3: right Comment: Here  I still have no  idea how to keep the  line breaks  title4: something  

Я хочу сохранить все это в структуре данных(ключ/значение) и вывести его в порядке, указанном конечным пользователем. Ключом будет, например, «title1» и значение «11.11.2021». Для комментария значением должен быть текст с разрывами строк «Здесь я все еще….». К сожалению, я не влияю на то, как данные записываются в многострочное текстовое поле. Также может случиться так, что будет добавлен еще один комментарий к полю. Конечно, я также открыт для других структур данных

Я был бы очень признателен за любые предложения.

Ответ №1:

Вы можете анализировать строку за строкой, проверять, найдена ли ситуация «Ключ:значение». Запомни ключ. Если ключ не найден:Значение найдено, и у вас есть ключ, расширьте значение последних ключей:

 string t = @"title1: 11.11.2021 title2: documentation title3: right Comment: Here  I still have no  idea how to keep the  line breaks  title4: something";  var d = new Dictionarylt;string,stringgt;(); string key = null;  foreach (var line in t.Replace("rn","n").Split ('n')) {  var kvp = line.Split (":".ToCharArray (), 2);   if (kvp.Length == 1 amp;amp; key == null)  throw new Exception ("First line has no key!");   if (kvp.Length == 1)  {  d[key]  = $"rn{line}";  continue;  }   if (kvp.Length == 2)  {  key = kvp [0];  d [key] = kvp [1];   } }  foreach(var kvp in d)  Console.WriteLine($"{kvp.Key} = '{kvp.Value}'");  

Выход:

 title1 = ' 11.11.2021' title2 = ' documentation' title3 = ' right' Comment = ' Here I still have no idea how to keep the line breaks ' title4 = ' something'  

Комментарии:

1. Привет, Патрик, спасибо, это отличное решение. Теперь мне не хватает только решения проблемы, заключающейся в том, что ключ может возникать дважды. Вы могли бы проверить словарь на наличие ключа, но, к сожалению, значение ключа уже перезаписано в словаре. Мне пришлось бы переименовать ключ при заполнении словаря, например, комментарий, комментарий 1, комментарий 2 и т. Д. У вас есть предложение для меня? Большое спасибо и приветствия

2. @Tim — вы можете сделать это внутри if (kvp.Length == 2): .. перед вставкой нового ключа:Значение проверьте, существует ли ключ уже. Если это так, измените его с помощью числа, метки времени или чего-то подобного. Счастливого кодирования.