Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Вирусоборец
 Аватар для Sandor
22499 / 15944 / 3089
Регистрация: 08.10.2012
Сообщений: 64,968

Подскажите аналог IndexOf для работы с регулярками

17.11.2022, 11:45. Показов 2383. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Пишу по просьбе знакомого, у которого здесь нет регистрации.

1. Есть список TStringList *list в котором есть перечень имён
2. Проверку наличия имени в списке, делаю через
if (list->IndexOf(name) > -1)
3. Переменная name содержит имя в том виде, в каком получает в процессе проверки
4. В процессе работы накопилось достаточное количество имён, которые имеют одинаковую часть и разный циферной индекс, например: "auto-id100", "auto-id101", "auto-id200" и т.д., постоянно добавлять имена в список не выход, т.к. можно их все записать через одну регулярку.
5. Можно ли как-то подружить или подсказать аналог проверки имён, сохранив формат
if (list->IndexOf(name) > -1) ?
Чтобы не усложнять конструкцию и не использовать брутфорсный перебор всех элементов списка, проверяя сравниваемый элемент с элементом из списка пошагово.

Проект разработанный в среде билдер С++ 2010, для регулярок уже использую в нём Boost.

Подскажите, пожалуйста, способ есть такой есть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.11.2022, 11:45
Ответы с готовыми решениями:

Софт для работы с регулярками
Всем привет! Есть ли какой-нибудь софт для быстрого создания регулярок? Причём создания на основе введённого списка значений - чтобы софт...

Аналог IndexOf для структуры struct
Привет всем. Подскажите кто в курсе. Вопросик вот какой. Допустим у меня есть список TStringList *list = new TStringList(); ......

Аналог indexOf (Java) в php
Существует ли в php аналог indexOf? indexOf - функция ищущая в строке указанную подстроку и возвращающая её положение. String...

6
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
17.11.2022, 12:17
Чтобы проверить наличие - достаточно сделать поиск по list->Text (возможно - по list->DelimitedText) с использованием регулярки. А можно - вообще без регулярок (для конкретно приведенного примера - достаточно простого поиска одинаковой части строки в [Delimited]Text)...

Больше - вряд ли, потому что в стринглисте так или иначе отсутствует механизм поиска более чем одного элемента...
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
30.11.2022, 20:38
Приветы всем.

Собственно, я являюсь автором вопроса, который друзья опубликовали, т.к. не было доступа к киберфоруму. Я хочу уточнить свой вопрос, дабы избежать недопонимания.

Вот простенький код, охватывающий вопрос и скрин
На скрине
1-е поле Memo там где хранится некоторая база
2-е поле Memo, для примера иммитация подаваемых имён на проверку в первом поле.
3-е Memo просто вывод найденных.

например записи вида:
auto-id100
auto-id101
auto-id200
и т.д.,
постоянно добавлять имена в список (1е поле Меmо) не выход, т.к. можно их все записать через одну регулярку.
C++
1
auto-id\d{3}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   UnicodeString str = "";
   // Проверяем второй список Memo2 через IndexOf о
   // наличии идентичных записей в списке Memo1
   for(int i = 0; i < Memo2->Lines->Count; i++){
     str = Memo2->Lines->Strings[i];
     if(Memo1->Lines->IndexOf(str) > -1){
        Memo3->Lines->Add(String(i) + ". - " + Memo2->Lines->Strings[i]);
       }
     }
}
//---------------------------------------------------------------------------
А как проверить через IndexOf(str), что там регулярка, я не знаю. Вернее могу, но для этого придётся сделать ещё один построчный цикл фор для обхода, что не хочется, т.к. простота проверки наличия в списке имени через IndexOf(str) не вызывала никогда проблем, а добавлять постоянно однотипные имена, в которых меняется чаще цифры не выход.

Покажите как правильно можно решить этот вопрос если не затруднит.

И ещё вопросик, нашёл в инете информацию о "any_of.hpp", но не знаю, как его прикрутить к билдеру 2010 и подойдёт ли это для решения задачи?
Миниатюры
Подскажите аналог IndexOf для работы с регулярками  
Вложения
Тип файла: rar IndexOf.rar (377.1 Кб, 9 просмотров)
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33414 / 21523 / 8237
Регистрация: 22.10.2011
Сообщений: 36,923
Записей в блоге: 12
01.12.2022, 00:28
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

Maestro, порядок айтемов в Memo3 важен? А то ведь можно и вот так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <memory>
#include <System.RegularExpressions.hpp>
 
// ...
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    std::auto_ptr<TStringList> L(new TStringList);
    L->AddStrings(Memo1->Lines);
    L->Delimiter = '|';
    TMatchCollection matches = TRegEx::Matches(Memo2->Text, String().sprintf(L"(%s)", L->DelimitedText));
    for (int i = 0; i < matches.Count; i++)
    {
        Memo3->Lines->Add(matches[i].Groups[0].Value);
    }
}
или даже вот так:
C++
1
2
3
4
5
    for (int i = 0; i < matches.Count; i++)
    {
        String s = matches[i].Groups[0].Value;
        Memo3->Lines->Add(String().sprintf(L"%d. -> %s", Memo2->Lines->IndexOf(s), s));
    }

, что выдаст:
Миниатюры
Подскажите аналог IndexOf для работы с регулярками  
2
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
01.12.2022, 22:49
Порядок не важен. Это для наглядного примера просто. Главное, проверка каждого элемента на наличие в записи и соответственно отсигналить - есть\нет.

Спасибо за помощь. Дальше попробую разобраться самостоятельно. ) Просто круто!
0
Маэстро
Вирусоборец
 Аватар для Maestro
1244 / 365 / 40
Регистрация: 06.09.2009
Сообщений: 798
08.01.2023, 13:39
Я извиняюсь за долгое отсутствие, проблемы с электричеством и малым количеством времени, хватает только на самое важное.

У меня C++ Builder 2010
А при подключении этой библиотеки
C++
1
#include <System.RegularExpressions.hpp>
ругается на её отсутствие.
Code
1
[BCC32 Error] IndexOf1.cpp(15): E2209 Unable to open include file 'System.RegularExpressions.hpp'
Не подскажете, нужно доустановить или новый билдер?
Если можно с 2010-м как-то подружить, объясните как это сделать.
Я сам не справлюсь.
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
08.01.2023, 15:33
Лучший ответ Сообщение было отмечено Maestro как решение

Решение

Цитата Сообщение от Maestro Посмотреть сообщение
У меня C++ Builder 2010
Совсем чуть-чуть недотянули Регулярные выражения были интегрированы в RTL буквально в следующей версии - RAD Studio XE. А вообще, конечно, надо обновляться.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2023, 15:33
Помогаю со студенческими работами здесь

Какой аналог у IndexOf в StringBuilder?
Помогите найти идентичный метод IndexOf, в классе StringBuilder. Заранее спасибо.

В чем разница данных методов IndexOf и IndexOf<>
Доброго времени суток. Подскажите пожалуйста в чем отличие методов с символами &lt;&gt; и без них ?

Аналог функций для работы со списками
Помогите найти/написать аналоги функции для работы со списками(2-3 из перечисленных) :...

Аналог AddressOf для работы в Excel 97 ?
У меня начиная с Excel 2000 ссылка на функцию: AddressOF (при использовании функций WinAPI) работает отлично,а в EXCEL 97 этот оператор...

Аналог TStringList для работы с файлом
Доброй день бойцы... Такой вопросик в С++ Buider 5 ... для того что бы взять содержимого текстового файла для дальней работы с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru