Jump to content

Blog dos Moderadores

  • entries
    36
  • comments
    0
  • views
    57,736

Contributors to this blog

  • jpaulino 17
  • Rui Carlos 7
  • thoga31 7
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

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


thoga31

1,678 views

 Share

Um editor de texto simples e eficiente em Pascal. Descobre como se aplica na prática o tipo de dados Text.

Em 04/12/2011 às 00:24, thoga31 disse:

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.

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

 Share

0 Comments


Recommended Comments

There are no comments to display.

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.