Arquivos Texto em Pascal dúvida leitor

Mais uma dúvida do leitor.

“Faça um programa em Pascal que processe dois arquivos texto, incluindo o segundo arquivo no primeiro a partir de uma linha escolhida.

  Seu programa deve, inicialmente, pedir ao usuário os nomes dos arquivos, garantindo nomes distintos.

  Em seguida, deve pedir ao usuário qual é a linha do primeiro arquivo depois da qual as linhas do segundo arquivo deverão ser inseridas.

  Seu programa também deve mostrar na tela os conteúdos dos dois arquivos originais.

  Em seguida, deve mostrar o conteúdo do primeiro arquivo modificado pela inclusão.

  Caso algum arquivo não exista, crie-o com conteúdo vazio e, caso a linha de inserção não exista, crie linhas vazias até aquela linha escolhida, incluindo o segundo arquivo a partir dali.”

A solução que darei abaixo é com base no programa que o leitor havia me enviado e o programa não estava funcionando. Isso quer dizer que não seria a minha opção.

 ///////////////////////////////////  
 program arquivo_primeiro_segundo;  
 uses Crt;  
 var  
  primeiro, segundo : string;  
  p,s        : text;  
  i,j,linha     : integer;  
  linhas      : Array [1..30] of String;  
  aux        : String;  
 begin  
  ClrScr;  
  // Tela Principal  
  WriteLn ('Ola.');  
  WriteLn ('Faremos dois arquivos para inserirmos o conteudo do segundo arquivo no');  
  WriteLn ('meio do primeiro.');  
  WriteLn ('Apos digitar o nome dos dois arquivos, popr favor, sigite a linha do');  
  WriteLn ('primeiro arquivo arvivo a partir da qual, o segundo entrar');  
  Write  ('Detalhe: escolha nomes de arquivos nao existentes em seu sistemas');  
  WriteLn;  
  WriteLn ('Escreva um nome para criarmos o primeiro arquivo: ');  
  ReadLn (primeiro);  
  // Cria primeiro arquivo  
  Assign (p, concat(primeiro,'.txt'));  
  {Atrela a variavel 'p' ao nome do primeiro arquivo}  
  ReWrite (p);  
  For i:=1 to 10 do  
  begin  
   str (random(10),aux);  
   WriteLn (p, 'primeiro:'+aux);  
  end;  
  Close (p);  
  Repeat  
   Write ('Escreva um nome para criarmos o segundo arquivo: ');  
   ReadLn (segundo);  
   if segundo=primeiro then  
    WriteLn ('Os nomes dos arquivos nao podem ser iguais!');  
  Until segundo<>primeiro;  
  // Cria segundo arquivo  
  Assign (s, concat(segundo,'.txt'));  
  {Atrela a variavel 's' ao nome do segundo arquivo}  
  ReWrite(s);  
  For i:=1 to 10 do  
  begin  
   str (random(10),aux);  
   Writeln (s, 'segundo:'+aux);  
  end;  
  Close (s);  
  // Linha do comeco da insercao  
  Repeat  
   writeLn ('Digite a linha a partir da qual o segundo arquivo entrara no meio');  
   Write  ('do primeiro:');  
   ReadLn (linha);  
   if linha>10 then  
    WriteLn ('O primeiro arquivo tem no 10 linhas, nao exceda o valor!');  
  Until Linha<=10;  
  // Mostra o primeiro arquivo original  
  WriteLn ('Arquivo Primeiro Original');  
  Assign (p, primeiro+'.txt');  
  Reset (p);  
  while not(eof(p)) do  
  begin  
   ReadLn (p,aux);  
   WriteLn (aux);  
  end;  
  Close (p);  
  // Mostra o segundo arquivo original  
  WriteLn ('Arquivo Segundo Original');  
  Assign (s, segundo+'.txt');  
  Reset (s);  
  while not(eof(s)) do  
  begin  
   ReadLn (s,aux);  
   WriteLn (aux);  
  end;  
  Close (s);  
  // Insere o primeiro arquivo no segundo e mostra  
  // Abre o primeiro arquivo  
  Assign (p,primeiro+'.txt');  
  Reset (p);  
  j := 0;  
  // Copia as linhas anteriores do primeiro arquivo para a memoria  
  for i := 1 to Linha do  
  begin  
    ReadLn (p,aux);  
    j := j + 1;  
    linhas[j] := aux;  
  end;  
  // Abre o segundo arquivo  
  Assign (s,segundo+'.txt');  
  Reset (s);  
  // Copia todas as linha do segundo arquivo para a memoria  
  while not(eof(s)) do  
  begin  
   ReadLn (s,aux);  
   j := j + 1;  
   linhas[j] := aux;  
  end;  
  Close (s);  
  // Copia as demais linhas do primeiro arquivo para a memoria  
  while not(eof(p)) do  
  begin  
    ReadLn (p,aux);  
    j := j + 1;  
    linhas[j] := aux;  
  end;  
  Close (p);  
  // Regrava o primeiro arquivo com os dados da memoria  
  Assign (p,primeiro+'.txt');  
  ReWrite (p);  
  for i := 1 to j do  
   WriteLn (p,linhas[i]);  
  Close (p);  
  // Mostra o novo arquivo primeiro  
  WriteLn ('Arquivo Primeiro Novo');  
  Assign (p, primeiro+'.txt');  
  Reset (p);  
  while not(eof(p)) do  
  begin  
   ReadLn (p,aux);  
   WriteLn (aux);  
  end;  
  Close (p);  
  ReadLn;  
 end.  
 ////////////////////////////  

