Проверить наличие строки в талице по 2 переменным

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
204
Благодарностей
7
Баллы
18
Ребят помогите, устал уже разбираться, ничего не получается!

Нужно проверить таблицу по двум переменным, ниже привожу пример кода:
C#:
int res = 0;
// Текст для обработки
string text = project.ExecuteMacro(project.Variables["Variable5"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=data-mid="").*?(?="")");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    List<string> mid_id = new List<string>();
    mid_id.AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    project.Variables["active"].Value = mid_id[6];
    //    Начало
    
    for (int k = 0; k < mid_id.Count; k++) //for
    {
        if(res == 1) break;
// Название таблицы.
string tableName = "baza_id";

// Имена переменных проекта, в которых находятся значения для поиска.
string var1 = mid_id[k];
string var2 = project.Variables["profile"].Value;

var table = project.Tables[tableName];

// Проверяем значение
if (int.Parse(var1) != table.GetCell(0, int.Parse(var1)) &&
    var2 != table.GetCell(1, var2))
{
    return true;
}

project.Variables["stop"].Value = mid_id[k];
res = 1;
}
}
 

MaksimHelp

Client
Регистрация
23.09.2016
Сообщения
204
Благодарностей
7
Баллы
18
На выходе нужно чтоб цикл остановился на первом же не совпадении и записал в переменную значение из mid_id[k]
 

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
C#:
int res = 0;

// Текст для обработки
string text = project.ExecuteMacro(project.Variables["Variable5"].Value);
var errorIfEmpty = false;
var regexGroups = Macros.TextProcessing.Regex(text, @"(?<=data-mid="").*?(?="")");
if (regexGroups.Count == 0)
{
    if (errorIfEmpty) throw new Exception();
}
else
{
    List<string> mid_id = new List<string>();
    mid_id.AddRange(regexGroups.Select(g => g.FirstOrDefault()));
    project.Variables["active"].Value = mid_id[6];

    // Название таблицы.
    string tableName = "baza_id";

    // Имена переменных проекта, в которых находятся значения для поиска.
    string var2 = project.Variables["profile"].Value;

    var table = project.Tables[tableName];

    for (int k = 0; k < mid_id.Count; k++)
    {
        string var1 = mid_id[k];

        // Проверяем, что строка и столбец существуют в таблице.
        if (table.Rows.Count <= int.Parse(var1) || table.Columns.Count <= 1)
        {
            continue;
        }

        // Проверяем значение в таблице.
        string cell1 = table.GetCell(int.Parse(var1), 0);
        string cell2 = table.GetCell(int.Parse(var1), 1);

        if (cell1 != var1 || cell2 != var2)
        {
            res = 1;
            project.Variables["stop"].Value = mid_id[k];
            break;
        }
    }

    if (res == 0)
    {
        return true;
    }
}

return false;
  1. В цикле for вы используете переменную k для доступа к элементам списка mid_id. Однако, в проверке условия используется int.Parse(var1), что может привести к ошибке, если var1 - это нечисловое значение.
  2. Внутри цикла for есть проверка условия, которая возвращает true в случае, если значение из таблицы не соответствует заданным переменным. Однако, если таблица не содержит соответствующих значений, то функция ничего не возвращает.
  3. В конце цикла for у вас установлено значение res = 1, что может привести к преждевременному выходу из цикла, если он не был завершен полностью.
 

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