Решено Получить строки содержащие текст

  • Автор темы Автор темы lzlmrf
  • Дата начала Дата начала
ща прикрутим проверим :-)
 
работает, только есть ли возможность не привязываться к прописным и строчным значениям в переменной?
 
прошу прощенья, сходу не протестил все, код не привязывается к прописным и строчным значениям в переменной, вытаскивает нужную строку, СПАСИБО!!!
 
Код C#
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["Answers"]);
string myString = project.Variables["Question"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Из списка "Answers" берёт строку с переменной "Question".
Спасибо!!
 
а воз и ныне там?
с 15 года обещают эту фичу..
или в ветке версий 5.12 уже есть возможность брать строку из списков и таблиц по условию содержания подстроки или по регулярке?
сижу пока на 5.11.7.0, поэтому не могу проверить..
 
  • Спасибо
Реакции: konfuciy
Код C#
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["Answers"]);
string myString = project.Variables["Question"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Из списка "Answers" берёт строку с переменной "Question".
а можно такое же прмиенить, но для таблиц?
подскажите пож-ста код.. :ah:
 
Как получить все строки с вхождением? Этот код получает только первую строку.
 
Код:
Развернуть Свернуть Копировать
var list1 = project.Lists["list1"]; // здесь ищем
var list2 = project.Lists["list2"]; // сюда складируем

for(int i=0; i<list1.Count; i++){
   if ( list1[i].Contains("строка") == true )
   list2.Add(list1[i]);
}
 
Последнее редактирование:
  • Спасибо
Реакции: Kol57, muxin и Se0mashines
Как получить все строки с вхождением?
C#:
Развернуть Свернуть Копировать
IZennoList list = project.Lists["List"];
string str = project.Variables["text"].Value;
return string.Join("\r\n", list.Where(x => x.Contains(str)).Select(x => x));
 
  • Спасибо
Реакции: ammagama и Se0mashines
а можно такое же прмиенить, но для таблиц?
подскажите пож-ста код.. :ah:
Получить первую строку таблицы, содержащую текст
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["Table"];
string str = project.Variables["text"].Value;
string row;

for (int i = 0; i < table.RowCount; i++) {
    row = string.Concat(table.GetRow(i));
    if (row.Contains(str)) {
        //table.DeleteRow(i); i--; // раскомментировать, если строку нужно брать с удалением
        return row;
    }
}
Получить все строки таблицы, содержащие текст
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["Table"];
string str = project.Variables["text"].Value;
List<string> tmpList = new List<string>();
string row;

for (int i = 0; i < table.RowCount; i++) {
    row = string.Concat(table.GetRow(i));
    if (row.Contains(str)) {
        //table.DeleteRow(i); i--; // раскомментировать, если строки нужно брать с удалением
        tmpList.Add(row);
    }
}
return string.Join("\r\n", tmpList);
 
А можно сделать, чтобы получения строки не шло единым текстом без пробелов и разделителей, а сделать чтоб с разделителями шло.
И вообще красота была бы, если бы еще по нужным переменным распарсивалось ))
Но хотя бы разделители
 
C#:
Развернуть Свернуть Копировать
IZennoList list = project.Lists["List"];
string str = project.Variables["text"].Value;
return string.Join("\r\n", list.Where(x => x.Contains(str)).Select(x => x));
а подскажите, если делаю в цикле, то у меня результаты выполнения этого кода накапливаются. я сохраняю результат выполнения в переменную, потом записываю ее в текстовый файл. иду на следующий круг, беру другое слово, ищу совпадения и строки следующего круга, добавляются к предыдущему результату. А мне это не надо, надо каждый круг, чистые результаты. Как очистить предыдущий результат выполнения кубика. ?
 
  • IZennoTable table = project.Tables["Table"];
  • string str = project.Variables["text"].Value;
  • string row;
  • for (int i = 0; i < table.RowCount; i++) {
  • row = string.Concat(table.GetRow(i));
  • if (row.Contains(str)) {
  • //table.DeleteRow(i); i--; // раскомментировать, если строку нужно брать с удалением
  • return row;
  • }
  • }
А как добавить выход по невозможности найти?
 
