Jump to content
thoga31

Editor de Texto simples - utilização do tipo de dados Text

Recommended Posts

thoga31

Este editor de texto permite criar, consultar e editar ficheiros. A edição não permite criar linhas, só alterar linhas específicas.

O programa está devidamente comentado.

program editor_texto;
uses crt,dos;
var fich:text; // Ficheiro a criar, consultar ou editar
    aux:text; // ficheiro auxiliar para edição
    nome:string; // nome do ficheiro a criar
    nome_aux:string;  // nome do ficheiro auxiliar para edição
    line:string; // string que vai guardando cada linha do documento
    opt:char; // para menus
    opt2:char; // para edições
    i,j:integer; // contadores de linhas e outros


function existeficheiro: boolean;  // verifica se existe um ficheiro
begin
assign (fich, nome);
{$I-};
Reset (fich);
Close (fich);
{$I+};
existeficheiro:=(IoResult=0);
end;

procedure criar;  // criação de ficheiros
begin
     clrscr;
     writeln('A CRIAR UM FICHEIRO DE EXTENSAO TXT');
     writeln;
     writeln('INTRODUZA:');
     write('Nome do ficheiro: '); readln(nome);
     nome:=nome+'.txt';  // nome.*txt
     if NOT existeficheiro then begin  // se NÃO existir o ficheiro, então este é criado
     rewrite(fich);
     writeln;
     writeln('Conteudos:  (nota: ao escrever "<EXIT>" termina a escrita do ficheiro. Para paragrafo, basta fazer ENTER.)');
     i:=0;
     repeat
           i:=i+1;
           write('Linha ',i,': '); readln(line);
           if line='' then writeln('   [Foi feito paragrafo]');  // detector de parágrafos
           if upcase(line)<>'<EXIT>' then writeln(fich,line);
     until upcase(line)='<EXIT>'; // ir escrevendo as linhas do ficheiro, até dar ordem de saída
     if i=1 then writeln('NOTA: O ficheiro ficou vazio. Sera considerao que nao existe!');  // Se i=1, só foi feito <EXIT>, logo o ficheiro está vazio
     close(fich);
     end
     else writeln('[O ficheiro "',nome,'" ja existe!]');  // no caso de haver o ficheiro nomeado, é dado o alerta
     write('Prima qualquer tecla...'); readkey;
end;

procedure consultar;  // ver o conteudo de um ficheiro já existente
begin
     clrscr;
     writeln('A CONSULTAR UM FICHEIRO DE EXTENSAO TXT');
     writeln;
     write('Nome do ficheiro a consultar: ');
     readln(nome);
     nome:=nome+'.txt';

     if existeficheiro then begin  // Se o ficheiro EXISTE, então é lido
        reset(fich);
        i:=0;
        while NOT eof(fich) do begin  // até ao fim do ficheiro, ir mostrando conteúdo linha a linha
              i:=i+1;
              readln(fich,line);
              writeln('Linha ',i,': ',line);
        end;
        writeln('[Fim de ficheiro]');
        close(fich);
     end
     else writeln('[Nao existe o ficheiro "',nome,'"]');  // Se o ficheiro NÃO existe, é dado o alerta e a operação é cancelada
     write('Prima qualquer tecla...'); readkey;
end;

procedure editar;  // lê e edita um ficheiro
begin
     clrscr;
     writeln('A EDITAR UM FICHEIRO DE EXTENSAO TXT');
     writeln;
     write('Nome do ficheiro a editar: '); readln(nome);
     nome:=nome+'.txt';

     repeat
     opt2:='N';
     if existeficheiro then begin  // se o ficheiro nomeado EXISTE, então este é lido e, se assim ordenado, é editado linha a linha
        reset(fich);
        nome_aux:=nome+'_aux.txt';  // nome.txt_aux.*txt
        assign(aux,nome_aux);
        rewrite(aux);

        i:=0;
        while NOT eof(fich) do begin  // mostrar o conteúdo do ficheiro original e copiá-lo para o auxiliar
              i:=i+1;
              readln(fich,line);
              writeln('Linha ',i,': ',line);
              writeln(aux,line);
        end;
        writeln('[Fim de ficheiro]');
        close(fich);
        close(aux);
        opt2:=#13;

        {}
              write('Pretende editar uma linha? (S/N) '); readln(opt2);  // Verifica se há alterações a fazer ao ficheiro
              if upcase(char(opt2))='S' then begin   // Se Sim (S), então editar
                 write('Linha a reescrever: '); readln(j);  // Qual a linha a reescrever?
                 j:=ABS(j);  // mini-sistema de segurança (não admite nºs reais, só inteiros relativos)
                 assign(aux,nome_aux);
                 assign(fich,nome);
                 reset(aux);  // o auxiliar está pronto a ser lido
                 rewrite(fich);  // o ficheiro original é apagado
                 i:=0;
                 while NOT eof(aux) do begin
                       i:=i+1;
                       readln(aux,line);  // ler linha a linha o auxiliar
                       if (i=j) then begin   // quando i=j (linha actual em análise = linha a editar) é pedido o novo conteúdo da linha
                          writeln('A editar a linha ',j,'...');
                          writeln('Antigo conteudo: ',line);  // antigo conteúdo
                          write('Escreva novo conteudo: '); readln(line);  // novo conteúdo
                       end;
                       writeln(fich,line);  // copiar a linha do auxiliar para o original: se i=j, copiar novo conteúdo
                 end;
                 writeln('LINHA EDITADA');  // fim de edição do ficheiro
                 close(aux); close(fich);
              end;
        {}

     end
     else writeln('[Nao existe o ficheiro "',nome,'"]');  // se NÃO existe o ficheiro nomeado, é dado o alerta e a operação é calcelada

     until upcase(char(opt2))='N';  // no caso de não haver mais edições, ou não existir ficheiro, finalizar edição

     write('Prima qualquer tecla...'); readkey;
end;


begin

     repeat  // MENU PRINCIPAL

     clrscr;
     writeln('EDITOR DE TEXTO [by: Igor Nunes] [version 0.00 beta PT]');
     writeln('MENU PRINCIPAL:');
     writeln;
     writeln('1 > Criar ficheiro');
     writeln('2 > Consultar ficheiro');
     writeln('3 > Editar ficheiro');
     writeln('0 > SAIR');
     writeln;
     writeln('Caso um ficheiro nao tenha conteudos, considera-se hipoteticamente que nao existe.');
     repeat
           write('Opcao: '); readln(opt);
           case char(opt) of
                '1':criar;
                '2':consultar;
                '3':editar;
                '0':exit;
           end;
     until char(opt) in ['0'..'3'];

     until char(opt)='0';
end.

Optimizado para Free Pascal.

Disponível na Wiki

Cumprimentos. :cheesygrin:


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

Muito bem...

:cheesygrin: Venham mais!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Muito bem...

:) Venham mais!

hehehe, obrigado, deixa-me pesquisar mais nas minhas pastas esquecidas pelo tempo :cheesygrin:


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.