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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.10.2009, 16:21   #1
jkpro
Пользователь
 
Регистрация: 12.09.2009
Сообщений: 32
Вопрос Сравнение файлов

Здраствуйте программисты, меня интересует как в делфи сделать программу которая:
1. Сравнивала файлы по содержимому (2 тхт файла)
2. Если небыло разницы просто должна запустить другую программу.
3. В случае разницы в файлах, она начала запустить другую прогу.
В Японии скончался старейший пингвин в мире.
Linux объявил 3-х дневный траур...
jkpro вне форума Ответить с цитированием
Старый 04.10.2009, 16:46   #2
Мэс
Пользователь Подтвердите свой е-майл
 
Аватар для Мэс
 
Регистрация: 07.08.2007
Сообщений: 22
По умолчанию

можно просто тупо сравнить, считывая строки из файлов - например так:

Код:
function CompareFiles() : boolean;
var
  f1, f2 : TextFile;
  s1, s2 : string;
  res : boolean;
begin
  AssignFile(f1, 'a.txt');
  AssignFile(f2, 'b.txt');
  Reset(f1);
  Reset(f2);
  res := true;
  while (not(EoF(f1))) do
  begin
    ReadLn(f1, s1);
    ReadLn(f2, s2);
    if (s1 <> s2) then
    begin
      res := false;
      break;
    end;
  end;
  if (res) then
  begin
    Reset(f1);
    Reset(f2);
    while (not(EoF(f2))) do
    begin
      ReadLn(f1, s1);
      ReadLn(f2, s2);
      if (s1 <> s2) then
      begin
        res := false;
        break;
      end;
    end;
  end;
  CloseFile(f1);
  CloseFile(f2);
  Result := res;
end;
Мэс вне форума Ответить с цитированием
Старый 04.10.2009, 17:03   #3
jkpro
Пользователь
 
Регистрация: 12.09.2009
Сообщений: 32
По умолчанию

Мэс покажи где я должен нписать условие
В Японии скончался старейший пингвин в мире.
Linux объявил 3-х дневный траур...
jkpro вне форума Ответить с цитированием
Старый 04.10.2009, 17:13   #4
Мэс
Пользователь Подтвердите свой е-майл
 
Аватар для Мэс
 
Регистрация: 07.08.2007
Сообщений: 22
По умолчанию

Ну например при нажатии кнопки:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  if (CompareFiles()) then
     .... {файлы совпадают}
  else
     ....{файлы не совпадают}
end;
или при создании формы:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  if (CompareFiles()) then
     .... {файлы совпадают}
  else
     ....{файлы не совпадают}
end;
все зависит от логики работы твоей проги.Удачи
Мэс вне форума Ответить с цитированием
Старый 04.10.2009, 22:07   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы ещё перед проверкой в цикле добавил проверку на совпадение размеров файлов:
Код:
  Reset(f1);
  Reset(f2);
  if (FileSize(f1)=0) or (FileSize(f1)<>FileSize(f2)) then
  begin
     CloseFile(f1);
     CloseFile(f2);
     Result := false;
     Exit;
  end;
  res := true;
впрочем, проверку на нулевой размер можно убрать. Это если считать, что два текстовых файла нулевой длины идентичны

А вот проверка на совпадение размера может РЕЗКО ускорить выполнение процедуры сравнения! особенно для больших файлов...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.10.2009, 00:41   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

И обощая это типо вот так:
Код:
Function CompareFiles(File1Name, File2Name:string):boolean;
var
  f1,f2:textFile;\
  s1,s2:string;
begin
  If not (FileExists(File1Name) and FileExists(File1Name)) then
  begin
    result:=false;
    exit;
  end;
  Try
     AssignFile(f1, File1Name);
     reset(f1);
     Try
       AssignFile(f2, File2Name);
       reset(f2);
       If (FileSize(f1)=0) or (FileSize(f1)<>FileSize(f2)) then
       begin
         Result:=false;
         exit;//скока помню по любому должны сработать Finally =)))
       end;
       While not(Eof(f1) or Eof(f1)) Do
       begin
         Readln(f1,s1);
         Readln(f2,s2);
         if s1<>s2 then
         begin
           result:=false;
           exit;
         end;
       end;
       result:=true;
     Finally//будем извращенцами =))))
       FileClose(F2);
     end;
   Finally
     FileClose(F1);
   end;  
end;
Помог? Ну так нажми на весы!

Последний раз редактировалось SNUPY; 05.10.2009 в 18:13.
SNUPY вне форума Ответить с цитированием
Старый 05.10.2009, 08:57   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если господа не против предложу свой вариант сравнения файлов по содержимому, как мне думается наиболее быстрый:
Код:
var q,w:String;a,s:file of byte;
begin
 assignfile(a,'file1.txt');reset(a);
 assignfile(s,'file2.txt');reset(s);
 SetLength(q,FileSize(a));
 SetLength(w,FileSize(s));
 blockread(a,q[1],length(q));
 blockread(s,w[1],length(w));
 if q=w then write('ok') else write('no');
 CloseFile(a);CloseFile(s);
 readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Если смысл неясен могу пояснить.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение файлов WPROF Общие вопросы Delphi 2 24.08.2009 00:19
Сравнение 2 файлов ForzaJuve Общие вопросы Delphi 9 09.06.2009 23:34
чтение файлов и сравнение с условиями Neymexa Общие вопросы .NET 2 14.04.2009 19:05
Сравнение 2-х файлов asale Microsoft Office Excel 17 03.06.2007 15:58
Сравнение текстовых файлов BR17UY Общие вопросы Delphi 15 07.05.2007 20:18