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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обрабатывать каждый файл в папке Delphi XE 
:(
    Опции темы
Campus2000
Дата 23.5.2018, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как, в данный кусок кода, добавить возможность: обрабатывать не один файл, а все файлы что находятся в папке и подпапках. Сейчас обрабатывает только один файл. Друзья - Помогите решить задачу!

Код

var
    SynArr: Array of Array of String;
      VocFile,SrcFile,DstFile: TextFile;
      TxtLine: String;
      SynList: TStringList;
    begin
     AssignFile(VocFile, OpenDialog2.FileName);
     Reset(VocFile);
     SetLength(SynArr, 0);
     SynList := TStringList.Create;
     while not Eof(VocFile)
     do begin
        ReadLn(VocFile, TxtLine);
        SynList.Text := StringReplace(WrapText(TxtLine,#13#10,['|'],1),'|','',[rfReplaceAll]);
        SetLength(SynArr, Length(SynArr)+1);
        SetLength(SynArr[High(SynArr)],SynList.Count);
        for i := 0 to SynList.Count - 1
        do SynArr[High(SynArr),i] := SynList.Strings[i];
        end;
     SynList.Free;
     CloseFile(VocFile);
 
     AssignFile(SrcFile, OpenDialog3.FileName);
     Reset(SrcFile);
 
     AssignFile(DstFile, OpenDialog4.FileName);
     Rewrite(DstFile);
     while not Eof(SrcFile)
     do begin
        ReadLn(SrcFile, TxtLine);
        for i := 0 to High(SynArr)
        do for j := 0 to High(SynArr[i])
           do TxtLine := StringReplace(TxtLine,SynArr[i,j],SynArr[i,Random(High(SynArr[i]))+1],[]);
        WriteLn(DstFile, TxtLine);
        end;
     CloseFile(DstFile);
     CloseFile(Srcfile);
    end;

PM MAIL   Вверх
Snowy
Дата 24.5.2018, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

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



Поиск файлов:
Код
type
  TSearchCallback = function (path: String; isDir: boolean): boolean;
  
procedure ScanDirs(Dir: String; Mask: String; List: TStrings; callback: TSearchCallback = nil);
  procedure ScanDir(Dir: String; Mask: String; List: TStrings; callback: TSearchCallback);
  var sr: TSearchRec;
  begin
    if FindFirst(Dir + Mask, faAnyFile, sr) = 0 then
    begin
      repeat
        if (sr.Attr and faDirectory) <> faDirectory then
        begin
          if Assigned(List) then List.Add(Dir + sr.Name);
          if Assigned(callback) then callback(Dir + sr.Name, false);          
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
var
  sr: TSearchRec;
begin
  if Dir[Length(Dir)] <> '\' then Dir := Dir + '\';
  if FindFirst(Dir + '*.*', faAnyFile, sr) = 0 then
  begin
    repeat
      if (sr.Attr and faDirectory) = faDirectory then
      begin
        if (sr.Name<>'.') and (sr.Name<>'..') then
        begin
          ScanDirs(Dir + sr.Name, Mask, List, callback);
          if Assigned(callback) then
            if callback(Dir+sr.Name, true) then break;
        end;
      end else ScanDir(Dir, Mask, List, callback);
    until FindNext(sr) <> 0;
    FindClose(sr);
  end;
end;


Тест1:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
  sl: TStringList;
  i:  integer;
begin
  sl := TStringList.Create; // сюда складывается список файлов
  ScanDirs('D:\', '*.txt', sl); // сканируем каталоги
  for i := 0 to sl.Count - 1 do // начинаем работать по списку
  begin

  end;
end;


Тест2 с колбэком:
Код

function MyCallBack(Name: String; isDir: boolean): boolean;
begin
  Form1.Caption := Name; // путь к файлу/папке
  Application.ProcessMessages;
  Sleep(0);
  if not isDir then // если не папка
  try
    Form1.Memo1.Lines.LoadFromFile(Name); // что-то делаем с файлом
  except on E: Exception do
    Form1.Memo1.Lines.Text := E.Message; // если ошибка доступа к файлу
  end;
  result := false; // остановить сканирование?
end;    

procedure TForm1.Button2Click(Sender: TObject);
begin
  ScanDirs('D:\', '*.txt', nil, MyCallBack); // запуск
end;


Первый вариант сначала собирает список файлов, потом запускает обработку.
Второй вариант обрабатывает файлы по мере сканирования (аля антивирус).

Оформи свой код, как процедуру и вызывай с параметром имени файла.
Только сначала разберись в коде - хрень какая-то.
Куча ненужных действий и кривой рандом, уменьшающий вероятность на 1/n с каждой следующей строкой (вероятность выбора 1-й строки вдвое выше всех остальных строк вместе взятых, а у последней стремится к нулю)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

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

1. Публиковать ссылки на вскрытые компоненты

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

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


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

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


 




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


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

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