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

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
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 дальше ни чего не меняют.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
файл который парсишь прикрепи.
в файле всегда 1 строка ?
Файл прикрепить не могу.
В файле много строк с настройками для работы, которые парсятся по переменным ЗП
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 789
Благодарностей
5 721
Баллы
113
Файл прикрепить не могу.
В файле много строк с настройками для работы, которые парсятся по переменным ЗП
предлагаешь нам самим догадаться и воссоздать ситуацию с твоим файлом ? мне вот чот не хочется заморачиваться и делать файл , потом подрубать его в зенке.... может кто другой и захочет заморочится.
 

radv

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

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

project.SendInfoToLog(project.Variables["pathAccount"].Value);
 
Последнее редактирование:

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Если скопировать результат из лога и вставить в блокнот
Зачем копировать результат из лога, если можно посмотреть значение в окне переменные.
Значение в логе может иметь форматирование и отличаться от значения переменной.
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 246
Благодарностей
1 820
Баллы
113

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 529
Благодарностей
3 375
Баллы
113
Переделайте регулярку, она должна начинаться на ^ и заканчиваться на $,
но надо будет включить многострочную опцию:
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Зачем копировать результат из лога, если можно посмотреть значение в окне переменные.
Значение в логе может иметь форматирование и отличаться от значения переменной.
В окне переменные все ок, пробелов и новых строк нет, а если вывести значение переменной в лог, то уже появляются. Я начал выводить значения в лог, потому что кубики С# начали крашется по причине неверный путь, хотя путь по логу норм, но если его скопировать то лишние пробелы и строки.

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

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

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Переделайте регулярку, она должна начинаться на ^ и заканчиваться на $,
но надо будет включить многострочную опцию:
Сделал вот так:
C#:
project.Variables["pathAccount"].Value = Regex.Match(strSetting, @"(?<=^Account\ file;).*$", System.Text.RegularExpressions.RegexOptions.Multiline).Value.Trim();
Результат не изменился
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 246
Благодарностей
1 820
Баллы
113
В переменной ЗП все ок, без лишних пробелов и строк, и если ЛКМ скопировать тоже все ок, если вывести значение из переменной в лог, то в логе тоже вроде все норм, а если скопировать это значение из лога и вставить в блокнот, то уже пробел и новая строка появляется.
Да, при копировании сообщения из лога через контекстное меню добавляется перенос строки.
Но в переменных же правильное значение. Лог служит только для вывода информации.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Да, при копировании сообщения из лога через контекстное меню добавляется перенос строки.
Но в переменных же правильное значение. Лог служит только для вывода информации.
Основная проблема в том, что при подстановки этой переменной в string C#, в дальнейшем при работе с ней выдается ошибка "Неверный путь" (если вывести этот стринг в лог, путь верный, но при копировании имеет пробел в начале и пустую строку), если же данный путь прописать во Входные настройках, то ошибки с неверным путем уже нет, и если вывести такой стринг в лог и скопировать, то пробелов и лишней строки уже не будет.

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

Запутался в форуме, случайно написал 2 ответа ниже, можно их удалить?(facepalm)
 

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 246
Благодарностей
1 820
Баллы
113
Основная проблема в том, что при подстановки этой переменной в string C#, в дальнейшем при работе с ней выдается ошибка "Неверный путь" (если вывести этот стринг в лог, путь верный, но при копировании имеет пробел в начале и пустую строку), если же данный путь прописать во Входные настройках, то ошибки с неверным путем уже нет, и если вывести такой стринг в лог и скопировать, то пробелов и лишней строки уже не будет.

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


Запутался в форуме, случайно написал 2 ответа ниже, можно их удалить?(facepalm)
Удалил.
 

Yuriy Zymlex

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

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

1636929541631.png

И копируйте не из лога, а из переменной.
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
773
Благодарностей
517
Баллы
93
Разобрался)) Проблема оказалась совсем в другом. Из-за переноса части кода в другое место сломались пути, поэтому шаблон на них и ругался

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

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