Editor de Texto
Este editor 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.