• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Перебор Файлов В Папке И Последующий Поиск

  • Автор темы rob777
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

rob777

Здравствуйте!
Нужно написать программу, которая будет открывать по очереди каждый файл(файлы имеют разные названия) в определенной папке и искать в ней слова(например:после name до f выписать слово). Файлы все в формате txt.
Вот я попробовал кое-что написать, но заступорился: Код на Паскаль

program go;
Uses DOS;
var
S: SearchRec;
begin
FindFirst('C:\marcom\proba\*.txt',AnyFile,S);{открываем файлы по очереди}
while DosError = 0 do
with S do
Reset(s); {открываем файл}
While not eof(f1) do {читаем файл до конца}
{как здесь организовать поиск слова, который находится от <title> до</title>}
{дальше переходим к другому файлу}
FindNext(S)

end.

Заранее спасибо
 
N

nayke

Здравствуйте!
Reset(s); {открываем файл}

Reset не открывает файл а перематывает его для чтения. открывают файл Assign или AssignFile
если вы хотите обрабатывать информацию внутри прочитайте ее сначала например методом Read или ReadFile
и не забудте закрыть файл после обработки.

Вобщем смотрите хелп.
 
R

rob777

Вот я попытался доработать, но одна проблема все-таки осталась. у меня не получается сделать чтобы он перебирал файлы в папке, а только вводить вручную, можете помочь пожалуйста?

<!--shcode--><pre><code class='pascal'>uses crt;
const
n=123;
var
ch:char;
s:string[n];
i:integer;
f:text;

Procedure findText;
begin
reset(f);
repeat
s:='';
for i:=1 to (n-1) do
begin
read(f,ch);
s:=ch;
end;
repeat
read(f,ch);
s[n]:=ch;
for i:=1 to n do begin
s:=s+s;
end;
if s='<div class="labeled fl_l"><a href="/search?c[name]=0&c[section]=people&c[politic]=9" onclick="return nav.go(this, event);">' then
begin
write(' ');
break;
end;
for i:=2 to n do
begin
s[i-1]:=s;
end;
until eof(f);
BEGIN
repeat
if eof(f)=true then begin
break;
end;
read(f,ch);
if ch='<' then
begin
writeln;
readln(f);
break;
end;
write(ch);
until eof(f);
END;
until eof(f);
close(f);
end;

Begin
clrscr;
assign(f,'C:\12.txt');
findText;
assign(f,'C:\22.txt');
findText;
assign(f,'C:\33.txt');
findText;
assign(f,'C:\44.txt');
findText;
assign(f,'C:\55.txt');
findText;
readkey;
end.[/CODE]
 
H

hosm

да замени assign(f,...); на связывание файловой переменной f через assign с именем найденного файла.
Т.е. в первоначальном примере убери "Reset(s); {открываем файл}" и добавь связывание файловой переменной с именем файла (с SR.Name, возможно, еще и путь надо добавить, не помню) и потом уже вызывай findText
 
R

rob777

Не понял, а как добавить связывание с переменной? Я пробовал через FinfFirst, но вот все никак.
 
H

hosm

примерно так:
Код:
var
S: SearchRec;
f:text;
begin
FindFirst('C:\marcom\proba\*.txt',AnyFile,S);
while DosError = 0 do
begin
assign(f, 'C:\marcom\proba\' + s.Name); {связываем с найденным файлом}
findText;
FindNext(S)
end;
end.
 
R

rob777

У меня возникла такая проблема. Чтобы работать с функцией FindFirst надо подключить модуль WinDos, когда я ввожу его в pascal abc он пишет, что модуль не найден. Моя программа в TP7 отказывается работать, пишет, что file not found и показывает на строку reset(f), что делать не знаю...
 
R

rob777

А вот так можно? Я посмотрел, dos на abc - utils, но при запуске пишет неизвестный идентификатор FileFirst. Почему?

Код:
uses crt,utils;
const
n=123;
var
ch:char;
s:string[n];
i:integer;
f:text;
DirInfo : SearchRec;
FileMask : String;
FilePath : String;
FileName : String;

Procedure findText;
begin
reset(f);
repeat
s:='';
for i:=1 to (n-1) do
begin
read(f,ch);
s[i]:=ch;
end;
repeat
read(f,ch);
s[n]:=ch;
for i:=1 to n do begin
s:=s+s[i];
end;
if s='<div class="labeled fl_l"><a href="/search?c[name]=0&c[section]=people&c[politic]=9" onclick="return nav.go(this, event);">' then
begin
write(' ');
break;
end;
for i:=2 to n do
begin
s[i-1]:=s[i];
end;
until eof(f);
BEGIN
repeat
if eof(f)=true then begin
break;
end;
read(f,ch);
if ch='<' then
begin
writeln;
readln(f);
break;
end;
write(ch);
until eof(f);
END;
until eof(f);
close(f);
end;

Begin
clrscr;

FilePath:='C:\Users\marcom\proba\';
FileMask:='*.txt';
FindFirst(FilePath+FileMask, Archive, DirInfo);
While DosError = 0 Do
Begin
FileName:=FilePath+DirInfo.Name; 
assign(f,FileName);
findText;
FindNext(DirInfo);
End;
WriteLn('Press any key...');
readkey;
end.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!