Pascal/Turbo Pascal - Ayuda PLZ...

 
Vista:

Ayuda PLZ...

Publicado por Manuel Soto (2 intervenciones) el 01/11/2005 04:05:31
He Hecho este programa para practicar un poco con el tipo registro y con archivos, pero hay un error y no logro encontrarlo; el programa lo puedo compilar y no me da error lo ejecuto en el editor de pascal y tampoco me da ningun mensaje de error, pero hay una seccion en el codigo en la que en teoria el programa deberia pararse y esperar a que el ususario ingrese los datos que se piden, pero pero no lo hace, de hecho, se pide los 2 ultimos y mas nada, el primer dato lo pasa de largo...

Esto me tiene frustrado... AYUDENME POR FAVOR....

Gracias de antemano....

Program Practica_de_Archivo;

Uses
Crt;

Const
CMax = 100000000;

Type
TCedula = 0..CMax;
TDatos = record
Nombre : string[30];
Apellido: string[30];
Cedula : TCedula;
end;
TArchivo = FILE of TDatos;
TOpcion = 1..3;

Var
VarDatos : TDatos;
VarArchivo : TArchivo;
VarOpcion : TOpcion;

Function MenuOpcion : TOpcion;
Var
op : TOpcion;

begin
HighVideo;
WriteLn('ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»');
WriteLn('º******PRUEBA DE ARCHIVO******º');
WriteLn('ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹');
WriteLn('º Elija una opcion: º');
WriteLn('º º');
WriteLn('º 1.- Nuevo. º');
WriteLn('º 2.- Abrir. º');
WriteLn('º 3.- Salir. º');
WriteLn('ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹');
WriteLn('º Su opcion: º');
WriteLn('ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ');
NormVideo;
Read(op);
MenuOpcion := op;
end;

Procedure NuevoArchivo;
Var
NomArchivo : string[30];

function NombreArchivo : string;
Const
CNombre : string[30] = 'Lista.DAT';

begin { NombreArc }
Write('Nombre del Archivo: ');
Read(CNombre); WriteLn;
NombreArchivo := CNombre;
end; { NombreArc}

begin { NuevoArchivo }
ClrScr;
with VarDatos do
begin
Write('Nombre : ');
ReadLn(Nombre); WriteLn;
Write('Apellido: ');
ReadLn(Apellido); WriteLn;
Write('Cedula : ');
ReadLn(Cedula); WriteLn;
end;
WriteLn;
NomArchivo := NombreArchivo;
ASSIGN(VarArchivo, NomArchivo);
REWRITE(VarArchivo);
WRITE(VarArchivo, VarDatos);
CLOSE(VarArchivo);
Write('Archivo Escrito.');
Delay(2000);
end; { NuevoArchivo }

Procedure AbreArchivo;
Var
NomArchivo : string[30];

begin { AbreArchivo }
ClrScr;
Write('Nombre de Archivo: '); ReadLn(NomArchivo);
ASSIGN(VarArchivo, NomArchivo);
RESET(VarArchivo);
READ(VarArchivo, VarDatos);
with VarDatos do
begin
WriteLn('Nombre : ', Nombre);
WriteLn('Apellido: ', Apellido);
WriteLn('Cedula : ', Cedula);
end;
CLOSE(VarArchivo);
ReadLn;
end; { AbreArchivo }

BEGIN { Practica_de_Archivo }
repeat
ClrScr;
VarOpcion := MenuOpcion;
case VarOpcion of
1 : NuevoArchivo;
2 : AbreArchivo;
3 : begin
ClrScr;
GotoXY(35,20);
WriteLn('Hasta Luego.');
Delay(1000);
end;
else
begin
WriteLn('Opcion no valida, intentalo de nuevo.');
Delay(1000);
end; { Else }
end; { Case Of }
until (VarOpcion = 3);
END. { Practica_de_Archivo }
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:Ayuda PLZ...

Publicado por Manuel (2 intervenciones) el 01/11/2005 22:17:38
Bueno ya resolvi el problema con la funcion para ingresar el nombre de archivo, pero ahora tengo problemas con el procedumiento AbreArchivo, que me lansa un error 100: de error leyendo en disco o que no encuentra el archivo.

Si quieren ver el condigo corregido y mas facil de leer porque aki sale terrible el codigo, con gusto se los enviare por email.
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:Ayuda PLZ...

Publicado por M@rceloL (152 intervenciones) el 03/11/2005 01:59:06
Bueno. Puede que el archivo realmente no se encuetre. Esto se puede deber a que si vos ingresás, digamos, "pepito.bin", el programa va a tratar de abrir el archivo "<DirectorioActual>\pepito.bin". Y puede ocurrir que el directorio actual no sea el que uno piesa.

Podés probar esto:

....
{$I-}

ASSIGN(VarArchivo, NomArchivo);
RESET(VarArchivo);

{$I+}

if IOResult<>0 then
writeln('El archivo no se encontró.');

.....

El $I [+/-] activa o desactiva el control de errores IO interno. Con lo cual uno puede detectar esos errores por código. IOResult devuelve el número de error, o 0 si no hubo ninguno.

Espero te sirva, saludos.
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