Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 26.01.2018
Сообщений: 16
1

Несколько масок и замена слов

17.05.2018, 02:10. Показов 777. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Имеется программа, находящая файлы по маске и выбирающая определенные части для записи в Мемо. Нужно добиться поиска не по одной маске, а по нескольким, а также в конце работы заменить определенное слово в Мемо на другое, пробовал использовать ReplaceAll, выдает ошибку.
Код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
std::auto_ptr<TStringList> L(new TStringList);
TStringDynArray list = TDirectory::GetFiles(ExtractFilePath(ParamStr(0)),
"PROT43_R.*", TSearchOption::soAllDirectories);
String aS[29];
for(int i = 0; i < list.Length; i++)
{L->LoadFromFile(list[i]);
aS[0] = L->Strings[21].Trim().SubString(48, L->Strings[40].Pos(":") + 11);
aS[1] = L->Strings[21].Trim().SubString(33, L->Strings[45].Pos(" файл") + 9);
aS[2] = L->Strings[11].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[3] = L->Strings[12].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[4] = L->Strings[13].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[5] = L->Strings[14].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[6] = L->Strings[15].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[7] = L->Strings[16].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[8] = L->Strings[17].Trim().SubString(1, L->Strings[26].Pos(" ") + 14);
aS[9] = L->Strings[25].Trim();
aS[10] = L->Strings[26].Trim();
aS[11] = L->Strings[27].Trim();
aS[12] = L->Strings[28].Trim();
aS[13] = L->Strings[29].Trim();
aS[14] = L->Strings[30].Trim();
aS[15] = L->Strings[33].Trim();
aS[16] = L->Strings[40].Trim();
aS[17] = L->Strings[41].Trim();
aS[18] = L->Strings[42].Trim();
aS[19] = L->Strings[43].Trim();
aS[20] = L->Strings[44].Trim();
aS[21] = L->Strings[45].Trim().SubString(56, L->Strings[45].Pos("=") + 17);
aS[22] = L->Strings[46].Trim().SubString(56, L->Strings[45].Pos("=") + 17);
aS[23] = L->Strings[47].Trim().SubString(56, L->Strings[45].Pos("=") + 17);
aS[24] = L->Strings[48].Trim().SubString(56, L->Strings[45].Pos("=") + 17);
aS[25] = L->Strings[49].Trim().SubString(56, L->Strings[45].Pos("=") + 17);
aS[26] = L->Strings[51].Trim().SubString(29, L->Strings[45].Pos("-") + 9);
aS[27] = L->Strings[21].Trim().SubString(61, L->Strings[44].Pos("в") + 13);
aS[28] = L->Strings[21].Trim().SubString(79, L->Strings[44].Pos("в") + 13);
Memo1->Lines->Add(String().sprintf(L"%s     %s %s %s        %s            %s     %s      %s      %s      %s      %s           %s           %s           %s                %s               %s               %s                                   %s                                              %s                                              %s                                              %s                                              %s                                              %s                                                     %s                                                      %s                                          %s                                          %s            %s                   %s ",
aS[1], aS[0], aS[27], aS[28], aS[2], aS[3], aS[4], aS[5], aS[6], aS[7], aS[8], aS[9], aS[10], aS[11],
aS[12], aS[13], aS[14], aS[15], aS[16], aS[17], aS[18], aS[19], aS[20], aS[21],
aS[22], aS[23], aS[24], aS[25], aS[26]));}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Memo1->Lines->SaveToFile("PROT43_R.SM");
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2018, 02:10
Ответы с готовыми решениями:

Несколько масок
Здравствуйте, подскажите как перечислить несколько масок через запятую? Например copy...

Замена масок другим инструментом.
Добрый день, подскажите чем можно заменить маски adobe flash, но чтобы эффект тот же был ?

Несколько масок ввода в форме через VBA
Уважаемые гуру аксеса! У меня возникла следующая проблема: 1. Имеется база данных склада...

DirectoryInfo.GetFiles и несколько масок для файлов
Пишу, что-то типа галереи изображений. Необходимо в заданной директории выбрать только графические...

