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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2012, 00:09   #1
Nikproam
Новичок
Джуниор
 
Регистрация: 20.06.2012
Сообщений: 7
По умолчанию Задача в Делфи, работа с текстовыми файлами

Доброго времени суток, я начинающий(очень начинающий )) в Делфи.
задли написать програму:
--------------------------------------------------------------------------
Даны два текстовых файла f и g. Определить совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой строки и позицию первого символа в этой строке, в которых файлы f и g отличаются между собой. Обеспечить возможность вывода файлов.
---------------------------------------------------------------------------
Скелет во вложении (там чуть другое условие отсылаю для наглядности интерфейса)
Кто сможет подсобите, а то я уже в тупике(, заранее спасибо!
Вложения
Тип файла: rar laba8.rar (175.2 Кб, 7 просмотров)
Nikproam вне форума Ответить с цитированием
Старый 21.06.2012, 02:19   #2
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

В начале сравниваешь файлы на сходство по ко-ву строк, ели одигаковы по кол-во строк, тогда запускаем мою процедуру.
Код:
PROCEDURE SravnFiles;
 Var
   F,G:TextFile;
   strF,strG:string;
   k,z:integer;
 BEGIN
  AssignFile(f,'имяфайла');
  AssignFile(g,'имяфайла');
  Reset(f);
  Reset(g);
  While not(Eof) Do
   Begin
     Readln(F,strF);
     Readln(G,strG);
     Inc(z);
    IF strF<>strG Then
     Begin
       For k:=0 to 255 Do
        IF strF[k]<>strG[k] Then
         Begin
           Form1.Edit1.Text:='Nomer stroki: '+IntToStr(z)+
           ' Nomer Simwola: '+IntToStr(k);
           CloseFile(f);
           CloseFile(g);
           exit;
         End;
     End;
   End;
  CloseFile(f);
  CloseFile(g);
 END;
___________________________________ _______
<---- Весы выражения благодарности там.
<----Весы Там.

Последний раз редактировалось Npwas; 21.06.2012 в 02:27.
Npwas вне форума Ответить с цитированием
Старый 21.06.2012, 07:56   #3
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А как узнать количество строк?
Иди Вы считаете, что для сравнения файлов нужно прочитать каждый из них не менее двух раз?
s-andriano вне форума Ответить с цитированием
Старый 21.06.2012, 09:49   #4
Nikproam
Новичок
Джуниор
 
Регистрация: 20.06.2012
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Npwas Посмотреть сообщение
В начале сравниваешь файлы на сходство по ко-ву строк, ели одигаковы по кол-во строк, тогда запускаем мою процедуру.
Код:
PROCEDURE SravnFiles;
 Var
   F,G:TextFile;
   strF,strG:string;
   k,z:integer;
 BEGIN
  AssignFile(f,'имяфайла');
  AssignFile(g,'имяфайла');
  Reset(f);
  Reset(g);
  While not(Eof) Do
   Begin
     Readln(F,strF);
     Readln(G,strG);
     Inc(z);
    IF strF<>strG Then
     Begin
       For k:=0 to 255 Do
        IF strF[k]<>strG[k] Then
         Begin
           Form1.Edit1.Text:='Nomer stroki: '+IntToStr(z)+
           ' Nomer Simwola: '+IntToStr(k);
           CloseFile(f);
           CloseFile(g);
           exit;
         End;
     End;
   End;
  CloseFile(f);
  CloseFile(g);
 END;
___________________________________ _______
<---- Весы выражения благодарности там.
куда вставлять этот кусок, и ещё вопрос как реализовать сравнение между 2умя файлами, если их нельзя открыть одновременно?


// Чтение из файла и расчет количества записей (строк)
K:=0;
while not EOF(f) do
begin
k:=k+1;
readln(f, buf); // Прочитать строку из файла
Memo1.Lines.Add(buf); // Добавить строку в поле Memo1
end;
Label1.Caption:='Количество строк= ' + IntToStr(k);
CloseFile(f); // Закрыть файл end;



это код из моего пример, как его изменить под моё условие?
Nikproam вне форума Ответить с цитированием
Старый 21.06.2012, 19:47   #5
Nikproam
Новичок
Джуниор
 
Регистрация: 20.06.2012
Сообщений: 7
По умолчанию

Никто не знает как сделать?
Nikproam вне форума Ответить с цитированием
Старый 21.06.2012, 19:59   #6
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

Цитата:
А как узнать количество строк?
Иди Вы считаете, что для сравнения файлов нужно прочитать каждый из них не менее двух раз?
По разному можно, я предложил лишь один из варриантов.

Цитата:
куда вставлять этот кусок, и ещё вопрос как реализовать сравнение между 2умя файлами, если их нельзя открыть одновременно?
После проверки кол-во строк одного и другого файло можешь вставить мою процедуру:
Код:
IF кол-во строк одинаковы Then
                SravnFiles;
Точно не помню, но походу всетаки можно открыть два файла одновременно, как и приведено в моей процедуре =) А если нет, то можешь считывать один файл в динамический список, а после открывать другой файл и сравнивать его с информацией в спике.
P.S. Можешь при желании, если задание позволяет (и препод тоже) использовать нетипизированные файлы, они удобнее всего.

