Split большого текста через "сложный" разделитель

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 631
Благодарностей
1 226
Баллы
113
Условно, есть переменная, в ней текст (много строк).
В нескольких местах, допустим, есть текст <Split_Here>, которые являются разделителем.
Причем, таких разделителей в тексте всегда 4, т.е., у нас 5 блоков текста.
Надо этот текст разбить на переменные по этому разделителю.

Для меня удивительно, но кубик (обработка текста - split) из коробки не справился. В переменную закинул только первый кусок до первого разделителя. Ради интереса заменил разделитель на |||, в переменных оказалось только два первых куска =/ При конвертации кубика в код то же самое...
Поскольку текст может быть совершенно любой и с разными тегами/косыми и прочим, и пришлось в качестве разделителя в него вставлять что-нить маловероятно встречаемое. Пусть будет, допустим, <Split_Here>

ps. Вообще, получается, в кубике это не единый разделитель, а массив разделителей (каждый из которых срабатывает).
 
Последнее редактирование:

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
Простой пример. Соответствующие переменные должны существовать.
C#:
int i = 1;
foreach(string part in project.Variables["переменная_с_текстом"].Value.Split(new[]{"<Split_Here>"}, StringSplitOptions.None)){
    project.Variables["split" + i.ToString()].Value = part;
    i++;
}
 
  • Спасибо
Реакции: Moonwalker

Moonwalker

Client
Регистрация
16.03.2016
Сообщения
1 631
Благодарностей
1 226
Баллы
113
Простой пример. Соответствующие переменные должны существовать.
C#:
int i = 1;
foreach(string part in project.Variables["переменная_с_текстом"].Value.Split(new[]{"<Split_Here>"}, StringSplitOptions.None)){
    project.Variables["split" + i.ToString()].Value = part;
    i++;
}
Спасибо, завтра затестю. Насколько понимаю, переменные должны называться split1, split2 и т.д.?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 720
Баллы
113
Спасибо, завтра затестю. Насколько понимаю, переменные должны называться split1, split2 и т.д.?
можно не иметь, а создавать на лету.
вырванный код из контекста как пример.
C#:
                //проверяем существование переменной, если нет то создаем новую
                if (project.Variables.Keys.Contains(vParamName)){
                    project.SendInfoToLog("Переменная "+vParamName+" уже существует - присваиваем ей значение");                 
                    project.Variables[vParamName].Value = vParamValue;
                } else {
                    project.SendInfoToLog("Создаем переменную "+vParamName+" и присваиваем ей значение");
                    object obj = project.Variables;
                    obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{vParamName});
                    project.Variables[vParamName].Value = vParamValue;
                }
и сама тема https://zennolab.com/discussion/threads/chtenie-parametrov-v-avtosozdavaemye-peremennye-iz-ini-fajla-odnim-snippetom.41824/
 
  • Спасибо
Реакции: Moonwalker

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 820
Баллы
113
Можно воспользоваться и стандартным функционалом: Обработка текста - В список. Тут можно использовать сложные разделители и Regex.
77374


ps. Вообще, получается, в кубике это не единый разделитель, а массив разделителей (каждый из которых срабатывает).
Так и есть. Строка будет разбита сразу по всем символам, указанным в поле "Разделители".
 
  • Спасибо
Реакции: proektion и Moonwalker

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