|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Привет ! Имеется строка (простой текстовый файл, но я его считываю его в строку). В ней много сокращений вида <!Val1!>, <!Val2!> в тексте. Также имеется словарь, где указано что на что заменять. Код: c# 1. 2.
Т.е. в итоге нужно из этого Код: c# 1.
получить Код: c# 1.
У меня идея решения есть, но какая-то слишком глупая: В цикле вызвать String.Replace каждый раз передавая новое значение замены. С учетом того, что файл занимает несколько Кб, получим кучу мусорных строк на каждой итерации. Как то можно это сделать оптимальней ? PS. Может можно прямо в файле все эти замены сделать ? или все же проще загрузить его в строку ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2014, 20:43 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Используй StringBuilder. Замены текста с помощью его метода Replace будут происходить без создания новых строк. Перевыделение памяти может быть, но в любом случае гораздо меньше, чем при использовании string.Replace. WPF ПадаванPS. Может можно прямо в файле все эти замены сделать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2014, 21:51 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2014, 21:54 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
WPF ПадаванМожет можно прямо в файле все эти замены сделать ?скорее всего, не получится. например, "<!Val1!>" не заменить на "Hello" - разное количество символов (байт), хвост придется сдвинуть ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2014, 21:56 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Яростный Меч, Оу ! Регулярные выражения это мощь ! Это то, что нужно ! Именно, что хотелось - чтобы все было за один проход (полагаю сам регэксп оптимизирован, и за один проход все находит). Чувствовал, что есть решение проще, но не большой специалист в регулярках и не придумал бы сам :) Спасибо Вам большое :) PS. А, ну да. Я забыл что в файле все четко разложено поочередно, и изменить что-то можно только таким же размером. Именно поэтому в древние времена локализаторы, которые русифицировали проги прямо через ресурсы EXE, были вынуждены делать смешные сокращения :) Да и сейчас наверное так делают, если программа не дружелюбна к локализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2014, 22:17 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Простите я сейчас сильно туплю. В общем формат изменился. Т.к. он должен быть в XML, то решено не использовать < Сейчас формат ##Слово##. Пытаюсь использовать такой шаблон Regex.Replace(XmlText, @"###(\w+)###", (Match m) => dict[m.Groups[1].Value]); Но при этом, вылетает такое исключение: "KeyNotFoundException: Данный ключ отсутствует в словаре." Я проверил. В словаре dict хранятся правильные значения. Т.е. пары "##Test1##,'Замена этой фразой1'". И я не понял, что означает ([^!]+) в Вашем шаблоне ? PS. Не понятно, на какой именно ключ ругается. Черт. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2014, 18:19 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Я подозреваю, что # что-то означает в регулярных выражениях. Нет ? Если да, то нужно как то его экранировать, Блин. Буду искать сейчас, но подскажите пожалуйста, если кто знает ) ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2014, 18:26 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
WPF Падаван, для разбора xml лучше использовать xml-парсер. Покажи формат xml. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.01.2014, 19:17 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
WPF ПадаванЯ подозреваю, что # что-то означает в регулярных выражениях. Нет ? Это комментарий экранирующий символ "\" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2014, 10:59 |
|
Как сделать String.Replace но по массиву (т.е. много pair-value правил замены) ?
|
|||
---|---|---|---|
#18+
Отбой отбой. Ложная тревога с моей стороны. Все великолепно ! :) Регулярные выражения действительно рулят ! В общем ошибка была моя. Я не добавил в словарь пару слов под замену. И поэтому и вылетала ошибка, что ключ не найден в этом месте: Код: c# 1.
Т.к. нужно было срочно все сделать - я пошел по пути: в цикле делать String.Replace :) И уже там, в цикле, посмотрел как все конвертится, и увидел что пары значений нет в словаре. Добавил их в словарь Dictionary<string, string> d И... И Регулярки, с шаблоном Код: c# 1.
отлично отработались! Я в итоге просто сравнил две строки - та, что создается регулярками, и та, что у меня получалась в результате ручного StringReplace в цикле. Так они абсолютно идентичные вышли - диффер никаких отличий не увидел. Надо изучить регулярки. Полезная штука ) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2014, 11:25 |
|
|
start [/forum/topic.php?fid=20&fpage=130&tid=1403359]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 340ms |
total: | 476ms |
0 / 0 |