С# Регулярка парсит лишние пробелы и строки .Trim не помогает

  • Автор темы Автор темы Dmitriy Ka
  • Дата начала Дата начала

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
951
Реакции
737
Баллы
93
Есть настройки которые нужно подгружать из файла в переменные ZP, но потом при работе с этими переменными через C# в них лишние пробелы и строки, (.Trim не помогает), кубики С# потом крашатся, потому что парсятся неверные пути.

Пример:
Строка в файле которую надо спарсить: Account file;D:\ZennoProject\Аккаунты\Украина.txt
С# который парсит и выводит в лог:
C#:
Развернуть Свернуть Копировать
string strSetting = File.ReadAllText(project.Variables["pathSettingFile"].Value);
project.Variables["pathAccount"].Value = Regex.Match(strSetting, @"(?<=Account\ file;).*").Value.Trim();
project.SendInfoToLog(project.Variables["pathAccount"].Value);

Если скопировать результат из лога и вставить в блокнот, получаем лишний пробел в начале и пустую строку с низу:
C#:
Развернуть Свернуть Копировать
 D:\ZennoProject\Аккаунты\Украина.txt
пустая строка

Как это можно победить? Повторные .Trim дальше ни чего не меняют.
 
Файл прикрепить не могу.
В файле много строк с настройками для работы, которые парсятся по переменным ЗП
предлагаешь нам самим догадаться и воссоздать ситуацию с твоим файлом ? мне вот чот не хочется заморачиваться и делать файл , потом подрубать его в зенке.... может кто другой и захочет заморочится.
 
Как это можно победить? Повторные .Trim дальше ни чего не меняют.
Вместо регулярки можешь попробовать сплит по разделителю.
C#:
Развернуть Свернуть Копировать
string strSetting = @"Account file;D:\ZennoProject\Аккаунты\Украина.txt ";// Должна быть 1 строка

project.Variables["pathAccount"].Value = strSetting.Split(';')[1].Trim();

project.SendInfoToLog(project.Variables["pathAccount"].Value);
 
Последнее редактирование:
Если скопировать результат из лога и вставить в блокнот
Зачем копировать результат из лога, если можно посмотреть значение в окне переменные.
Значение в логе может иметь форматирование и отличаться от значения переменной.
 
Переделайте регулярку, она должна начинаться на ^ и заканчиваться на $,
но надо будет включить многострочную опцию:
 
Зачем копировать результат из лога, если можно посмотреть значение в окне переменные.
Значение в логе может иметь форматирование и отличаться от значения переменной.
В окне переменные все ок, пробелов и новых строк нет, а если вывести значение переменной в лог, то уже появляются. Я начал выводить значения в лог, потому что кубики С# начали крашется по причине неверный путь, хотя путь по логу норм, но если его скопировать то лишние пробелы и строки.

А в переменной что?
В логе у строк действительно есть перенос строк.
В переменной ЗП все ок, без лишних пробелов и строк, и если ЛКМ скопировать тоже все ок, если вывести значение из переменной в лог, то в логе тоже вроде все норм, а если скопировать это значение из лога и вставить в блокнот, то уже пробел и новая строка появляется.

Переделайте регулярку, она должна начинаться на ^ и заканчиваться на $,
но надо будет включить многострочную опцию:
Попробую разобраться
 
Переделайте регулярку, она должна начинаться на ^ и заканчиваться на $,
но надо будет включить многострочную опцию:

Сделал вот так:
C#:
Развернуть Свернуть Копировать
project.Variables["pathAccount"].Value = Regex.Match(strSetting, @"(?<=^Account\ file;).*$", System.Text.RegularExpressions.RegexOptions.Multiline).Value.Trim();
Результат не изменился
 
В переменной ЗП все ок, без лишних пробелов и строк, и если ЛКМ скопировать тоже все ок, если вывести значение из переменной в лог, то в логе тоже вроде все норм, а если скопировать это значение из лога и вставить в блокнот, то уже пробел и новая строка появляется.
Да, при копировании сообщения из лога через контекстное меню добавляется перенос строки.
Но в переменных же правильное значение. Лог служит только для вывода информации.
 
Да, при копировании сообщения из лога через контекстное меню добавляется перенос строки.
Но в переменных же правильное значение. Лог служит только для вывода информации.
Основная проблема в том, что при подстановки этой переменной в string C#, в дальнейшем при работе с ней выдается ошибка "Неверный путь" (если вывести этот стринг в лог, путь верный, но при копировании имеет пробел в начале и пустую строку), если же данный путь прописать во Входные настройках, то ошибки с неверным путем уже нет, и если вывести такой стринг в лог и скопировать, то пробелов и лишней строки уже не будет.

Ладно буду придумывать костыли, если так просто такую проблему не победить))

Запутался в форуме, случайно написал 2 ответа ниже, можно их удалить?(facepalm)
 
Основная проблема в том, что при подстановки этой переменной в string C#, в дальнейшем при работе с ней выдается ошибка "Неверный путь" (если вывести этот стринг в лог, путь верный, но при копировании имеет пробел в начале и пустую строку), если же данный путь прописать во Входные настройках, то ошибки с неверным путем уже нет, и если вывести такой стринг в лог и скопировать, то пробелов и лишней строки уже не будет.

Ладно буду придумывать костыли, если так просто такую проблему не победить))
Проблема в чём-то другом. Сбросьте сюда пример шаблона с экшеном на котором возникает ошибка и пример файла из которого парсятся данные.


Запутался в форуме, случайно написал 2 ответа ниже, можно их удалить?(facepalm)
Удалил.
 
Сделал вот так:
C#:
Развернуть Свернуть Копировать
project.Variables["pathAccount"].Value = Regex.Match(strSetting, @"(?<=^Account\ file;).*$", System.Text.RegularExpressions.RegexOptions.Multiline).Value.Trim();
Результат не изменился
Лучше писать так: .+?, так как .* подразумевает и пустоту, а без ? старается забрать вместе с переносами строк, со всем содержимым до конца файла.

(?<=^Account\ file;).+?$

1636929541631.png

И копируйте не из лога, а из переменной.
 
Разобрался)) Проблема оказалась совсем в другом. Из-за переноса части кода в другое место сломались пути, поэтому шаблон на них и ругался

Спасибо всем за помощь!
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)