Código sem formatação:

///////////////////////////////////
program arquivo_primeiro_segundo;
uses Crt;

var
  primeiro, segundo : string;
  p,s               : text;
  i,j,linha         : integer;
  linhas            : Array [1..30] of String;
  aux               : String;

begin
  ClrScr;
  // Tela Principal
  WriteLn ('Ola.');
  WriteLn ('Faremos dois arquivos para inserirmos o conteudo do segundo arquivo no');
  WriteLn ('meio do primeiro.');
  WriteLn ('Apos digitar o nome dos dois arquivos, popr favor, sigite a linha do');
  WriteLn ('primeiro arquivo arvivo a partir da qual, o segundo entrar');
  Write   ('Detalhe: escolha nomes de arquivos nao existentes em seu sistemas');
  WriteLn;
  WriteLn ('Escreva um nome para criarmos o primeiro arquivo: ');
  ReadLn  (primeiro);

  // Cria primeiro arquivo
  Assign  (p, concat(primeiro,'.txt'));
  {Atrela a variavel 'p' ao nome do primeiro arquivo}
  ReWrite (p);
  For i:=1 to 10 do
  begin
    str (random(10),aux);
    WriteLn (p, 'primeiro:'+aux);
  end;
  Close (p);
  Repeat
    Write ('Escreva um nome para criarmos o segundo arquivo: ');
    ReadLn (segundo);
    if segundo=primeiro then
      WriteLn ('Os nomes dos arquivos nao podem ser iguais!');
  Until segundo<>primeiro;

  // Cria segundo arquivo
  Assign (s, concat(segundo,'.txt'));
  {Atrela a variavel 's' ao nome do segundo arquivo}
  ReWrite(s);
  For i:=1 to 10 do
  begin
    str (random(10),aux);
    Writeln (s, 'segundo:'+aux);
  end;
  Close (s);

  // Linha do comeco da insercao
  Repeat
    writeLn ('Digite a linha a partir da qual o segundo arquivo entrara no meio');
    Write   ('do primeiro:');
    ReadLn  (linha);
    if linha>10 then
      WriteLn ('O primeiro arquivo tem no 10 linhas, nao exceda o valor!');
  Until Linha<=10;

  // Mostra o primeiro arquivo original
  WriteLn ('Arquivo Primeiro Original');
  Assign (p, primeiro+'.txt');
  Reset (p);
  while not(eof(p)) do
  begin
    ReadLn (p,aux);
    WriteLn (aux);
  end;
  Close (p);

  // Mostra o segundo arquivo original
  WriteLn ('Arquivo Segundo Original');
  Assign (s, segundo+'.txt');
  Reset (s);
  while not(eof(s)) do
  begin
    ReadLn (s,aux);
    WriteLn (aux);
  end;
  Close (s);


  // Insere o primeiro arquivo no segundo e mostra
  // Abre o primeiro arquivo
  Assign (p,primeiro+'.txt');
  Reset (p);
  j := 0;
  // Copia as linhas anteriores do primeiro arquivo para a memoria
  for i := 1 to Linha do
  begin
     ReadLn (p,aux);
     j := j + 1;
     linhas[j] := aux;
  end;
  // Abre o segundo arquivo
  Assign (s,segundo+'.txt');
  Reset (s);
  // Copia todas as linha do segundo arquivo para a memoria
  while not(eof(s)) do
  begin
    ReadLn (s,aux);
    j := j + 1;
    linhas[j] := aux;
  end;
  Close (s);
  // Copia as demais linhas do primeiro arquivo para a memoria
  while not(eof(p)) do
  begin
     ReadLn (p,aux);
     j := j + 1;
     linhas[j] := aux;
  end;
  Close (p);

  // Regrava o primeiro arquivo com os dados da memoria
  Assign (p,primeiro+'.txt');
  ReWrite (p);
  for i := 1 to j do
    WriteLn (p,linhas[i]);
  Close (p);

  // Mostra o novo arquivo primeiro
  WriteLn ('Arquivo Primeiro Novo');
  Assign (p, primeiro+'.txt');
  Reset (p);
  while not(eof(p)) do
  begin
    ReadLn (p,aux);
    WriteLn (aux);
  end;
  Close (p);
  ReadLn;
end.

////////////////////////////

Nenhum comentário:

Postar um comentário