Разделить значение в переменной по разным переменным C#

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Здравствуйте, изучила тему https://zennolab.com/discussion/threads/razdelit-znachenie-v-peremennoj-i-polozhit-v-raznye-peremennye-nuzhno-na-c.36879/, но остались вопросы.

У меня одна переменная "kontakty" вида:
8 800 000 00 00
[email protected]
http://site.ru

Но номеров и сайтов может быть 2-6 штук, т.е. переменная может выглядеть и так:

8 800 000 00 00
8 800 000 00 00
8 800 000 00 00
[email protected]
http://site.ru
http://site.ru

Сниппет помогает:
Код:
var list = project.Lists["Контакты"];
string text = project.Variables["kontakty"].Value;
string[] array = text.Split(new[] {"\n"}, StringSplitOptions.None);
if (array [0]!= String.Empty) project.Variables["telfinal"].Value = array [0];
if (array [1]!= String.Empty) project.Variables["email"].Value = array [1];
if (array [2]!= String.Empty) project.Variables["ofsayt"].Value = array [2];
if (array [3]!= String.Empty) project.Variables["ofsayt1"].Value = array [3];
но только в случае, если я точно знаю сколько строк в переменной kontakty.

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

Или придется для каждого количества строк городить сниппеты?
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 454
Благодарностей
8 678
Баллы
113
Конкретно по снипету не подскажу, но я бы ориентировался на парсинг информации по группам отдельным,
в каждой группе чтобы захватывалось любое кол-во контактов. То есть переменных на выходе три, в каждой переменной весь массив контактов по группам (телефоны, почты, сайты).

upload_2019-5-2_15-47-10.png
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Конкретно по снипету не подскажу, но я бы ориентировался на парсинг информации по группам отдельным,
в каждой группе чтобы захватывалось любое кол-во контактов. То есть переменных на выходе три, в каждой переменной весь массив контактов по группам (телефоны, почты, сайты).

Посмотреть вложение 38439
К сожалению, это невозможно - таблицы в таком виде. Как раз пытаюсь переделать, отсоединить.
 

gevolushn

Известная личность
Регистрация
25.03.2019
Сообщения
518
Благодарностей
269
Баллы
63
Заносите содержимое переменной в список, а из списка по порядку берите строку и проверяйте какая она: сайт, телефон или мейл... Когда определили что за тип переменной, добавляете в список под этот тип переменной или в таблицу в определенный столбик.
Если нужно помочь с реализацией кода, обращайтесь, помогу чем смогу.:-)
P.S. Оффтопчик маленький. Когда делается программа/шаблон/скрипт..., то нужно делать максимально гибким и независимым от локальных статичных конструкций.
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Заносите содержимое переменной в список, а из списка по порядку берите строку и проверяйте какая она: сайт, телефон или мейл... Когда определили что за тип переменной, добавляете в список под этот тип переменной или в таблицу в определенный столбик.
Если нужно помочь с реализацией кода, обращайтесь, помогу чем смогу.:-)
P.S. Оффтопчик маленький. Когда делается программа/шаблон/скрипт..., то нужно делать максимально гибким и независимым от локальных статичных конструкций.
Спасибо, на блоках я и сама умею)
Сейчас мне нужна реализация одним шагом в C#
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Спасибо, на блоках я и сама умею)
Сейчас мне нужна реализация одним шагом в C#
C#:
var emailRegex = new Regex(@"(.+)@(.+)");
var phoneRegex = new Regex(@"(\d)\ (\d\d\d) (\d\d\d)\ (\d\d) (\d\d)");
var siteRegex = new Regex(@"http(s)?://");

var data = project.Variables["kontakty"].Value as string;
var dataList = data.Split(new string[]{ Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

foreach(string item in dataList)
{
    if(emailRegex.IsMatch(item))
        project.Variables["email"].Value = item;
   
    else if(phoneRegex.IsMatch(item))
        project.Variables["telfinal"].Value = item;
   
    else if(siteRegex.IsMatch(item))
        project.Variables["ofsayt"].Value = item;
   
    else break;
}
Регулярки сами подберёте.
 
  • Спасибо
Реакции: gevolushn

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