Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Обработка текстовых файлов

Автор: NTL 24.12.2006 20:55

Даны текстовые файлы f и g. Определить, совпадают ли они. Если нет, то получить номер первой строки, в которой файлы f и g различаются. В случае, когда один из файлов имеет N строк и является началом другого более длинного, ответом должен быть число N+1. Помогите, подправить прогрмму, пожалуйста... give_rose.gif

Код

var f,g:text;
    fff,ggg: string;
    i,j,k,ind,k1,k2:integer;
    c:char;
    flag,z:boolean;{отвечает - если файлы одинаковые}

begin
ClrScr;
Assign(f,'C:\f.txt');{Связываем файл с переменной}
Assign(g,'C:\g.txt');

reset(f);
k1:=1;
  while not EOF(f)do         {пока не достигнут конец файла}
    begin
       readln(f,fff);      {читаем из файла в массив}
       writeln(fff);
       inc(k1);
    end;
close(f);                    {закрываем файл}

writeln;

reset(g);
k2:=1;
  while not EOF(g)do
    begin
       readln(g,ggg);
       writeln(ggg);
       inc(k2);
    end;
close(g);

if k1>k2 then k:=k2         {запоиминаем, в каком файле меньше строк}
else if k1<k2 then k:=k1;
flag:=false;

reset(f);reset(g);
z:=Eof(f) or eof(g);
j:=1;
while not z do
   begin

      if  (fff=ggg) then
        begin

           flag:=true
        end  else
         begin
            ind:=j;
            flag:=false;
            break
         end;
     inc(j);
   end;
  if (ind<>1)and(ind<>k) then writeln('Files not equaly. Error in statement #',ind);
    writeln('====',ind,'====',k);
    if (k1=k2) then
    else write('Files is a part of other file, ',k);

    if flag=true then writeln('Files equally');    {файлы одинаковые}
    close(f);close(g);
readln;
end.

Автор: volvo 24.12.2006 21:02

А поиском воспользоваться? Я выкладывал такую программу сравнения TXT, насколько мне помнится...

Вот тут, например: http://forum.pascal.net.ru/index.php?s=&showtopic=3246&view=findpost&p=30707