Сравнение текстовых файлов, задача |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Сравнение текстовых файлов, задача |
Moony |
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
такая вот задачка, помогите пожалуйста с решением
Даны два текстовых файла. Определить, совпадают ли компоненты первого файла с компонентами второго файла, ели нет, то получить номер строки и позицию символа в этой строке, начиная с которого файлы отличаются между собой. В случае, когда один из файлов повторяет начало другого (более длинного) файла, ответом должно быть соответствующее сообщение с указанием имени длинного файла и номера первой строки, которая не входит в короткий файл. Сообщение отредактировано: Moony - |
GoodWind |
Сообщение
#2
|
Автооответчик Группа: Пользователи Сообщений: 1 188 Пол: Мужской Реальное имя: Александр Репутация: 16 |
Moony, что-нибудь уже сделано ?
-------------------- Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
|
ShadowWatcher |
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
А что такое компонент текстового файла?
|
xds |
Сообщение
#4
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Строка ;)
-------------------- The idiots are winning.
|
ShadowWatcher |
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Тогда брутфорса должно вполне хватить...
|
Moony |
Сообщение
#6
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
Если не трудно напишите алгоритм решения к задачи ну или код. :p2:
Больше всего непонятно как определить номер строки в файле? |
xds |
Сообщение
#7
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Цитата Больше всего непонятно как определить номер строки в файле? Последовательно читать строки и увеличивать счетчик. -------------------- The idiots are winning.
|
Altair |
Сообщение
#8
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата А что такое компонент текстового файла? Цитата Строка на уровне стандартных Паскалевских средств да, но вобще-то числа (каждое число интерплитируется как код ASCII). Цитата Больше всего непонятно как определить номер строки в файле? xds точно сказал - читаешь файл построчно, (цикл) так, что при каждой итерации, увеличивать счетчик... строку читай процедурой readln а не read -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
volvo |
Сообщение
#9
|
Гость |
Oleg_Z
Цитата строку читай процедурой writeln а не write Вообще-то, строка читается ReadLn :p2: точно Сообщение отредактировано: Oleg_Z - |
Altair |
Сообщение
#10
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
:p2:
-------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Moony |
Сообщение
#11
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
ReadLn прочитает 1-ую строку из файла, а как перейти к следующей т.е. ко 2-ой?
|
volvo |
Сообщение
#12
|
Гость |
Moony
ReadLn будет читать строки, пока есть что читать: Код while not EOF(f) do ReadLn(f, s) |
ShadowWatcher |
Сообщение
#13
|
Новичок Группа: Пользователи Сообщений: 29 Пол: Мужской Репутация: -1 |
Цитата на уровне стандартных Паскалевских средств да, но вобще-то числа (каждое число интерплитируется как код ASCII). Ну, выпендрился Код 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. Вроде так... |
Altair |
Сообщение
#14
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Цитата Ну, выпендрился старался из всех сил для тебя выпендрится ;) -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
xds |
Сообщение
#15
|
N337 Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация: 26 |
Oleg_Z, числа - компонент любого файла. Текстовый файл - файл, поделённый некоторым образом на последовательности символов (чисел) - строки.
Цитата каждое число интерплитируется как код ASCII Текстовый файл может быть в MBCS - в этом случае далеко не каждое число интерпретируется как код ASCII (таких чисел вообще может не быть) ;) Сообщение отредактировано: xds - -------------------- The idiots are winning.
|
Moony |
Сообщение
#16
|
Новичок Группа: Пользователи Сообщений: 12 Пол: Мужской Репутация: 0 |
А как можно решить задачу без использования Break'а ?
|
volvo |
Сообщение
#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. |
Текстовая версия | 23.12.2024 19:59 |