Pascal/Turbo Pascal - Problema pascal fechas, urgente por favor!

 
Vista:

Problema pascal fechas, urgente por favor!

Publicado por Mono con pistolas (2 intervenciones) el 29/08/2009 20:51:31
Llevo un buen rato comiéndome la cabeza con un problema, y no se como hacerlo. Hay una variable declarada de tipo TFecha, y un fichero de texto del que importar los datos:

TYPE
TFecha = RECORD
d : 1..31;
m : 1..12;
a : 2000..2100;
VAR
Fecha : TFecha;
Fich : text;

El tema es que en el fichero de texto desde el que se importan los datos a la variable, las fechas vienen tal que así:
16/02/2009
01/04/2027
...

Bueno, pues no se como hacer para que lea los números justos hasta la /, e ir añadiéndolos. Lo que hice fue esto:
...
read(f, Fecha.d);
read(f,car);
read(f, Fecha.m);
read(f, car);
readln(f, Fecha.a);

Que no funciona. En el primer read intenta añadir todo el conjunto (19/02/2009) a Fecha.d, y me da error. No se como solucionarlo xD

Saludos, gracias de antemano!
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:Problema pascal fechas, urgente por favor!

Publicado por Mono con pistolas (2 intervenciones) el 29/08/2009 20:58:30
Una aclaración, en la declaracion de variables es f : text, no Fich : text, me equivoque al ponerlo. Pero vamos, que no funciona, a ver si me podeis echar una mano, que lo necesito para una practica! xD
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:Problema pascal fechas, urgente por favor!

Publicado por Diego Romero (996 intervenciones) el 29/08/2009 23:20:46
Simple. Porque los campos "d", "m" y "a" no son de tipo string. Un archivo tipo text contiene texto, es decir cadena de caracteres. Cuando haces esto:

readln(f, Fecha.a);

Estás tratando de meter una línea de texto (string) en un tipo enumerado byte. Así no es como se hace.

TYPE
TFecha = RECORD
d : 1..31;
m : 1..12;
a : 2000..2100;
VAR
Fecha : TFecha;
f : text;
S: string;
begin
...
while not eof(Fich) do
begin
ReadLn(f,S);
...
end;

end.

En "S" tendrás la cadena por ejemplo "16/02/2009". Esa cadena tienes que parsearla para separar el día, el mes y el año, hacer la conversión de tipos (usando el procedimiento val() por ejemplo) y asignar los valores correspondientes.
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
sin imagen de perfil

RE:Problema pascal fechas, urgente por favor!

Publicado por Willy (177 intervenciones) el 30/08/2009 08:42:51
Hola Mono con pistolas.
Te proporciono unos datos en cuanto a la manipulación de cadenas. Talvez te sirvan para completar tu programa.

* La función Lengt() devuelve el un valor numérico que indica la cantidad de caracteres de una cadena.
*La función copy regresa una subcadena de una cadena especificada. Ejemplo:
Si la cadena tiene el valor de 'esfuerzo', copy(cadena,5,2) regresará el valor 'er'.
*El procedimiento delete se utiliza para borrar una parte de una cadena. Ejemplo:
Si la cadena tiene el valor de 'esfuerzo', delete(cadena,1,2) regresará el valor 'fuerzo'.

A continuación hice un programa en donde la cadena es: '29/08/2009'. Separa las subcadenas: '29', '08' y '2009' y las asigna respectivamente a las variables: d, m y a que son de tipo string.

uses crt;
var d, m, a, S: string;
I : integer;
begin
S := '29/08/2009';
Writeln(S);
For I := 1 to Length(S) do
if S[I] = '/' then
begin
d := copy(S,1,I-1);{asignando a "d" los caracteres anteriores a '/'}
delete(S,1,I); {borrando de "S" la parte ya procesada}
I := Length(S);{obligando a finalizar el ciclo}
end;

For I := 1 to Length(S) do
if S[I] = '/' then
begin
m := copy(S,1,I-1);{I-1 para que no copie el caracter '/'}
delete(S,1,I);
I := Length(S);
end;

a := S;

writeln('d = ',d);
writeln('m = ',m);
writeln('a = ',a);

readKey;
end.

No olvides que el contenido de las variables d, m, a son cadenas de caracteres, por lo que tendrás que convertirlas a valores numéricos usando la función val() como te dijo Diego Romero.

Ejemplo:
val(S, Num);

Espero te sirva!
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