• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Blog dos Moderadores

  • artigos
    43
  • comentários
    0
  • visualizações
    49475

Autores deste blog

  • jpaulino 19
  • thoga31 9
  • Rui Carlos 7
  • David Pintassilgo 3
  • brunoais 2
  • bioshock 1
  • Warrior 1
  • M6 1

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

thoga31

511 visualizações

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

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:

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


1


0 Comentários


Não há comentários para mostra.

Convidado
Está a comentar como guest. Se tem uma conta, por favor inicie sessão.
Adicionar um comentário...

×   Colou conteúdo com formatação.   Restaurar formatação

×   Your link has been automatically embedded.   Mostrar como ligação