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

petrvitaminov

Client
Регистрация
16.05.2016
Сообщения
8
Благодарностей
0
Баллы
1
ща прикрутим проверим :-)
 

petrvitaminov

Client
Регистрация
16.05.2016
Сообщения
8
Благодарностей
0
Баллы
1
работает, только есть ли возможность не привязываться к прописным и строчным значениям в переменной?
 

petrvitaminov

Client
Регистрация
16.05.2016
Сообщения
8
Благодарностей
0
Баллы
1
прошу прощенья, сходу не протестил все, код не привязывается к прописным и строчным значениям в переменной, вытаскивает нужную строку, СПАСИБО!!!
 

Tsuk15

Client
Регистрация
25.04.2017
Сообщения
102
Благодарностей
40
Баллы
28
Код 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".
Спасибо!!
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 443
Благодарностей
8 672
Баллы
113
а воз и ныне там?
с 15 года обещают эту фичу..
или в ветке версий 5.12 уже есть возможность брать строку из списков и таблиц по условию содержания подстроки или по регулярке?
сижу пока на 5.11.7.0, поэтому не могу проверить..
 
  • Спасибо
Реакции: konfuciy

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 443
Благодарностей
8 672
Баллы
113
Код 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:
 

Se0mashines

Client
Регистрация
05.02.2012
Сообщения
209
Благодарностей
52
Баллы
28
Как получить все строки с вхождением? Этот код получает только первую строку.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 717
Благодарностей
1 375
Баллы
113
Код:
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

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
  • Спасибо
Реакции: ammagama и Se0mashines

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 100
Баллы
113
а можно такое же прмиенить, но для таблиц?
подскажите пож-ста код.. :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);
 

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113
А можно сделать, чтобы получения строки не шло единым текстом без пробелов и разделителей, а сделать чтоб с разделителями шло.
И вообще красота была бы, если бы еще по нужным переменным распарсивалось ))
Но хотя бы разделители
 

ammagama

Client
Регистрация
25.09.2009
Сообщения
78
Благодарностей
10
Баллы
8
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));
а подскажите, если делаю в цикле, то у меня результаты выполнения этого кода накапливаются. я сохраняю результат выполнения в переменную, потом записываю ее в текстовый файл. иду на следующий круг, беру другое слово, ищу совпадения и строки следующего круга, добавляются к предыдущему результату. А мне это не надо, надо каждый круг, чистые результаты. Как очистить предыдущий результат выполнения кубика. ?
 

bizzon

Client
Регистрация
08.09.2015
Сообщения
1 085
Благодарностей
126
Баллы
63
  • 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;
  • }
  • }
А как добавить выход по невозможности найти?
 

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 125
Благодарностей
481
Баллы
83
Код 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".
А можно как-то сделать с удалением строки из списка?
 

zennoX

Client
Регистрация
05.04.2014
Сообщения
482
Благодарностей
131
Баллы
43

n0n3mi1y

Client
Регистрация
08.03.2017
Сообщения
1 125
Благодарностей
481
Баллы
83
Дружище, это появилось в 5.18. Я говорил про код на шарпе для корректной работы на старых версиях.
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
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".
спасибо, рабочий код!
 

Tony Soprano

Новичок
Регистрация
07.11.2018
Сообщения
29
Благодарностей
6
Баллы
3
Опция очень нужная и полезная. Но есть небольшой баг. Если производить поиск строки по слову которое прописано с большой буквы, при том что в строках списка это же слово будет прописано с маленькой буквы, то в списке ничего не находит и в переменную результат заходит нулевой. Пофиксите, пожалуйста.

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

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

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

Tony Soprano

Новичок
Регистрация
07.11.2018
Сообщения
29
Благодарностей
6
Баллы
3
Ещё забыл. Было бы неплохо ещё сделать вот так:

 

ibred

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

 
  • Спасибо
Реакции: Tony Soprano

Tony Soprano

Новичок
Регистрация
07.11.2018
Сообщения
29
Благодарностей
6
Баллы
3
Благодарю за совет. Добавил (?i). Всё пашет. Ещё мало опыта в плане составления регулярок. Пользуюсь только тем что выдаёт конструктор рег. выражений. Непосоветуйте что то типа шпаргалки? Где много подобный примеров который вы мне посоветовали и пояснения к ним.

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

Ещё было бы неплохо чтоб была возможность забрать все строки которые содержат искуемый текст, а не только одну.
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
19 443
Благодарностей
8 672
Баллы
113
Мне бы хотелось чтоб брало случайную строку из списка имеющую определённый текст. Тобиш если в списке много строк в которых есть искуемое слово. Чтоб брало эти строки, при каждом запросе, рандомно.
Это можно уже сейчас сделать, правда добавить надо пару экшенов и один список.

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

Вложения

  • Спасибо
Реакции: udder и Tony Soprano

adrew_stonifos

Новичок
Регистрация
17.03.2019
Сообщения
6
Благодарностей
0
Баллы
1

kolina

Client
Регистрация
05.10.2019
Сообщения
158
Благодарностей
44
Баллы
28
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!
Как вариант - добавляйте не слово, а выражение. Например, " на ".
Используйте регулярки: "\sна$", "^на " и похожие.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 605
Благодарностей
4 596
Баллы
113
Подскажите пожалуйста, как получить строку содержащую точное слово
к Примеру: у меня взялось автоматом слово "на", потом по этому слову происходит поиск строк в таблице и в результат добавляются "наш" "наверх" "белизна", а нужно что бы брались строки в которых есть конкретное слово "на"( ну тапа строка в которой написано "пойти на улицу").
Спасибо!!!
модификатор \b в рег. выражениях
 
  • Спасибо
Реакции: kolina

kolina

Client
Регистрация
05.10.2019
Сообщения
158
Благодарностей
44
Баллы
28
А как это применить здесь?
54382
 

alya_6

Client
Регистрация
27.08.2018
Сообщения
172
Благодарностей
19
Баллы
18
Меняете на "Удовлетворяющие регулярному выражению" и заменяете запрос поиска на варианты:
" {-Variable.kusok_hl-} " (аналогичное выражение "\s{-Variable.kusok_hl-}\s"
и смотрите, взялось ли то, что вам нужно.
Если не взялось, надо смотреть по тексту, где еще встречается и экспериментировать с регулярками.
 
  • Спасибо
Реакции: kolina

kolina

Client
Регистрация
05.10.2019
Сообщения
158
Благодарностей
44
Баллы
28
Всё отлично! Огромное спасибо!!! Использую "\s{-Variable.kusok_hl-}\s" эту регулярку.
 
Последнее редактирование:
  • Спасибо
Реакции: udder и alya_6

санчил

Client
Регистрация
15.04.2016
Сообщения
319
Благодарностей
55
Баллы
28
Код 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, Пользователи: 0, Гости: 1)