_______________________
<---- Весы выражения благодарности там.
<----Весы Там.
Npwas вне форума Ответить с цитированием
Старый 21.06.2012, 20:01   #7
Nikproam
Новичок
Джуниор
 
Регистрация: 20.06.2012
Сообщений: 7
По умолчанию

s-andriano ну наверно открыть 1 записать в мемо 1 потом 2 и записать в мемо1 и вывести результать в лейбл
Nikproam вне форума Ответить с цитированием
Старый 21.06.2012, 20:05   #8
Nikproam
Новичок
Джуниор
 
Регистрация: 20.06.2012
Сообщений: 7
По умолчанию

Npwas, короче я в тупике если есть желание можешь попробывать написать в целом как это будет выглядеть, заранее спасибо
Nikproam вне форума Ответить с цитированием
Старый 21.06.2012, 20:56   #9
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

Это будет работать лишь при условаии, если в файлах одинаковое кол-во строк:

Код:
program FilesSravnivaem;

{$APPTYPE CONSOLE}

uses
  SysUtils;

Var
   k,z:integer;

FUNCTION SravnFiles(Const NameF,NameG:string):boolean;
 Var
   F,G:TextFile;
   strF,strG:string;
 BEGIN
  AssignFile(F,NameF);
  AssignFile(G,NameG);
  Reset(F);
  Reset(G);
  While (not(SeekEof(F))) or (not(SeekEof(G))) Do
   Begin
     Readln(F,strF);
     Readln(G,strG);
     Inc(z);
    IF strF<>strG Then
     Begin
       For k:=0 to 255 Do
        IF strF[k]<>strG[k] Then
         Begin
           CloseFile(F);
           CloseFile(G);
           Result:=false;
           exit;
         End;
     End;
   End;
  CloseFile(F);
  CloseFile(G);
  Result:=true;
 END;

BEGIN
 IF SravnFiles('Текст1.txt','Текcт2.txt') Then
      Writeln('Fajli indentichni')
 Else
      Writeln('Nomer stroki:'+IntToStr(z)+' Nomer elementa: '+IntToStr(k));
 Readln;
END.
__________________________
<---- Весы Благодарности там.
<----Весы Там.

Последний раз редактировалось Npwas; 21.06.2012 в 21:09.
Npwas вне форума Ответить с цитированием
Старый 21.06.2012, 20:58   #10
Npwas
Форумчанин
 
Аватар для Npwas
 
Регистрация: 26.09.2011
Сообщений: 158
По умолчанию

Дальше дело за тобой, и как видишь, мы можем считывать информацию одновременно с 2-ух файлов.

__________________________
<---- Весы Благодарности там.
<----Весы Там.

Последний раз редактировалось Npwas; 21.06.2012 в 21:09.
Npwas вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с текстовыми файлами Саня_ Общие вопросы Delphi 4 30.01.2012 16:19
Работа с текстовыми файлами Silverstone Помощь студентам 3 15.12.2011 19:56
Задача на Паскале работа с текстовыми файлами. StudUL Помощь студентам 3 21.12.2008 23:24
Задача с текстовыми файлами SpeedMaster Паскаль, Turbo Pascal, PascalABC.NET 4 02.04.2007 15:43