#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):
.. перед вставкой нового ключа:Значение проверьте, существует ли ключ уже. Если это так, измените его с помощью числа, метки времени или чего-то подобного. Счастливого кодирования.