Подскажите по C# пожалуйста

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
186
Благодарностей
14
Баллы
18
Есть код:

// берем из переменной текст, который надо искать
var textContains = project.Variables["findtext"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["Table"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < sourceTable.RowCount; i++)
{


// читаем строку из таблицы (это будет массив ячеек)
var cells = sourceTable.GetRow(i).ToArray();

// пройдем в цикле по всем ячейкам
for (int j=0; j < cells.Length; j++)
{
// проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
if (cells[j].Contains(textContains)){

// После того как найдено первое совпадение, получаем значение ячейки в переменную findText
var findText = cells[j];

//Сравниваем значение найденой ячейки с искомым текстом, если равно, возвращаем номер строки, если нет идём дальше
if(findText==textContains){
return i;
}

else {
j++;
}

}
}
}
// если ничего не нашли возвращаем "no"
return "no";
}

Сейчас в ответ приходит первое совпадение. А мне нужно понять как сделать 2,3 и так далее
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 991
Благодарностей
4 457
Баллы
113
Так вам количество совпадений нужно или сами значения ячеек с совпадениями?
Если первое:
1. Заведите отдельный счётчик. Например int counter = 0;
2. Вместо return i; увеличивайте его counter++;
3. После цикла выводите его return counter.ToString();
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93
Попробуйте так
Но предупреждаю, если раньше код завершался когда находил нужное значение, сейчас пока не пробежит по всем ячейкам не завершится!
И возвращать будет не номер строки а координаты ячейки, если все таки нужен номер строки, замените result += $"{i}.{j} | "; на result += $"{i};";

C#:
// берем из переменной текст, который надо искать
var textContains = project.Variables["findtext"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["Table"];
// ищем в каждой строчке в таблице
var result = string.Empty;

lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // пройдем в цикле по всем ячейкам
        for (int j=0; j < cells.Length; j++)
        {
            // проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
            if (cells[j].Contains(textContains))
            {
                
                // После того как найдено первое совпадение, получаем значение ячейки в переменную findText
                var findText = cells[j];
                
                //Сравниваем значение найденой ячейки с искомым текстом, если равно, возвращаем номер строки, если нет идём дальше
                if(findText==textContains)
                {
                    result += $"{i}.{j} | ";
                }
                
                else
                {
                    j++;
                }
            
            }
        }
    }
}

return result;
 

Astraport

Client
Регистрация
01.05.2015
Сообщения
4 991
Благодарностей
4 457
Баллы
113
В чём смысл этой конструкции?

C#:
else
                {
                    j++;
                }
 

Dmitriy Ka

Client
Регистрация
03.05.2016
Сообщения
774
Благодарностей
517
Баллы
93

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