Консультация № 37608
15.03.2006, 20:14
0.00 руб.
0 6 3
Help ME !!!
Кто подскажет вчём ошибка !?
sr:Tsearchrec;
и
findnext(sr)<>0;
FindClose(sr);
я поставил чтобы закрыть until
если есть более лёгкий способ то скажите !


Приложение:
varf1:textFile;f2:textfile;s1:String;s2:string;s3:string;s4:string;buf1:string[200];buf2:string[200];sr:Tsearchrec;begins1:=Edit1.Text;AssignFile(f1,s1);s2:=Edit2.Text;AssignFile(f2,s2);Reset(f1);Reset(f2);repeatreadln(f1,buf1);readln(f2,buf2);if buf1 <> buf2 thenShowMessage(‘Найдена ошибка‘+buf2);untilfindnext(sr)<>0;FindClose(sr);end;end.

Обсуждение

Неизвестный
15.03.2006, 23:08
общий
это ответ
Здравствуйте, Tamashev Denis M!
Я!
Эта функция (findnext) совсем не за то отвечает. Вам нужна функция проверки положения так называемой "каретки" в открытом файле. Вы ведь именно на конце файла хотите всё прервать ? Тогда eof(f1)или eof(f2). Возвращает True, если каретка в конце файла. TSearchrec Вам абсолютно не нужен для этой задачи.
давно
Мастер-Эксперт
425
4118
16.03.2006, 05:39
общий
это ответ
Здравствуйте, Tamashev Denis M!
Функция FindNext() ПРОДОЛЖАЕТ поиск файлов по заданному шаблону в какталоге. Применение ее в Вашем случае грубейшая ошибка. Уберите ее.
Насчет легкого способа. Способа чего? Если Вы потрудитесь описать задачу, которую Вы хотите решить, тогда можно будет Вам помочь. А пока Ваш вопрос полностью лишен смысла.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
16.03.2006, 10:52
общий
это ответ
Здравствуйте, Tamashev Denis M!
Сначала надо делать FindFirst!!! А только потом FindNext.

Пример: (поиск файлов в папке и подпапках)

function BestFind(directory,extension:string):TStrings;
var Rec : TSearchRec;
res : Integer; //find result
dir,ext : string;
Begin
Result := TStrings.Create;
dir := directory;
ext := extension;
res := FindFirst(dir + ext,faAnyFile,Rec);//find first file
res := FindNext(Rec);//find next file
While res = 0 do
Begin
if (Rec.Attr = faDirectory) and
((Rec.Name = ‘.‘)or(Rec.Name=‘..‘)) then
Begin
Res := FindNext(Rec);
Continue;
End;
if Rec.Attr = faDirectory then // directory found
// find files in it
Begin
BestFind(dir + Rec.Name + ‘\‘,ext);
res := FindNext(Rec);//find next file
Continue;
End;
Result.Add(Rec.Name);
Res := FindNext(Rec);//find next file
End;
// FindClose(Rec);
End;
давно
Мастер-Эксперт
425
4118
16.03.2006, 17:23
общий
Вы, любезный, русского языка не понимаете?1. "Кто подскажет вчём ошибка !?" - я Вам подсказал, что Вы применяете функцию поиска файлов вне области поиска файлов. Как раз в этом Ваша ошибка.2. "если есть более лёгкий способ то скажите !" - Вы не потрудились написать, "чего именно более легкий способ.Вам следует извинится.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
16.03.2006, 17:36
общий
2. "если есть более лёгкий способ то скажите !" - Вы не потрудились написать, "чего именно более легкий способ. Вам следует извинится. А способ полегче чтобы закрыть until !Ато end; подчёркиваеца как ошибка !
давно
Мастер-Эксперт
425
4118
17.03.2006, 05:50
общий
UNTIL - это не отдельная конструкция языка, поэтому вопрос о его закрытии не имеет смысла. Мало того, это не банка с вареньем, не открытый файл и не какое-либо устройство. Закрывать (а равно как и открывать) его не нужно.REPEAT .. UNTIL - это цикл, в котором REPEAT это начало цикла, а UNTIL - его завершение. После UNTIL, в тойже строке, пишеться условие завершения цикла.Вопрос:Что Вы хотите делать внутри цикла?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа