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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2007, 13:36   #1
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию Где ошибка в коде?

Вот часть исходного кода по поиску файла:

procedure TForm1.FindFile(Dir:String);
var SR:TSearchRec;
FindRes:Integer;
begin
FindRes:=FindFirst(Dir+'*111*.*',fa AnyFile,SR);
While FindRes=0 do
begin
if ((SR.Attr and faDirectory)=faDirectory) and
((SR.Name='.')or(SR.Name='..')) then
begin
FindRes:=FindNext(SR);
Continue;
end;
if ((SR.Attr and faDirectory)=faDirectory) then
begin
FindFile(Dir+SR.Name+'\');
FindRes:=FindNext(SR);
Continue;
end;

По идее, процедура должна найти файл (я выбрал каталог поиска) с именем *111*.*, где вместо звездочек любые символы и цифры. Но результат непредсказуем: выдает и этот и другие файлы (без единичек в имени).
Кто может указать на ошибку?
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:01   #2
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

*111* попробуй
пыщь
JTG вне форума Ответить с цитированием
Старый 10.09.2007, 14:04   #3
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Пробовал, ничего не находит без расширения.
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:06   #4
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

если так искать не захочет, она может так и не должна искать, бери имя файла в строку и функцией Pos сам ищи

P.S. по моему результат как раз предсказуем - все файлы подряд
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.09.2007, 14:14   #5
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Что-то я совсем не понимаю, я вставил в конец

if pos(edit2.Text,sr.name)<>0 then begin
ListView1.AddItem(SR.Name,listview1 );

Пусто...
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:21   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Цитата:
if pos(edit2.Text,sr.name)<>0 then begin
ListView1.AddItem(SR.Name,listview1 );
здесь все правильно, разве что begin непонятно откуда затесался,
ищи в остальном коде, скорее всего не туда всунул
сунь туда же ShowMessage(нужная переменная); и узнаешь причину

p.s. кстати, разве не так надо ListView1.Items.Add ?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог

Последний раз редактировалось mutabor; 10.09.2007 в 14:27.
mutabor вне форума Ответить с цитированием
Старый 10.09.2007, 14:28   #7
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Не, там правильно, я не всё показал, на самом деле

if pos(edit2.Text,sr.name)<>0 then begin
ListView1.AddItem(SR.Name,listview1 );
FindRes:=FindNext(SR);
end; end;
FindClose(SR);
end;

Всунул туда же showmessage(sr.name); - ничего не выдает... Странно
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:33   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Александр Македонский, У меня твой код вообще не идет, поскольку там куча недоделок синтаксических, вот тебе мой пример для раздумий :

unit Unit1;

interface

uses shellapi,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
function findA(p:string; var slist:TStringList):variant;
var i:integer;
Form1: TForm1;

implementation

{$R *.dfm}
//********** FUNCTION **********
function findA;
var s:TSearchRec; lp,ep,ss:string;k:integer;
begin
ep:=ExtractFilePath(p)+'*.*';
if FindFirst(ep,faAnyFile, s)=0 then begin
repeat
if (s.Name <>'.')and(s.Name <>'..') then begin
lp:='';k:=0; while k<=i*4 do begin lp:=lp+' ';inc(k);end;
if s.Attr=faDirectory then
slist.Append(lp+'['+s.Name+']')
else
if s.Name='Doc1.doc' then
ShellExecute(Application.Handle,'op en',pchar(ExtractFilePath(ep)+s.Nam e),'','',SW_SHOWDEFAULT);
slist.Append(lp+s.Name);
if s.Attr=faDirectory then begin
inc(i);
findA(ExtractFilePath(p)+s.Name+'\' +ExtractFileName(p), slist);
dec(i);
end;
end;
until FindNext(s)<>0
end;
end;
//********** END FUNCTION ****** {}
procedure TForm1.FormCreate(Sender: TObject);

var ts:TStringList;
begin
ts:=TStringList.Create;
finda('c:\temp\*.*',ts);
ListBox1.Items:=ts;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2007, 14:44   #9
Македонский
Александр
Форумчанин
 
Аватар для Македонский
 
Регистрация: 15.08.2007
Сообщений: 112
По умолчанию

Конечно не идет, надо еще процедуру написать

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
listView1.Clear;
FindFile(shellcombobox1.Path+'\'); // или вместо shell что-нить другое
end;

А насчет твоего кода - спасибо, попробую разобрать.

Последний раз редактировалось Македонский; 10.09.2007 в 14:46.
Македонский вне форума Ответить с цитированием
Старый 10.09.2007, 14:47   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Нет ты меня немного не понял, я имею ввиду что у тебя в первом посте кол-во begin и end не совпадает, да и вообще его править серьезно нуна, посему и предложил тебе свой, ибо тоже когда-то специально ради такого потерял время с пользой )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++ ошибка в коде. Непонимаю что не так POPOV Помощь студентам 2 04.09.2008 18:04
AD (LDAP) - ошибка в коде, на рассмотрение Mouse123 Общие вопросы Delphi 3 30.06.2008 14:10
Ошибка в коде (BorderStyle) Airou Общие вопросы Delphi 10 24.05.2008 19:50
Ошибка в коде nikleb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 10.03.2008 22:48
Что в коде не так? Simply-Art Общие вопросы Delphi 3 08.07.2007 19:32