А можно ли составить два спика в одной программе? Один список будет составляться по данным файла F1, а другой - файла F2? Нужно ли для этого отдельно описать второй список в TYPE? Или, если так нельзя, то как можно прочитать файл F2, если известно заранее, что он состит из строк, но неизвестно их количество? Нужно ли делать это через запись или есть другие способы?
Bokul
19.12.2006 4:01
Цитата
А можно ли составить два спика в одной программе?
Да хоть 16 тысяч..
Цитата
Нужно ли для этого отдельно описать второй список в TYPE?
Нет. Просто делаешь две переменные типа твоего списка и работаешь с ними по отдельности
Цитата
Или, если так нельзя, то как можно прочитать файл F2
Тебе вообще не обязательно перекачивать твой файл в память, можно обойтись только одной переменной типа string. Все зависит от того, что ты хочешь делать с этой информацией.
Тёмный Эльф
19.12.2006 4:26
Объясните, пожалуйста. Немного не догоняю. Вот я составляю список по данным файла «DAN.inp». Но мне нужно проверить, а если ли в этом файле такие же слова, как и в файле «Dan1.inp», например. Нужно ли мне нижеприведенную процедуру сделать аналогично для второго файла? Или это делается другим способом?
Код
uses crt; Type next=^elem; Elem=RECORD EL:string; Sled:next; END; VAR Uk1:next;
Procedure p1(var p:next); var m:next; F1:text; BEGIN Assign(F1,'DAN.inp'); Reset(f1); Assign(output,'res.out'); rewrite(output); New(m); New(m^.sled); p:=m; Readln(f1, m^.el); m^.sled:=nil; while not EOF(f1) do begin New(m^.sled); m:=m^.sled; Readln(f1, m^.el); m^.sled:=nil; End; Close(f1); m:=p; While m<>NIL do Begin Writeln(m^.el); m:=m^.sled; End; end;
Bokul
19.12.2006 4:41
Глянь на пятый пункт этого раздела...
Цитата
. Но мне нужно проверить, а если ли в этом файле такие же слова, как и в файле «Dan1.inp», например. Нужно ли мне нижеприведенную процедуру сделать аналогично для второго файла? Или это делается другим способом?
Как я вижу твоя процедура считует файл в список, а потом его распечатывает. Если я правильно понял вопрос, ты хочешь чтобы она (процедура) работала с любым другим текстовым файлом? Если да, то тебе надо передавать имя файла как параметр в процедуру.
Тёмный Эльф
19.12.2006 4:57
Цитата
Как я вижу твоя процедура считует файл в список, а потом его распечатывает. Если я правильно понял вопрос, ты хочешь чтобы она (процедура) работала с любым другим текстовым файлом? Если да, то тебе надо передавать имя файла как параметр в процедуру.
Вот что я имел ввидду:
Код
uses crt; Type next=^elem; next2=^elem2; Elem=RECORD EL:string; Sled:next; END; Elem2=RECORD EL2:string; Sled2:next2; VAR Uk1:next; UK2:next2;
Procedure p1(var p:next; var p2:next2); var m:next; m2:next2; F1,F2:text; BEGIN Assign(F1,'DAN.inp'); Assign(F2,'DAN1.inp'); Reset(f1); Reset(f2); New(m); New(m2); New(m^.sled); New(m2^.sled2); p:=m; p2:=m2; Readln(f1, m^.el); Readln(f2, m2^.el2); m^.sled:=nil; while not EOF(f1) do begin New(m^.sled); m:=m^.sled; Readln(f1, m^.el); m^.sled:=nil; End; Close(f1); m2^.sled2:=nil; while not EOF(f2) do begin New(m2^.sled2); m2:=m2^.sled2; Readln(f2, m2^.el2); m2^.sled2:=nil; End; Close(f2); end;
Ведь теперь у меня два списка, один по файлу F1, а другой по файлу F2. Могу ли я теперь пробежать по этим двум спискам и найти ОДИНАКОВЫЕ слова!?? В этом и состоит цель задачи. (извеняюсь, что привел этот пример в Теории, а не в Задачах).
Или же эти два списка никак не взаимосвязаны? тогда придется искать другой способ чтения файла F2 и сравнивания его с F1
Bokul
19.12.2006 5:20
Не правильно, ведь типы next и next2 абсолютно идентичны, для чего же тебе нужно два одинаковых типа? Может две переменных , но точно не типы.
Тоже самое ты делаешь в процедуре - ты делаешь одинаковые действия для разных файлов. Зачем вообще тогда использовать процедуру, выигрыша в краткости кода ведь все-равно нет. Правильно будет, если ты напишешь процедуру, которая умеет заполнять только один список, данными из неизвестного для нее файла. Т.е. ее начало должно быть вроде:
зrocedure p1(s:string; var p:next);
var m:next;
F1:text;
BEGIN
Assign(F1,s);
Reset(f1);
New(m);
New(m^.sled);
p:=m;
Readln(f1, m^.el);
m^.sled:=nil;
--------------------
Ровно в два разы меньше байтодвижений . А потом передавай этой процедуре на растерзание сколько хочешь файлов и списков:
Var list1,list2,list3:next;
begin
p1('C:\first.txt', list1);
p1('C:\second.txt', list2);
p1('C:\third.txt', list3);
end.
Тёмный Эльф
19.12.2006 5:33
Цитата
ты делаешь одинаковые действия для разных файлов.
А ведь на самом деле, ну, я и глупость написал! Спасибо...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.