Pascal/Turbo Pascal - Simbolo fin de cadena en pascal

 
Vista:

Simbolo fin de cadena en pascal

Publicado por Azghal (4 intervenciones) el 13/05/2010 21:14:51
Buenas, actualmente tengo un problema en pascal;

Para un programa a entregar, tengo que hacer un apartado en el que se deben leer datos de un fichero de texto con la siguiente forma:

#<EOLN>
texto_al_leer<EOLN>
texto_al_leer<EOLN>
texto_al_leer<EOLN>
#<EOLN>
texto_al_leer<EOLN>
texto_al_leer<EOLN>
texto_al_leer<EOLN>

etc etc..

El problema es que cuando efectuo un readln( por ejemplo: readln(fichero,datos); siendo datos una variable de tipo string ) obviamente lee incluso la parte de <EOLN>,cosa que no interesa.

Por lo que decidi crear otra variable de tipo string e ir copiando caracter a caracter de la primera cadena a la segunda hasta llevar al primer simbolo '<', e insertando un simbolo de fin de cadena ( #0 ) al final.

el problema es que esta segunda string aparece con longitud 0, y por lo tanto es como si no hubiera copiado nada.

y cuando consigo cambiar el tamaño de la string poniendo esto: variable[0]:='i' luego se salta el simbolo de fin de cadena.

Basta decir que no puedo usar variables con memoria dinamica por lo que tengo que declarar strings de tamaño fijo.

A alguien se le ocurre como arreglar esto o una manera mejor de leer las lineas del fichero sin que se copie la parte del "<EOLN>?
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:Simbolo fin de cadena en pascal

Publicado por edwin (71 intervenciones) el 13/05/2010 22:25:52
a mi juicio tomaria el fichero con tipo char

Solo de tipo char, ya que así puedes leer caracter por caracter hasta encontrar un #10 #13 , que significa salto de linea, si estoy mal que me corrijan.y con eso poder determinar que se termina la linea...

Mientras lees caracter por caracter los vas introducioendo a una variable no mayor a 255 caracteres, con excepcion de los caracteres #10 y #13 o caracteres especiales que no desees.
Luego Inicializas de nuevo la variable y siges con la siguiente linea o siguientes caracteres

Esto lo puedes realizar con un while hasta que sea fin de archivo
bueno esto es solo una idea , podrian sugerirte mas en el foro

,
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:Simbolo fin de cadena en pascal

Publicado por Azghal (4 intervenciones) el 13/05/2010 23:29:21
no si he probado con el siguiente codigo, leyendo de char en char:

while not eof(fichero) do
begin
while not eoln(fichero) do
begin
i:=1;
read(fichero,c);
while (c <> '<') and (c <>'#')do
begin
datos[1]:=c;
i:=succ(i);
read(fichero,c);
end;
readln(fichero);
writeln(datos);
readkey;
end;
end;

siendo las variables:
c : char
datos: string[50]
i: integer
fichero: text

y el problema es que la string datos aunque la declare como tamaño 50, tras pasarle la funcion Lenght; el resultado es 0. Por lo que los char se guardan pero al sacar por pantalla la string no aparece nada.

A ver si alguien me puede ayudar como solucionar esto por fa
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:Simbolo fin de cadena en pascal

Publicado por Diego Romero (996 intervenciones) el 14/05/2010 13:20:47
Prueba lo siguiente:

readln(fichero, linea);
p:=pos('<EOLN>', linea);
if p>0 then
delete(linea,p,6);
writeln(linea);
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:Simbolo fin de cadena en pascal

Publicado por edwin (71 intervenciones) el 14/05/2010 20:08:17
talvez este mal el orden de tus sentencias

prueba:

while (c <> '<') and (c <>'#')do
begin
fichero,c);
datos:=datos+c;
i:=succ(i);
end;

sin manejar la cadena como un arreglo
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:Simbolo fin de cadena en pascal

Publicado por edwin (71 intervenciones) el 14/05/2010 20:09:37
perdon tuve un error al copiar

while (c <> '<') and (c <>'#')do
begin
datos:=datos+c;
i:=succ(i);
read(fichero,c);
end;
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