Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 20:25   #1
Manhunt714
Пользователь
 
Регистрация: 30.05.2011
Сообщений: 21
По умолчанию Delphi files

привед всем, кто знает посдкажите, как перебрать все возможные варианты и выбрать тот файл, который существует, то есть тот который есть на диске... вот у меня например есть файл '23ul53dom.txt' но я не могу узнать как он именно называется он может называться от 1ul34dom.txt до 25ul75dom.txt ...
ПРимер: как я хотел сделать
1ul1dom.txt
1ul2dom.txt
...
2ul1dom.txt
Но полюбому можно через цикл или массив произвести проверку, и узнать какой файл на данный момент существует..и произвести с ним какую нить операцию..например переименовать, удалить, переместить.... я по всякому пытался..он начинает орать типа надо применить strtoint или inttostr (я их путаю) но все равно не получилось.. вопщем прошу помощи
Сам понимаю что написал какую-то кашу но кто-сможет помогите)))

Последний раз редактировалось Manhunt714; 23.09.2011 в 20:28. Причина: ошипке
Manhunt714 вне форума Ответить с цитированием
Старый 23.09.2011, 20:29   #2
Surgeon
Форумчанин
 
Регистрация: 04.10.2007
Сообщений: 106
По умолчанию

Поиск по форуму, недавно обсуждалась тема как перебрать комбинации цифер от допустим 1111 до 9999, было там решение и для произвольного алфавита, т.е. не только цифры но и буквы.
Все не так плохо, как вам кажется, на самом деле все гораздо хуже.
http://delphiworld.narod.ru/dw.html - 5000 статей!!! удобный поиск, оффлайн сборник, рекомендую всем
Surgeon вне форума Ответить с цитированием
Старый 23.09.2011, 20:33   #3
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Перебор имён - это вообще-то дофига долго.

Лучше сделать поиск файлов в папке. Из них отобрать вида XulYdom.txt, где X и Y - два числа.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 23.09.2011, 20:52   #4
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Код:
//Path - где ищем
//mask - по какой маске ищем
// StreetStart, StreetEnd  - в диапозоне от улицы StreetStart до улицы StreetEnd
// HouseStart, HouseEnd  - в диапозоне от дома HouseStart до дома HouseEnd


function FindFileByName(const Path, mask : string;
  StreetStart, StreetEnd,HouseStart, HouseEnd : integer) : string;
var i, j : integer ;
    S : string;
begin
  result:='';
  for i:=StreetStart to StreetEnd do
   for j:=HouseStart to HouseEnd do
   begin
     S:=Path+'\'+format(mask,[i,j]);
     if FileExists(S) then
     begin
      result:=S;
      exit;
     end;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Caption  :=FindFileByName('F:\_Forum\_findstreet','%dulica%ddom.txt', 2, 17, 1, 100);
end;
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 23.09.2011, 23:26   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

JUDAS, но сказали же выше:
Цитата:
Сообщение от GunSmoker
Перебор имён - это вообще-то дофига долго.
более того, господин GunSmoker предложил вариант решения без перебора имен!
причём в поиске через FindFirst задать маску '*ul*dom.txt', это сразу сократит количество подходящих имён файлов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2011, 07:01   #6
Manhunt714
Пользователь
 
Регистрация: 30.05.2011
Сообщений: 21
По умолчанию

спасибо,JUDAS седня вечером помучаюсь..;
GunSmoker, не мог бы показать, как твоим способом сделать?
у меня тоже, была такая же идея вначале, но незнал как "задать маску '*ul*dom.txt' "
Manhunt714 вне форума Ответить с цитированием
Старый 24.09.2011, 08:22   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

поищите на форуме в разделе Delphi по ключевому слову FindFirst
если не разберётесь в найденных примерах - пишите... думаю, что набросать простенький примерчик не составит особого труда.
Кстати, при подобном подходе основная сложность будет в том, чтобы проверить совпадение имени маске [0-9]+ul[0-9]+dom. Идеально было бы просто подключить библиотечку RexExp, но, разумеется, можно и ручками отпарсить (маска в данном случае несложная, разбивать на две подстроки (от 1 до UL и от UL+1 до DOM) и проверять, что полученные подстроки не пусты и содержат исключительно цифры.
Опять таки, не напишите самостоятельно, примерчик получите...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2011, 17:23   #8
Manhunt714
Пользователь
 
Регистрация: 30.05.2011
Сообщений: 21
По умолчанию

Нашел какой-та кодик, все работает, он находит, файл который мне надо, НО как мне этот найденный файл записать в переменную, а потом с ним оперировать??код непонятен(90%) пробовал вот так :
Код:
procedure TForm1.PrintFile(Mask:string;Put:string);
    q:integer;
   sps:array[0..2] of string;
    Name,eba:string;
    SR:TSearchRec;
begin
    q:=0;
    if(FindFirst(Put+Mask,faAnyFile,SR)=0)then//если файлы есть
    begin
     eba:=Put+Mask;
       repeat
        Name:=SR.Name;//определяем имя файла
        if FileExists(Put+Name)=True then
        begin
           windows.SetFileAttributes(pChar(Put+Name),0);
           q:=q+1;//нумерация
           sps[q]:=SR.Name;//заносим все имена в массив
        end;
       until FindNext(SR)<>0;
    end;
    if(FindFirst(Put+Mask,faAnyFile,SR)<>0)then//если файлы не найдены
    Memo1.Lines.Add('Файлы типа '+Mask+' не найдены');
    FindClose(SR);
end;
так же попробовал eba:=(FindFirst(Put+Mask,faAnyFile, SR)=0) Но какой-та бред получается))и ошибку выдает..
Manhunt714 вне форума Ответить с цитированием
Старый 24.09.2011, 17:46   #9
Reqq
 
Регистрация: 21.09.2011
Сообщений: 7
По умолчанию

В какую переменную ты хочешь его записать, и что ты хочешь с ним потом делать?
FindFirst(Put+Mask,faAnyFile, SR) эта конструкция найдет файл имени put+mask и запишет его параметры в запись SR состоящую из
Name: Из длинного названия найденного файла
Size: Размер файла в байтах
Time: Дата/время последнего изменения файла
Attr: атрибуты файла

Последний раз редактировалось Reqq; 24.09.2011 в 18:48.
Reqq вне форума Ответить с цитированием
Старый 24.09.2011, 20:28   #10
Manhunt714
Пользователь
 
Регистрация: 30.05.2011
Сообщений: 21
По умолчанию

Reqq, мне надо, найти файл, и открыть, вот он ищет его..НАХОДИТ!
но как мне написать так, чтоб он его открыл??!
ShellExecute (Form1.Handle, nil, PChar(SR.name), nil, nil, SW_RESTORE); он выдает ошибку: project Project1.exe raised exception class EComponentError with message '''1ul23dom.txt'' is not a valid component name'.Process stopped. Use Step or Run To continue.
Manhunt714 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
'C:\Program Files\Borland\Delphi\Bin\delphi32.$ $$' to 'C:\Program Files\Borland\Delphi\Bin\delphi32.d ro' tonatas Общие вопросы Delphi 2 21.09.2010 08:26
Pascal, files Veselyn Помощь студентам 7 03.06.2009 17:45
Jad files Tirendus Общие вопросы по Java, Java SE, Kotlin 0 13.04.2009 12:05
Header files Rembo Общие вопросы C/C++ 4 10.02.2008 16:09
deleting files Pavel_aress Общие вопросы Delphi 1 06.08.2007 13:21