Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
adelbaew2
1 / 1 / 0
Регистрация: 05.02.2013
Сообщений: 227
Записей в блоге: 1
#1

Поиск по тексту и изменение - Delphi

02.02.2015, 09:26. Просмотров 300. Ответов 7
Метки нет (Все метки)

Значит есть список допустим он такой:

acura-cl-05.jpg
acura-legend-v6-ls-06.jpg

Необходимо значит - найти - есть ли в списке файлы ниже цифры до .jpg:

acura-cl-04.jpg ?
acura-cl-03.jpg ?
acura-cl-02.jpg ?
acura-cl-01.jpg ?

Если есть - то ничего не делаем, а если отсутствуют - то записываем в Мемо имя файла полностью с цифрой.

Как загрузить список знаю - как использовать поиск - уже разбираюсь плохо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2015, 09:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поиск по тексту и изменение (Delphi):

Поиск по тексту - Delphi
помогите решить такое задание, подается массив текста, найти позицию первой даты, если нет то выдать сообщение что нет, формат даты такой...

Правильный поиск по тексту - Delphi
Есть текст, например: Какой-то текст +1 бла-бла-бла. пример 22+ 3 ответ... + бла + 123456789. Ещё какой-то текст и тут тоже текст....

Поиск символов по тексту - Delphi
Дано: текст 10-20 тыс. символов. Задача: найти и сохранить символы, находящиеся между всеми знаками '=' и '_' (только в таком порядке -...

Поиск по тексту, использование слова после запятой - Delphi
У меня есть текст в каждой строке там: 1, котенок пушистый, перс, 4 лапы, усы, ест вискас 2, котенок интересный, сфинкс, 4 лапы,...

Доработать маску (поиск по тексту). - Delphi
function _StrCmp(Str,Msk:PChar):boolean; begin while (Str^<>#0)and(Msk^<>#0) do begin if Msk^ = '*' then begin if...

Поиск строчки и изменение txt файла - Delphi
Привет, скажите пожалуйста как сделать программно? Зайдите в папку My Documents\My Games\Outlast\OLGame\Config (знаю) Откройте...

7
milz
Заблокирован
02.02.2015, 09:48 #2
Из всего написанного понятно только то , что в неком списке куча имён файлов и надо определить те, котрых не хватает.
А название исходного номера известно или его тоже надо определить?
Вы знаете что есть в списке такой файл acura-cl-05.jpg?
Или вы только знаете что есть некая группа файлов acura-cl-*.jpg? и надо определить все номера корые есть и которых нет?
0
adelbaew2
1 / 1 / 0
Регистрация: 05.02.2013
Сообщений: 227
Записей в блоге: 1
02.02.2015, 09:51  [ТС] #3
неизвестно наибольшее значение до .jpg -
поэтому надо чтобы в файле искать начинало при acura-cl-05.jpg
все что меньше 05

и так далее
0
milz
Заблокирован
02.02.2015, 10:01 #4
Но в любом случае есть два подхода, Поиск методом анализа или поиск методом синтеза.
Метод синтеза самый простой.
Мы знаем что существует группа файлов с уникальной сигнатурой acura-cl-*.jpg
где * - любое число.
Сам список организован построчно.
Потом всё просто, в цикле синтезируем имя и ищем его.
Известно, что номер содержит нули в незначащих разрядах. То есть не а 1 а 01 И это значит, что файлов может быть не более 99. И значит максимальное количество поисков - 99. Если же запись без значащих нулей, тогда сложнее. Нужно самому задать максимальный возможный номер или прибегнуть к методу анализа.
Предположим что максимальный номер нам известен и выбираем метод синтеза.
0
adelbaew2
1 / 1 / 0
Регистрация: 05.02.2013
Сообщений: 227
Записей в блоге: 1
02.02.2015, 10:05  [ТС] #5
мне казалось проще - мы считываем до .jpg две цифры - затем считываем конструкцию

добавляем две цифры что меньше тех двух цифр, с помощью цикла ищем и если ничего нет в списке - то записываем в мемо
0
milz
Заблокирован
02.02.2015, 11:15 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Тут вполне хватает функции Pos
На каждом этапе синтезируем имя файла с уникальным номером и ищем.
Но для этого сначала надо написать функцию синтезирующую числа с незначащими нулями в старших разрядах.
Количество поисков определяем автоматически по номеру или задаём сами.

алгоритм такой

В цикле.

1 синтезируем номер
2 собираем строку для поиска
3 Ищем
4 Если находим, то ничего не делаем
5 Если не находим, заносим в мемо


Предположим идеальный вариант. Имена файлов в списке. Каждый на своей строке.
Список загружаем в StringList
Delphi
1
2
3
4
5
Var
List:TStringList;
max:integer; //максимальный номер для поиска
 
function NumStr(n,c:integer):string; //это функция формирования номера с незначащими нулями в старших разрядах
Добавлено через 2 минуты
Вы описали метод анализа. Если вам так проще. то пожалуйста. Но на мой взгляд он для вас сложнее.

Добавлено через 8 минут
Delphi
1
2
3
4
5
for i:=1 to max do
begin
Str_:= 'acura-cl-'+ NumStr(i,2)+'.jpg';
if pos(Str_,List.text) = 0 then  ...//заносим строку в memo
end;
Это всё.

Добавлено через 2 минуты
поскольку вы знаете, что максимальный номер 5, то задаёте max:=4

Добавлено через 15 минут
Могу описать и метод анализа.
Тогда, в случае, если каждый файл в своей строке. тогда просто перебираем все строки списка.
Каждую строку подвергаем анализу
1 заносим строку из списка в резервную rez (хотя можно брать напрямую)
2 Ищем в rez уникальны префикс. В вашем случае это 'acura-cl-'
если он не найден, переходим на следующую строку списка и потом на пункт 1
усли найден, на пункт 3
3 к позиции начала префикса добавляем его длину и получаем начало числового значения.
4 ищем вхождение '.jpg'. Это конец числа
5 По этим данным вырезаем строку, содержащую номер и переводим строку в число.
6 В цикле определяем, соответствует ли это значение данному диапазону.

И вот тут камешек. Дело то в том что методом анализа лучше определять то, что есть, а не то чего нет.
Поэтому нужно составить отдельно весть список, а потом проверять, входит ли в него найденный файл. Если входит, то удаляем его из списка.

7 крутим цикл пока не пройдём все строки.
1
adelbaew2
1 / 1 / 0
Регистрация: 05.02.2013
Сообщений: 227
Записей в блоге: 1
02.02.2015, 11:26  [ТС] #7
Большое спасибо
0
milz
Заблокирован
02.02.2015, 11:33 #8
Delphi
1
2
3
4
5
6
7
8
9
10
unit StrUtils
 
function NumStr(n,c:integer):string;
//n - число преобразуемое в номер
//с - количество разрядов - максимум - 8
begin
if c > 8 then c = 0;//максимальное количество разрядов - 8
if c = 0 then result:= intToStr(n) else
result:= RightStr('00000000'+intToStr(n),c);
end;
0
02.02.2015, 11:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2015, 11:33
Привет! Вот еще темы с ответами:

Поиск в текстовом файле и его изменение - Delphi
Есть файл .тхт, примерно такой структуры: cost 200/комент weight 3.0/комент и ище много других параметров. нужно найти...

Поиск строки в памяти запущенного процесса и её изменение - Delphi
Не могу решить задачку нужно считать строку из памяти процесса запущенной программы. RVA строки $0036D0C8 нужен ведь RVA не VA ...

применение условия к тексту - Delphi
помогите решить. есть программа (для примера). и есть в ней кнопка Button1. вот я открываю текстовый файл (приложен) - нажимаю на...

Вывод статистики по заданному тексту - Delphi
Прошу помочь составить программу, такую в которую можно водить текст любой неважно в мемо поле или листбоксе, чтобы оно выдавало структуру...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.