Pascal/Turbo Pascal - Borrar Nombre

   
Vista:

Borrar Nombre

Publicado por tugatime (44 intervenciones) el 13/01/2013 18:00:06
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure pedido_entregado(var mi_cesta: cesta; var Nfichero: string);
          var
             i: integer;
             fichero: text;
             linea: string;
             exito: boolean;
 
          begin
               for i:=1 to tamxcesta do
                   mi_cesta[i].en_cesta:= false;
 
               exito:= false;
 
               assign(fichero, 'indice.txt');
               {$I-}
               reset(fichero);
               {$I+}
 
               if (ioResult=0) then
                  begin
                       while not eof(fichero) do
                             begin
                                  readln(fichero, linea);
 
                                  if (linea=Nfichero) then
                                     exito:= true;
                             end;
 
                       if (exito=true) then
 
                  end
               else
                   writeln('Lo siento, pero aun no se ha realizado ningun pedido.');
 
               close(fichero);
          end;


En este procedimiento lo que tengo que hacer es borrar los productos de una cesta (eso ya esta hecho, solo tengo que poner el campo en_cesta a false) y tengo que borrar el nombre de la cesta del fichero de texto "indice.txt".

Lo primero que hago es comprobar que el fichero de texto "indice.txt" existe. Luego, si existe, lo que hago es leer el fichero linea a linea hasta encontrar el nombre que quiero borrar.
Cuando encuentro el nombre que quiero borrar, lo que tengo que hacer es borrarlo, pero el problema es que no se que poner para borrar ese nombre.

Me he quedado aqui: "if (exito=true) then". En esta parte he encontrado el nombre, pero no se que poner para borrarlo. Alguna idea ?
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

Borrar Nombre

Publicado por ramon (2072 intervenciones) el 13/01/2013 19:34:45
Mira de esta forma anulas el indice del archivo pero no el de productos y ten en cuenta que
en el archivo al no limpiarlo se ara cada vez mas grande.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure borrado(var mi_cesta: cesta; Nfichero: string);
   var
     i : integer;
     fichero: text;
     linea: string;
     exito: boolean;
     begin
        exito := false;
        assign(fichero, 'indice.txt');
   {$I-} reset(fichero); {$I+}
     repeat
         read(fichero,linea);
         if linea = Nfichero then
         begin
         write(fichero,'*');
         exito := true;
         end;
     until (exito = true) or (eof(fichero) = true);
     close(fichero);
   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

Borrar Nombre

Publicado por tugatime (44 intervenciones) el 14/01/2013 03:17:16
Hay una cosa que no entiendo.

Cuando haces esto:

write(fichero,'*');

Aqui que estas haciendo exactamente ??

Es decir, se que estas escribiendo algo por el "write", pero eso de '*' no lo entiendo. Me puedes explicar ??

Por cierto. A parte de todo esto, le puede añadir tambien esto:

1
2
for i:=1 to tamxcesta do
                   mi_cesta[i].en_cesta:= false;


O hay algun problema para no poder añadirlo ?
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

Borrar Nombre

Publicado por ramon (2072 intervenciones) el 14/01/2013 17:55:47
Lo que pone es un asterisco en lugar de los datos que tuvieras para luego si quieres limpiarlo
solo tienes que anular todas las lineas que rendan el asterisco.
for i:=1 to tamxcesta do
mi_cesta[i].en_cesta:= false;

Esto lo puedes poner si quieres pero si a nulas el enlace tendrías que anular el archivo o contenedor
de los datos sigo yo.
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

Borrar Nombre

Publicado por tugatime (44 intervenciones) el 14/01/2013 19:57:47
Tu dices de limpiarlo y anular las lineas con el arterisco, pero como hago eso ??

Otra cosa, en esto:

for i:=1 to tamxcesta do
mi_cesta[i].en_cesta:= false;

Dices que puedo poner pero que tengo que anular el archivo o contenedor. Con eso de anular el archivo o contenedor te refieres a anular el fichero donde esta guardada la cesta ??
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

Borrar Nombre

Publicado por ramon (2072 intervenciones) el 15/01/2013 19:53:28
si pues sino tendrás archivos inútiles puesto que as borrado su nombre en el archivo guía.
Para limpiar tendrás que realizar esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uses
     crt;
  var
    nombre : string;
    f : text; {'indice.txt'}
 
  procedure limpia(nomd : string);
  var
    temporal : text;
    datos : string;
    begin
       assign(f,nomd);
    {$I-} reset(f); {$I+}
    if ioresult <> 0 then
    begin
        writeln('El Archivo No Existe');
        readln;
        exit;
    end
  else
     begin
        assign(temporal,'tempe.txt');
        rewrite(temporal);
        while not eof(f) do
        begin
           readln(f,datos);
           if datos <> '*' then
           begin
             writeln(temporal,datos);
           end;
        end;
         close(f);
         close(temporal);
         erase(f);
         rename(temporal,nomd);
     end;
    end;
 
   begin
       clrscr;
       nombre := 'BaBai.txt';
       limpia(nombre);
       writeln('El Archivo A Sido Limpiado');
       readln;
   end.


fíjate que solo es el procedimiento limpia(nomd : string); lo demás lo tienes
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Borrar Nombre

Publicado por tugatime (44 intervenciones) el 15/01/2013 21:11:33
Eso de erase(f), borra el fichero f como si nunca hubiera existido o simplesmente lo limpia, es decir borra lo que tiene guardado en el ?
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

Borrar Nombre

Publicado por ramon (2072 intervenciones) el 15/01/2013 21:53:22
Fíjate bien primero crea uno temporal con los datos buenos luego los cierra borra el viejo y re nombra
el nuevo con lo cual tu archivo esta limpio.
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

Borrar Nombre

Publicado por tugatime (44 intervenciones) el 16/01/2013 02:20:21
Ya lo he probado y funciona a la perfeccion. Muchas gracias.
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