Pascal/Turbo Pascal - Cómo uso Rewrite y Append

 
Vista:

Cómo uso Rewrite y Append

Publicado por Julio (12 intervenciones) el 08/12/2002 21:24:22
Hola a todos.

Cómo puedo crear una base de datos para guardar los datos de mis amigos, de tal forma que si el archivo no existe, pueda crearlo y guardar registro, pero si existe se abra y pueda seguir agregando más registros sin borrar los que ya existían.

Pienso que debo usar Rewrite para crear y Append para agregar, pero no me resulta.

Aquí les envío parte del código para que vean el o los errores que estoy cometiendo.

...
Type
Ficha = Record (* Nuestras fichas *)
Nombre: String [40];
Telefono: String [10];
Direccion: String [35];
DiaNacim: Byte;
MesNacim: Byte;
AnoNacim: Byte;
End;

Var
Fichero: File of Ficha; (* Nuestro fichero *)
DatoActual: ficha; (* La ficha actual *)

...

Begin
Assign ( Fichero, 'D:\LENGUAJE\T-PASCAL\BIN\AGENDA.DAT' );
{$I-} (* Deshabilita comprobación de entrada/salida *)
Append ( Fichero ); (* Lo intentamos abrir para agregar*)
{$I+} (* La habilitamos otra vez *)
If IoResult <> 0 Then Rewrite (Fichero); (* Lo abro para agregar*)
...

Estaré usar mal las declarativas {SI-} y {$I+}, no son compatibles Rewrite y Append o cómo puedo hacerlo.

Espero que entiendan mi duda y me ayuden.

De antemano, muchas gracias.

Julio
[email protected]
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:Cómo uso Rewrite y Append

Publicado por Roberto Garcia (128 intervenciones) el 09/12/2002 06:23:07
Hola Julio

Lo que pasa es que el append lo estas utilizando mal (de hecho es raro que no te marque error) ya que append solo sirve para abrir archivos de texto para agregar datos, el Rewrite sirve para ambos (archivos de texto y binarios y sin tipo) solo que, si el archivo no existe, el rewrite lo crea, pero si el archivo ya existe elimina todos los datos que tenga el archivo y lo deja listo para agregar o leer.

en lugar de append deberias utilizar reset (que se utiliza para archivos binarios y sin tipo), que deja el archivo listo para agregar o leer datos.

If IoResult <> 0 Then
Rewrite (Fichero);

Aquie el rewrite crea el archivo en caso de que este no existiera, acuerdate que ioresult devuelve diferente de 0 si ocurre un error de entrada o salida y si despues de un " reset(fichero) " ocurre un error lo mas seguro es que el archivo no exista.

De hecho si estas seguro que el archivo existe puedes omitir la condicion " if ioresult <> 0 ", claro que despues de un " reset(fichEro) " pueden ocurrir otros errores como mal estado del disco, que el archivo este dañado, intentar leer o escribir del disquete sin haberlo introducido etc, etc.
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:Cómo uso Rewrite y Append

Publicado por Diego Romero (786 intervenciones) el 09/12/2002 07:53:46
Ampliando la respuesta de Roberto te diré que para agregar un nuevo registro al final de un archivo con tipo debes hacer lo siguiente:
Seek(Fichero, FileSize(Fichero));
Write(DatoActual);
El procedimiento Seek te lleva al registro del archivo Fichero apuntado por el valor del segundo parámetro, como FileSize() te devuelve la cantidad de registros del archivo y como el primer registro de un archivo es el número cero este te apuntará al siguente registro del último que haya en el archivo.
Si el archivo no tiene registros FileSize() devolverá cero y el write escribirá el primer registro, vale decir el cero. No hay forma de errar.
Suerte.
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