Pascal/Turbo Pascal - crear un archivo de texto

 
Vista:

crear un archivo de texto

Publicado por Ricardo (2 intervenciones) el 12/02/2010 14:17:21
ola , me han mandado hacer un programa q diga el numero de consonantes ,vocales , digitos decimales , frases y signos de puntuacion de un texto . lo q primero pense es usar una cadena string pero eso limita el tamñao del texto asi q supongo q me kitaran puntos x eso . despues viendo un codigo fuente de sta web trate de hacer algo parecido y me salio esto

Program texto;
Uses crt;
Const Enter=#13; {el 13 es el numero que le corresponde en codigo ascci al Enter}
Esc=#27; {el 27 es el numero que le corresponde en codigo ascci al Esc}
Var
f:text;
nombre,a:string;
tecla:char;
Begin
Clrscr;
assign(f,'texto.txt');
Rewrite(f);
writeln('introdusca su texto aqui:');
a:='';
Repeat
Tecla:=readkey;
Write(tecla);
a:=a+tecla;
Case tecla of
Enter:Begin
Write(f,a);
a:=''#10'';
Writeln;
End;
End;
Until tecla=Esc;
Close(f);
Reset(f);
While not eof(f) do
Begin
Readln(f,a);
Writeln(a);
End;
Close(f);
End.

pero me gustaria saber si hay una forma mas simple , sin necesidad de usar la unidad crt . este es el codigo q hice al principio , pero tiene un error y el bucle nunca finaliza , nose como finalizarlo .

program texto;

const enter=#13;
esc=#27;

var f:text;
a:string;
b:string;
i:integer;
begin

assign(f,'texto.txt');
rewrite(f);
writeln('introdusca su texto aqui:');
for i:=0 to length(a) do
repeat
readln(a);
if a=#13 then
write(f,a);
a:=''#10'';
until a[i]=esc;

close(f);
reset(f);
while not eof(f) do read(f,b);
close(f);
writeln('su texto es :',b);
readln;

end.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:crear un archivo de texto

Publicado por Diego Romero (996 intervenciones) el 13/02/2010 00:48:16
Me parece que tus soluciones no guardan relación con el problema. Lo que dices al principio es que ya tienes un texto en un archivo y no que todo el proceso se haga mientras se escribe el texto en cuestión, de esta última forma el archivo de texto es irrelevante, lo cual no parece ser el objetivo del problema.

Aclárame esto y luego podemos proseguir hasta encontrar la mejor solución.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear un archivo de texto

Publicado por Ricardo (2 intervenciones) el 13/02/2010 03:49:08
bueno el problema dice q , se introduce un texto por teclado , y el programa tiene q calcular el numero de todas esas cosas q puse de el texto q se a escrito , no menciona q halla un archivo de texto ya creado .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear un archivo de texto

Publicado por Diego Romero (996 intervenciones) el 13/02/2010 08:16:57
Pues amigo mío, has titulado este tema con un "crear un archivo de texto" ¿qué pito toca el archivo de texto en todo esto?.

Aunque tampoco se menciona en ninguna parte qué compilador debes usar, así que lo puedes hacer tranquilamente en Free Pascal usando WideString ya tienes 32 mil caracteres en un solo string, y si eso no basta, siempre puedes recurrir a PChar y tendrás lo que la memoria de tu computadora sea capaz de almacenar al mismo tiempo.

Si la cosa es tal como se infiere de leer los códigos fuentes que has puesto, me parece que la mejor solución es algo así, por ejemplo para contar las vocales:

uses crt;

type

TVocales=(a,e,i,o,u);
TSetCaracteres=set of char;
TArrVocales=array[a..u] of integer;

const
CVocales: TSetCaracteres=['A','E','I','O','U'];

var
ArrVocales: TArrVocales;
Linea: string;

function Vocal2Char(Vocal: TVocales): char;
var
Result: char;
begin
case Vocal of
a: Result:='a';
e: Result:='e';
i: Result:='i';
o: Result:='o';
u: Result:='u';
end; { case }
Vocal2Char:=Result;
end;

procedure Add1ContVocales(Vocal: char);
begin
case Vocal of
'a': inc(ArrVocales[a]);
'e': inc(ArrVocales[e]);
'i': inc(ArrVocales[i]);
'o': inc(ArrVocales[o]);
'u': inc(ArrVocales[u]);
end; { case }
end;

procedure ProcesarLinea(Str: string);
var
idx: integer;
begin
for idx:=1 to length(Str) do
begin
if upcase(Str[idx]) in CVocales then
Add1ContVocales(Str[idx]);
end;
end;

procedure MostrarContVocales;
var
idx: TVocales;
begin
for idx:=a to u do
WriteLn(Vocal2Char(idx),': ',ArrVocales[idx]);
end;

begin
repeat
Linea:='';
WriteLn('Escriba una l¡nea de texto: ');
ReadLn(Linea);
ProcesarLinea(Linea);
until Linea = '';
MostrarContVocales;
ReadLn;
end.

Para las demás cosas que debes contar basta con ampliar TVocales o tal vez definir diferentes tipos enumerados con cada caso (consonantes y signos de puntuación).

En tu mensaje original mencionas algo como "frases", pero creo que has querido decir "oraciones" (ya que "frase" es una construcción lingüística muchísimo más complicada de detectar por medio de una computadora), si ese es el caso, las oraciones están separadas por punto o punto y aparte por detrás y comienzo de párrafo por delante (con lo que al contar el caracter punto "." ya estás contando las oraciones).

Tampoco dices cómo hay que tratar las vocales acentuadas, si son vocales a parte de las no acentuadas o se consideran la misma cosa. Si es lo último a mi código habría que modificarlo apropiadamente. Aquí hay información al respecto:
http://www.driverop.com.ar/strings.php#8-7
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:crear un archivo de texto

Publicado por Eduardo Garcia Corado (1 intervención) el 02/05/2010 00:40:20
quiero saber como separar una linea de numeros por medio de comas osea q yo tengo una linea de numeros ingresados pero yo quiero separarlos por una coma
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar