Помощь - Поиск - Пользователи - Календарь
Полная версия: Объединение двух текстовых файлов
Форум «Всё о Паскале» > 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.


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