7
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
17.05.2018, 11:22 2
Побольше бы конкретики вместо этих расплывчатых фраз...
Цитата Сообщение от nikit9371 Посмотреть сообщение
находящая файлы по маске
Цитата Сообщение от nikit9371 Посмотреть сообщение
определенные части
Цитата Сообщение от nikit9371 Посмотреть сообщение
не по одной маске, а по нескольким
Цитата Сообщение от nikit9371 Посмотреть сообщение
определенное слово
Укажите точно: есть то-то и то-то надо найти то-то и то-то и заменить на слово такое-то...
0
0 / 0 / 0
Регистрация: 26.01.2018
Сообщений: 16
17.05.2018, 11:52  [ТС] 3
Есть текстовые файлы с именами Prot43_R.otk, Prot43_R.tz, Prot43_R.vk и тд, надо чтобы программа находила их не по одной маске "Prot43_R.***", а по нескольким вроде "Prot43_R.o**", "Prot43_R.t**" и тд.
Во всех этих файлах есть слово "верно" и оно несколько раз записывается в Мемо, ну так вот, все слова "верно" в Мемо нужно заменить на "норма".
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.05.2018, 12:16 4
nikit9371, версия Билдера какая?
0
Модератор
9260 / 6038 / 2379
Регистрация: 21.01.2014
Сообщений: 25,801
Записей в блоге: 3
17.05.2018, 12:18 5
Цитата Сообщение от nikit9371 Посмотреть сообщение
надо чтобы программа находила их не по одной маске, а по нескольким
C++
1
2
3
4
5
6
7
8
std::auto_ptr<TStringList> L (new TStringList);
std::auto_ptr<TStringList> Mask (new TStringList);
Mask->CommaText = "*.tx*,*.mp*";
for(int i = 0; i < Mask->Count; i++)
 {
    TStringDynArray List = TDirectory::GetFiles(ExtractFilePath(ParamStr(0)), Mask->Strings[i], TSearchOption::soAllDirectories);
    L->AddStrings(List);
  }
2
0 / 0 / 0
Регистрация: 26.01.2018
Сообщений: 16
17.05.2018, 12:22  [ТС] 6
Версия Embarcadero C++ Builder 10.2
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,431
Записей в блоге: 8
17.05.2018, 12:34 7
В таком случае я бы делал через GetFiles, но не так, как написано выше (несколько раз гонять эту функцию мне не очень нравится, неизвестно, какого размера папки, сколько там файлов. Может оказаться дольше, чем хотелось), а так, как написано вот тут: Функция выборочного копирования файлов (с использованием предиката, который выберет только те файлы, имена которых соответствуют заданным маскам).

Для удобства можно написать с использованием MatchesMask функцию MatchesMultipleMasks, которая будет проверять не одну, а несколько масок. Тогда предикат вообще запишется в одну строку.
1
0 / 0 / 0
Регистрация: 26.01.2018
Сообщений: 16
17.05.2018, 13:28  [ТС] 8
Спасибо всем, вроде разобрался.
Такой еще вопрос, все строки, что в мемо выписываются, нужно сортировать по дате, которая записана в текстовом виде в файлах "Prot43_R" вроде «17.05.18 15ч.18м.12с.». Может есть пара советов?
0
17.05.2018, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 13:28
Помогаю со студенческими работами здесь

Указать несколько масок расширений файлов в одной команде
Ситуация такая: надо запускать 7zip для архивации всех файлов в определенной локации по маске ...

Поиск и замена слов в текстовом файле в несколько потоков
Добрый день. Помогите пожалуйста разобраться с потоками. Мне необходимо: Обеспечить поиск и...

В заданной строке посчитать количество слов. Разделителем слов считается один или несколько ответов
В заданной строке посчитать количество слов. Разделителем слов считается один или несколько...

Написать процедуру и функцию, переводящую первую букву слов в верхний регистр (слов может быть несколько)
Написать процедуру и функцию которая переводит первую букву слов в верхний регистр(слов может быть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru