Помогите допилить C# для таблицы

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
Собственно сам код
C#:
IZennoTable table = project.Tables["List_user"]; //получаю таблицу
var parserRegex = new System.Text.RegularExpressions.Regex(@"[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}"); //регулярка для поиска email

for(int i = 0; i < table.RowCount; i++){ //строки
    for(int j = 0; j < table.ColCount; j++){  //столбцы
        string stringFind = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringFind
    if (parserRegex.IsMatch(stringFind)) // если есть совпадение с регуляркой
        table.SetCell(17, i, stringFind);  // пишем в 17 столбец и в текущую строку
}
}
Вообщем, как Вы поняли если есть строка "Hello my email - [email protected]" то он всю эту строку добавит в 17 столбец. Чет не получается чтобы он из строки выделил email и писал только его в 17 столбец. Пока победить не получается. Спасибо за любую подсказку.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 685
Благодарностей
4 641
Баллы
113
C#:
IZennoTable table = project.Tables["List_user"]; //получаю таблицу
var parserRegex = new System.Text.RegularExpressions.Regex(@"[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}"); //регулярка для поиска email

for(int i = 0; i < table.RowCount; i++)
{ //строки
    for(int j = 0; j < table.ColCount; j++)
    {  //столбцы
        string stringFind = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringFind
        Match match = parserRegex.Match(stringFind);
        if (match.Success) // если есть совпадение с регуляркой
            table.SetCell(17, i, match.Value);  // пишем в 17 столбец и в текущую строку
    }
}
 
  • Спасибо
Реакции: dihard и Mikhail B.

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
C#:
IZennoTable table = project.Tables["List_user"]; //получаю таблицу
var parserRegex = new System.Text.RegularExpressions.Regex(@"[\.\-_A-Za-z0-9]+?@[\.\-A-Za-z0-9]+?[\.A-Za-z0-9]{2,}"); //регулярка для поиска email

for(int i = 0; i < table.RowCount; i++)
{ //строки
    for(int j = 0; j < table.ColCount; j++)
    {  //столбцы
        string stringFind = table.GetCell(j, i); //получаю значение ячейки таблицы в переменную stringFind
        Match match = parserRegex.Match(stringFind);
        if (match.Success) // если есть совпадение с регуляркой
            table.SetCell(17, i, match.Value);  // пишем в 17 столбец и в текущую строку
    }
}
Спасибо

А не подскажите как сделать исключение в таблице, если в ячейке уже есть строка то пропускаем.

C#:
var list = project.Lists["data"];
IZennoTable table = project.Tables["List_user"];
string column = "R";

for (int x = 0;x<list.Count;x++)
{
    table.SetCell(column,x,list[x]);
}
list.Clear();
return 0;
Тоесть сейчас он берет весь список и добавляет ее в столбец перезаписывая все что там лежало. А как сделать что если в таблице есть строки - то их не трогаем в этом столбце. Пытался через if (!string.IsNullOrEmpty(table.GetCell(column, x))) break; . Но не реагирует)
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
C#:
for(int x = 0, k = 0; x < list.Count; x++, k++){
    if(!string.IsNullOrEmpty(table.GetCell(column[k])))
        k++;
    table.SetCell(column, k, list[x]);
}
 
Последнее редактирование:
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
  • Спасибо
Реакции: Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
сперва написал поспешное решение, а отправив его, понял, что не то) постом выше решение
 
  • Спасибо
Реакции: dihard

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
сперва написал поспешное решение, а отправив его, понял, что не то) постом выше решение
Спасибо большое, а Вы C# изучали, какие-то курсы или самостоятельно?
 

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
C#:
for(int x = 0, k = 0; x < list.Count; x++, k++){
    if(!string.IsNullOrEmpty(table.GetCell(column[k])))
        k++;
    table.SetCell(column, k, list[x]);
}
Попробывал закинуть код, вылазит наверное 100 строк ошибок, какая проблема с компиляцией
Компиляция кода Ошибка в действии "CS0234" "Имя типа или пространства имен "ComponentModel" отсутствует в пространстве имен "System" (пропущена ссылка на сборку?)". [Строка: -25; Cтолбец: 14]

Компиляция кода Ошибка в действии "CS0234" "Имя типа или пространства имен "Data" отсутствует в пространстве имен "System" (пропущена ссылка на сборку?)". [Строка: -24; Cтолбец: 14]

Компиляция кода Ошибка в действии "CS0234" "Имя типа или пространства имен "Drawing" отсутствует в пространстве имен "System" (пропущена ссылка на сборку?)". [Строка: -23; Cтолбец: 14]

и таких строк много
 

dihard

Client
Регистрация
08.11.2019
Сообщения
241
Благодарностей
40
Баллы
28
C#:
var list = project.Lists["data"];
IZennoTable table = project.Tables["List_user"];
string column = "R";

for(int x = 0, k = 0; x < list.Count; x++, k++){
    if(!string.IsNullOrEmpty(table.GetCell(column[k])))
        k++;
    table.SetCell(column, k, list[x]);
}
list.Clear();
return 0;
так выглядит полностью
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 022
Благодарностей
1 424
Баллы
113
опечаточка вышла. "column[k]" Ну, что ж.. бывает. Зато я бы не вернулся и не посоветовал бы сразу изменить if на while, чтобы не перезаписать случайно соседнюю ячейку.
C#:
if(!string.IsNullOrEmpty(table.GetCell(column[k])))//меняем это
//на это
while(!string.IsNullOrEmpty(table.GetCell(column, k)))
 
  • Спасибо
Реакции: lbvf65

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