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

  • Автор темы Автор темы MaxLucky
  • Дата начала Дата начала

MaxLucky

Client
Регистрация
13.08.2017
Сообщения
239
Реакции
18
Баллы
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 и так далее
 
Так вам количество совпадений нужно или сами значения ячеек с совпадениями?
Если первое:
1. Заведите отдельный счётчик. Например int counter = 0;
2. Вместо return i; увеличивайте его counter++;
3. После цикла выводите его return counter.ToString();
 
Попробуйте так
Но предупреждаю, если раньше код завершался когда находил нужное значение, сейчас пока не пробежит по всем ячейкам не завершится!
И возвращать будет не номер строки а координаты ячейки, если все таки нужен номер строки, замените 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;
 
В чём смысл этой конструкции?

C#:
Развернуть Свернуть Копировать
else
                {
                    j++;
                }
Это код автора, всех его тонкостей не знаю. Согласен что это странный кусок, который нарушает логику работы цикла
 

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