Помощь - Поиск - Пользователи - Календарь
Полная версия: Объединение двух текстовых файлов
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
NeOOffLinE
помогите пожалуйста...
даны два текстовых файла с произвольным, количеством строк в каждом. Нужно: объединить их в один, причем, где первая строка - это первая строка 1-го файла, вторая - последняя строка 2-го и так дале (3 - 2 строка 1-го, 4 - предпоследняя 2-го).....я просто не представляю алгоритм для высчитывая строк, в текстовом файле..заранее спасибо за возможную помощь..
volvo
Объяснить, как это работает, сможешь? smile.gif

function get_s(var f: text): string;
var s: string;
begin
readln(f, s);
get_s := s;
end;

procedure merge_files(var f1, f2: text);


procedure print(s2: string);

procedure sub;
begin

if not eof(f1) then begin
writeln(get_s(f1));
end;
if s2 <> #26 then writeln(s2);

end;

begin
if eof(f2) then begin

sub; exit;

end
else begin
print(get_s(f2));
end;

sub;
end;

begin
print(#26);
while not eof(f1) do
writeln(get_s(f1));
end;

var
f1, f2: text;
s: string;

begin
assign(f1, 'f01.txt'); reset(f1);
assign(f2, 'f02.txt'); reset(f2);

merge_files(f1, f2);

close(f2);
close(f1);
end.

NeOOffLinE
Цитата(volvo @ 18.03.2008 15:27) *

procedure sub;
begin

if not eof(f1) then begin
writeln(get_s(f1));
end;
if s2 <> #26 then writeln(s2);

end;


всё понятно кроме этого

Добавлено через 18 мин.
сделано было так но сказали без массива

program sli;
uses crt;
var
f1,f2,sli: text;
c:string;
k1,k2,min,s,i,d: integer;
b,c:array[1..100];
begin
clrscr;
assign(f1,'fist.txt');
assign(f2,'second.txt');
assign(sli,'sli.txt');
rewrite(sli);
{$I-}
reset(f1);
{$I+}
if ioresult<>0 then
begin
writeln('file 1 not found');
readkey;
exit;
end;
{$I-}
reset(f2);
{$I+}
if ioresult<>0 then
begin
writeln('file 2 not found');
readkey;
exit;
end;
k1:=0;
k2:=0;
d:=0;
while not eof(f1) do
begin
readln(f1);
k1:=k1+1;
end;
while not eof(f2) do
begin
readln(f2);
k2:=k2+1;
end;
close(f1);
close(f2);
reset(f1);
reset(f2);
if k1<k2 then min:=k1 else min:=k2;
d:=2*min+abs(k2-k1);
if k2>min then
begin
for i:=1 to k2-min do
begin
readln(f2,a);
gotoxy(1,min+k2+1-i);
b[min+k2+1-i]:=a;
write(a);
end;
end;
for i:=1 to min do
begin
gotoxy(1,2*i-1);
readln(f1,a);
b[2*i-1]:=a;
write(a);
end;
for i:=min downto 1 do
begin
gotoxy(1,2*i);
readln(f2,a);
b(2*i):=a;
write(a);
end;
gotoxy(1,2*min+1);
while not eof(f1) do
begin
readln(f1,a);
writeln(sli,a);
writeln(a);
end;
for i:=1 to d do writeln(sli,c[d]);
close(f1);
close(f2);
close(sli);
readkey;
end.


Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.