Код C#
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["Answers"]);
string myString = project.Variables["Question"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Из списка "Answers" берёт строку с переменной "Question".
А можно как-то сделать с удалением строки из списка?
 
Дружище, это появилось в 5.18. Я говорил про код на шарпе для корректной работы на старых версиях.
 
Код C#
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["Answers"]);
string myString = project.Variables["Question"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Из списка "Answers" берёт строку с переменной "Question".
спасибо, рабочий код!
 
Опция очень нужная и полезная. Но есть небольшой баг. Если производить поиск строки по слову которое прописано с большой буквы, при том что в строках списка это же слово будет прописано с маленькой буквы, то в списке ничего не находит и в переменную результат заходит нулевой. Пофиксите, пожалуйста.

Точно такая же чувствительность к прописанию больших заглавных букв есть и в действии "Обработка текста" Если использовать в таком порядке:

- В верхнем первом окне прописываем переменную в которой находиться много небольших строк по 1-4 слова (все прописанно с маленькой буквы)
- Выбираем "Regex"
- Прописывае регулярку с переменной в которой находиться одно слово с большой буквы. Тобиш регулярка выстроена так, что надо искать слово (которое находиться в переменной) везде где оно встречается, и в конце в и в начале строки
- Выбираем "Одно совпадение" и "Random"
- Результат ноль совпадений

Но стоит лиш прописать в искуемой переменной слово с маленькой буквы, то действие которое я описал выше работает на отлично.
 
  • Спасибо
Реакции: alya_6
Ещё забыл. Было бы неплохо ещё сделать вот так:

IfXSZZ0.png
 
Опция очень нужная и полезная. Но есть небольшой баг. Если производить поиск строки по слову которое прописано с большой буквы, при том что в строках списка это же слово будет прописано с маленькой буквы, то в списке ничего не находит и в переменную результат заходит нулевой. Пофиксите, пожалуйста.
Никакой ошибки или баг нет.
Чтобы регистр не учитывался, нужно добавить в конструкцию (?i) в регулярку.
Ещё забыл. Было бы неплохо ещё сделать вот так:

IfXSZZ0.png
4RZiJyg.png
 
  • Спасибо
Реакции: Tony Soprano
Благодарю за совет. Добавил (?i). Всё пашет. Ещё мало опыта в плане составления регулярок. Пользуюсь только тем что выдаёт конструктор рег. выражений. Непосоветуйте что то типа шпаргалки? Где много подобный примеров который вы мне посоветовали и пояснения к ним.

В плане второго. Вы наверное немного непоняли. Пример того скрина, который вы показываете берёт просто случайную строку из списка. Мне бы хотелось чтоб брало случайную строку из списка имеющую определённый текст. Тобиш если в списке много строк в которых есть искуемое слово. Чтоб брало эти строки, при каждом запросе, рандомно.

Ещё было бы неплохо чтоб была возможность забрать все строки которые содержат искуемый текст, а не только одну.
 
Мне бы хотелось чтоб брало случайную строку из списка имеющую определённый текст. Тобиш если в списке много строк в которых есть искуемое слово. Чтоб брало эти строки, при каждом запросе, рандомно.
Это можно уже сейчас сделать, правда добавить надо пару экшенов и один список.

upload_2018-11-8_22-29-33.png
 

Вложения

  • Спасибо
Реакции: udder и Tony Soprano
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!
 
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!

Как вариант - добавляйте не слово, а выражение. Например, " на ".
Используйте регулярки: "\sна$", "^на " и похожие.
 
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!
модификатор \b в рег. выражениях
 
  • Спасибо
Реакции: kolina
А как это применить здесь?
54382
 
Меняете на "Удовлетворяющие регулярному выражению" и заменяете запрос поиска на варианты:
" {-Variable.kusok_hl-} " (аналогичное выражение "\s{-Variable.kusok_hl-}\s"
и смотрите, взялось ли то, что вам нужно.
Если не взялось, надо смотреть по тексту, где еще встречается и экспериментировать с регулярками.
 
  • Спасибо
Реакции: kolina
Всё отлично! Огромное спасибо!!! Использую "\s{-Variable.kusok_hl-}\s" эту регулярку.
 
Последнее редактирование:
  • Спасибо
Реакции: udder и alya_6
Код C#
Код:
Развернуть Свернуть Копировать
List<string> list = new List<string>();
list.AddRange(project.Lists["Answers"]);
string myString = project.Variables["Question"].Value;
var matchingvalues = list
.FindAll(x => x.IndexOf(myString, StringComparison.OrdinalIgnoreCase) != -1);
return matchingvalues.First();
Из списка "Answers" берёт строку с переменной "Question".
подскажите пожалуйста как исправить код , взять строку не содержащюю текст?
 

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