.Replace не хочет заменять макросы в строке

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113
Всем привет.

Из входных настроек в переменную поступает строка с макросом
строка такого вида: {-Project.Directory-}\accounts.txt

если использовать ее в кубиках, то проблем нет ... но в C# макросы юзать нельзя, поэтому логично заменить этот макрос на реальное значение и уже потом использовать

применяю стандартный метод .Replace для замены подстроки .... но вот именно макрос он заменять не хочет ... в логе пишет мол Unrecognized escape sequence .... любую другую строку подсунь, работает ... и вроде ведь нет тут никаких спецсимволов на которые можно ругаться

string accounts_file = project.Variables["accounts_file"].Value.Trim();
accounts_file = accounts_file.Replace("{-Project.Directory-}",project.Directory);
project.Lists["accounts"].Bind(accounts_file);

или может есть какая-то специальная функция для обработки макросов в строке?
 

Solus

Client
Регистрация
14.04.2014
Сообщения
378
Благодарностей
120
Баллы
43
Попробуйте менять на project.Path
Получится?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113
Переменные вида {- -} не для C#.
дык это понятно, я об этом в стартпосте и пишу ... для этого и хочу заменить макрос на реальное значение, что бы далее использовать в c#
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 371
Баллы
113
дык это понятно, я об этом в стартпосте и пишу ... для этого и хочу заменить макрос на реальное значение, что бы далее использовать в c#
Сорри, не заметил.

Попробуй project.Directory он без слеша.
 

Solus

Client
Регистрация
14.04.2014
Сообщения
378
Благодарностей
120
Баллы
43
Простите, но что-то не могу понять сути процесса. Менять макрос директории проекта на директорию проекта.....
Зачем из входных настроек нести макрос в виде текста чтобы потом его же заменить на то чем он как раз и является ? Может я чего не понял?
project.Lists["Список 1"].Bind(project.Path+"accounts.txt");
или
project.Lists["Список 1"].Bind(project.Directory+"accounts.txt");
Этими строками не обойтись?
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113
Просто когда указываешь во входных настройках макрос директории проекта, то при открытии диалогового окна выбора файла, ты оказываешься именно в папке проекта, а не в корне... поэтому она там и стоит, для удобства
А так то да, я могу пожертвовать удобством, убрать ее оттуда и все будет работать ...
Но все же интересно как в C# сделать замену
 

Solus

Client
Регистрация
14.04.2014
Сообщения
378
Благодарностей
120
Баллы
43
Если вы можете сделать такую замену в стандартном кубике, его так же можно конвертировать в C# и наглядно посмотреть что происходит.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
@"{-Project.Directory-}"
так попробуй
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113
Если вы можете сделать такую замену в стандартном кубике, его так же можно конвертировать в C# и наглядно посмотреть что происходит.
сделал кубик для замены {-Project.Directory-} на строку aaa, скопировал оттуда код, вставил его в редактор ... и ... ошибка ... использование макросов в коде запрещено.
Хотя там вроде как мудреная конструкция именно для выполнения макросов вначале стоит
string text = project.ExecuteMacro("{-Variable.accounts_file-}");
но на эту строку ругается
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 764
Благодарностей
1 391
Баллы
113
Так ... проблема решена ... просто прямым текстом макрос писать нельзя ... поэтому прямую замену сделать не выйдет.
Но можно обработать макрос в строке.

Вот так работает:

string text = project.ExecuteMacro(project.Variables["accounts_file"].Value.Trim());

в результате в text вместо {-Project.Directory} будет подставлен реальный путь к директории
 
Последнее редактирование:
  • Спасибо
Реакции: djaga, impul5e и ZSharp

ZSharp

Client
Регистрация
29.09.2013
Сообщения
395
Благодарностей
126
Баллы
43
delete (дубль)
 
Последнее редактирование:

ZSharp

Client
Регистрация
29.09.2013
Сообщения
395
Благодарностей
126
Баллы
43
Тоже пришлось помучаться пока не нашёл эту тему )
Спасибо @WebBot
Добавил ещё удаление сдвоенных слешей, чтобы на выходе вместо "C:\Template\\file.txt" было "C:\Template\file.txt"
C#:
string pathFile = project.ExecuteMacro(project.Variables["pathFile"].Value.Trim());
pathFile = Macros.TextProcessing.Replace(pathFile, @"\\", @"\", "Text", "All");
return pathFile;
 
Последнее редактирование:
  • Спасибо
Реакции: djaga

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