IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Сравнение текстовых файлов, задача
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


такая вот задачка, помогите пожалуйста с решением

Даны два текстовых файла. Определить, совпадают ли компоненты первого файла с компонентами второго файла, ели нет, то получить номер строки и позицию символа в этой строке, начиная с которого файлы отличаются между собой. В случае, когда один из файлов повторяет начало другого (более длинного) файла, ответом должно быть соответствующее сообщение с указанием имени длинного файла и номера первой строки, которая не входит в короткий файл.

Сообщение отредактировано: Moony -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Автооответчик
*****

Группа: Пользователи
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

Репутация: -  16  +


Moony, что-нибудь уже сделано ?


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


А что такое компонент текстового файла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Строка ;)


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Тогда брутфорса должно вполне хватить...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


Если не трудно напишите алгоритм решения к задачи ну или код. :p2:

Больше всего непонятно как определить номер строки в файле?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Цитата
Больше всего непонятно как определить номер строки в файле?

Последовательно читать строки и увеличивать счетчик.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
А что такое компонент текстового файла?

Цитата
Строка 

smile.gif
на уровне стандартных Паскалевских средств да, но вобще-то числа smile.gif (каждое число интерплитируется как код ASCII). smile.gif

Цитата
Больше всего непонятно как определить номер строки в файле?

xds точно сказал - читаешь файл построчно, (цикл) так, что при каждой итерации, увеличивать счетчик...
строку читай процедурой readln а не read


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Oleg_Z
Цитата
строку читай процедурой writeln а не write

Вообще-то, строка читается ReadLn :p2:
точно smile.gif

Сообщение отредактировано: Oleg_Z -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


:p2: rolleyes.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


ReadLn прочитает 1-ую строку из файла, а как перейти к следующей т.е. ко 2-ой?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Гость






Moony
ReadLn будет читать строки, пока есть что читать:
Код

while not EOF(f) do
 ReadLn(f, s)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 29
Пол: Мужской

Репутация: -  -1  +


Цитата
на уровне стандартных Паскалевских средств да, но вобще-то числа  (каждое число интерплитируется как код ASCII).

Ну, выпендрился smile.gif

Код

Var
 f1,f2:Text;
 s1,s2:String;
 i,n:Integer;
 bNotified:Boolean;
Begin
 Assign(f1,'c:\f1.Txt');Reset(f1);
 Assign(f2,'c:\f2.Txt');Reset(f2);
 bNotified := False;
 n := 1;
 While Not (Eof(f1)) Do
 Begin
   If (Eof(f2)) Then
     Break;
   ReadLn(f1,s1);
   ReadLn(f2,s2);
   If (s1<>s2) Then
   Begin
     For i:=1 To Length(s1) Do
       If (i > Length(s2)) Or (s1[i]<>s2[i]) Then
         Break;
     WriteLn('String #',n,' Character#',i);
     bNotified := True;
     Break
   End;
   Inc(n)
 End;
 If Not bNotified Then
   If Eof(f1) And Not Eof(f2) Then
     WriteLn('f2 is longer than f1. f1 consists only ',n,' strings')
   Else
     If Eof(f2) And Not Eof(f1) Then
       WriteLn('f1 is longer than f2. f2 consists only ', n ,' strings')
     Else
       WriteLn('Files Are Equal');
 Close(f1);
 Close(f2);
 ReadLn
End.


Вроде так...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
Ну, выпендрился

старался из всех сил для тебя выпендрится smile.gif;)


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Oleg_Z, числа - компонент любого файла. Текстовый файл - файл, поделённый некоторым образом на последовательности символов (чисел) - строки.

Цитата
каждое число интерплитируется как код ASCII

Текстовый файл может быть в MBCS - в этом случае далеко не каждое число интерпретируется как код ASCII (таких чисел вообще может не быть) ;)

Сообщение отредактировано: xds -


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Новичок
*

Группа: Пользователи
Сообщений: 12
Пол: Мужской

Репутация: -  0  +


А как можно решить задачу без использования Break'а ?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Гость






Moony
А оно тебе надо? Если надо, то учти, что добавляются еще 2 переменные:
Код
Var
 f1,f2:Text;
 s1,s2:String;
 i,n:Integer;
 bNotified:Boolean;
 ToContinue, nonStop: Boolean;
Begin
 Assign(f1,'f1.Txt');Reset(f1);
 Assign(f2,'f2.Txt');Reset(f2);
 bNotified := False;
 n := 1; ToContinue := True;
 While ToContinue and (not Eof(f1)) Do
   Begin
     If Eof(f2) Then ToContinue := False
     Else
       Begin
         ReadLn(f1,s1);
         ReadLn(f2,s2);
         If s1<>s2 Then
           Begin
             i := 1; nonStop := True;
             While nonStop and (i <= Length(s1)) Do
               Begin
                 If (i > Length(s2)) Or (s1[i]<>s2[i])
                   Then nonStop := False;
                 Inc(i, Byte(nonStop))
               End;
             WriteLn('String #',n,' Character#',i);
             bNotified := True;
             ToContinue := False
           End;
         Inc(n, Byte(ToContinue))
       End;
   End;
 If Not bNotified Then
   If Eof(f1) And Not Eof(f2) Then
     WriteLn('f2 is longer than f1. f1 consists only ',n,' strings')
   Else
     If Eof(f2) And Not Eof(f1) Then
       WriteLn('f1 is longer than f2. f2 consists only ', n ,' strings')
     Else
       WriteLn('Files Are Equal');
 Close(f1);
 Close(f2);
 ReadLn
End.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 7:49
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name