Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перебор файлов в папке и последующий поиск, корректировка программы 
V
    Опции темы
archer777
Дата 9.12.2011, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.11.2011

Репутация: нет
Всего: нет



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

Код

uses crt;
   const
        n=4;
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[i]:=ch;
            end;
   repeat
        read(f,ch);
        s[n]:=ch;
        for i:=1 to n do begin
        s:=s+s[i];
        end;
        if s='name' 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='f' 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.


Это сообщение отредактировал(а) MetalFan - 13.12.2011, 12:04
PM MAIL   Вверх
ФедосеевПавел
Дата 10.12.2011, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Посмотри в сторону поиска файлов функциями FindFirst и FindNext (модуль DOS или WinDOS). Один из параметров этих функций - маска поиска файлов (например 'c:\Temp\*.txt').
Кроме справки поищи примеры и на форуме.
PM   Вверх
archer777
Дата 10.12.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.11.2011

Репутация: нет
Всего: нет



Я уже думал об этом, но вот такая проблема. Программа у меня работает в паскаль abc, когда я подключаю модуль windos, она пишет, что модуль не найден. В TP7 программа вообще не работает, пишет file not found и указывает на строчку reset(f), что делать не знаю...
PM MAIL   Вверх
Keeper89
Дата 11.12.2011, 03:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: нет
Всего: 58



Так под какой все-таки в итоге компилятор нужно сделать? 


--------------------
PM MAIL WWW   Вверх
ФедосеевПавел
Дата 11.12.2011, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Ничего про PascalABC сказать не могу. Думаю, что модуль может называться как угодно - нужно смотреть в документации.
В TP7
Код
Uses
  CRT, DOS;
...........................
Var
  DirInfo : SearchRec;
  FileMask : String;
  FilePath : String;
  FileName : String;
Begin
  clrscr;
  FilePath:='d:\temp\5\pas\txt\';
  FileMask:='*.txt';
  FindFirst(FilePath+FileMask, Archive, DirInfo);
 { Аналог команды DIR *.txt }
  While DosError = 0 Do
    Begin
      FileName:=FilePath+DirInfo.Name; {<-- полное имя файла}
      assign(f, FileName);
      findText;
      FindNext(DirInfo);
    End;
  WriteLn('Press any key...');
  readkey;
End.

Во FreePascal нужно будет в конце ещё добавить FindClose(DirInfo).

Пользуйся встроенным отладчиком и смотри значения переменных (смотри как для TP7 и FPC) - легче понять что-где-когда косячит.

Это сообщение отредактировал(а) ФедосеевПавел - 11.12.2011, 09:00
PM   Вверх
archer777
Дата 11.12.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.11.2011

Репутация: нет
Всего: нет



Я посмотрел, dos на abc - utils, но при запуске пишет неизвестный идентификатор FileFirst. Почему пытаюсь сделать в abc, а не  в tp7,потому что 1)когда программа выписывает из файла слова, то многие слова на русском, и паскаль выписывает какие-то символы,2)и он пишет, что файл не найден, хотя он там есть. Поэтому прошу помочь на abc.


Код

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.


PM MAIL   Вверх
volvo877
Дата 11.12.2011, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(archer777 @  11.12.2011,  12:44 Найти цитируемый пост)
при запуске пишет неизвестный идентификатор FileFirst
Не FileFirst, а FindFirstFile:
Код

// ...
   clrscr;
   FilePath:='C:\Users\marcom\proba\';
   FileMask:='*.txt';
   if FindFirstFile(FilePath+FileMask, DirInfo) then
      repeat
         FileName := FilePath + DirInfo.Name;
         assign(f, FileName);
         findText;
      until not FindNext(DirInfo);
   WriteLn('Press any key...');
// ...

PM MAIL   Вверх
ФедосеевПавел
Дата 11.12.2011, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 7.2.2009

Репутация: 2
Всего: 10



Только что побывал на http://pascalabc.net - тоже не смог обнаружить подобие поиска файлов по маске.
Но во время поиска на их форуме по ключу "findfirst" появились две ссылки 1)раз, 2)два. Покопаешься - разберёшься.

Если решишь реализовать в FPC или TP7, то придёться перекодировать txt-файлы в 866 (=OEM, =DOS) кодировку в любом текстовом редакторе или подготовить эти файлы в самой среде разработки (IDE).

Да, чуть не забыл... Ведь программа-то у тебя консольная, а значит вывод результатов будет в консольное (как бы DOS) окно в кодировке 866 (=OEM=DOS) вне зависимости от компилятора. Т.е. в любом случае исходные файлы нужно перекодировать из Win-1251 (ANSI) в DOS-866 (OEM).

-------------
Увидел сообщение уважаемого модератора volvo877.

А я наверное плохо искал и не нашел на официальном сайте ни модуля utils, ни функции FindFirstFile...

Это сообщение отредактировал(а) ФедосеевПавел - 11.12.2011, 19:42
PM   Вверх
archer777
Дата 12.12.2011, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 24.11.2011

Репутация: нет
Всего: нет



Спасибо volvo877 и ФедосеевПавел, программа работает так, как хотел!)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0477 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.