Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Borrar lineas de txt

Hola tengo un archivo txt el cual contiene varios datos de distintos usuarios por ejemplo.
dni1
nombre1
apellido1
dni2
nombre2
apellido2

Tengo lo que se encargar de buscar y mostrar en los labels, me falta que una vez que busco a cierta persona la elimine del txt. Sin que me queden espacios en blancos, si quisiera eliminar al dni1, tendria que quedarme asi el txt:
dni2
nombre2
apellido2

Código:
TStrings *TS = new TStringList;
TS->LoadFromFile("datos.txt");


void __fastcall TfCliente::MostrarRegistro(const int pp,const int c) {
        lblCliente->Caption = "Datos de "+TS->Strings[pp+1]+" "+TS->Strings[pp+2];
        lblDni->Caption = TS->Strings[pp];
        lblNombre->Caption = TS->Strings[pp+1];
        lblApellido->Caption = TS->Strings[pp+2];
        lblDireccion->Caption = TS->Strings[pp+3];
        lblMail->Caption = TS->Strings[pp+4];
        lblTelefono->Caption = TS->Strings[pp+5];
        lblCelular->Caption = TS->Strings[pp+6];
        lblEdad->Caption = TS->Strings[pp+7];
        lblNacimiento->Caption = TS->Strings[pp+8];
        lblNumeroCliente->Caption = c;
}
void __fastcall TfCliente::btnBuscarClick(TObject *Sender)
{
        if (editBuscar->Text != ""){
                int docu=0;
                int c;
                for(int i=0; i< TS->Count; i+=9) {
                        if (Trim(editBuscar->Text) == Trim(TS->Strings[i])) {
                                c=TS->Count/9;
                                MostrarRegistro(i,c);
                                editBuscar->Text = "";
                                break;}
                        else {
                        docu+=9;
                                if (docu == TS->Count) {
                                Application->MessageBox("El cliente no existe.","AVISO", MB_OK | MB_ICONEXCLAMATION);
                                editBuscar->Text = "";
                                lblCliente->Caption = "";
                                lblDni->Caption = "";
                                lblNombre->Caption = "";
                                lblApellido->Caption = "";
                                lblDireccion->Caption = "";
                                lblMail->Caption = "";
                                lblTelefono->Caption = "";
                                lblCelular->Caption = "";
                                lblEdad->Caption = "";
                                lblNacimiento->Caption = "";
                                lblNumeroCliente->Caption = "";
                                }
                        }
                }
                if (TS->Count == 0){
                        Application->MessageBox("El cliente no existe.","AVISO", MB_OK | MB_ICONEXCLAMATION);
                }
        }
        else {
                        Application->MessageBox("Ingrese un numero de documento.","AVISO", MB_OK | MB_ICONEXCLAMATION);
        }
}
void __fastcall TfCliente::btnEliminarClick(TObject *Sender)
{
       if (lblApellido->Captiont != ""){

                const int result = Application->MessageBox(("Desea eliminar al cliente " + lblApellido->Caption+" "+lblNombre->Caption+" ?").c_str() ,"AVISO", MB_YESNO | MB_ICONQUESTION);
                switch (result)
                {
                case IDYES:
                        Application->MessageBox("El cliente fue eliminado correctamente.","Cliente eliminado", MB_OK);
                        break;
                case IDNO:
                        break;
                }
        }
}
Responder Con Cita
  #2  
Antiguo 21-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.048
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Muy bien, y ¿el problema?
Responder Con Cita
  #3  
Antiguo 21-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Muy bien, y ¿el problema?
Eliminar los datos del txt, de la persona que busco.
Responder Con Cita
  #4  
Antiguo 22-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola eennzzoo

Código:
void DeleteData(TStrings *TS, String dni)
{
  int ix = TS->IndexOf(dni);

  if (ix != -1) {
    if (MessageBox(0,"¿ Desea borrar los datos ?","",MB_YESNO)==IDYES) {
      TS->Delete(ix+2);
      TS->Delete(ix+1);
      TS->Delete(ix);
    }
  } else
    MessageBox(0,"No se encontró una persona con ese DNI","", MB_OK);
}
Ejemplo de uso:
Código:
void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  DeleteData(Lista, EditDNI->Text);
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 22-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola eennzzoo

Código:
void DeleteData(TStrings *TS, String dni)
{
  int ix = TS->IndexOf(dni);

  if (ix != -1) {
    if (MessageBox(0,"¿ Desea borrar los datos ?","",MB_YESNO)==IDYES) {
      TS->Delete(ix+2);
      TS->Delete(ix+1);
      TS->Delete(ix);
    }
  } else
    MessageBox(0,"No se encontró una persona con ese DNI","", MB_OK);
}
Ejemplo de uso:
Código:
void __fastcall TForm1::btnDeleteClick(TObject *Sender)
{
  DeleteData(Lista, EditDNI->Text);
}
Saludos
Hola, lo probe, pero no borra nada del archivo. Por ejemplo puse TS->Delete(0); en el boton eliminar, y eso tendria que eliminar la primer linea del txt, pero el txt sigue estando igual.
Responder Con Cita
  #6  
Antiguo 22-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola ennzzoo.
Cita:
Empezado por eennzzoo Ver Mensaje
Hola, lo probe, pero no borra nada del archivo. Por ejemplo puse TS->Delete(0); en el boton eliminar, y eso tendria que eliminar la primer linea del txt, pero el txt sigue estando igual.
Si usaste el método Delete con el valor cero como argumento y no borró nada se me ocurren dos posibles causas:
  • El TStringList está vacío.
  • Tu C++ Builder funciona mal.
Mas probable es que el elemento haya sido efectívamente eliminado de la lista, pero el control que se encarga de visualizarla no se hubiera actualizado luego del borrado.

Para evitar confusiones te adjunto el código fuente de un ejemplo operativo, así podrás revisarlo con tranquildad. Solo descomprimilo en una carpeta, contiene el archivo de texto (file.txt).
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 25-09-2014 a las 02:46:14.
Responder Con Cita
  #7  
Antiguo 22-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.048
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
  • El TStringList está vacío.
  • Tu C++ Builder funciona mal.
Seguramente es lo primero
Responder Con Cita
  #8  
Antiguo 23-03-2014
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por eennzzoo Ver Mensaje
Hola, lo probe, pero no borra nada del archivo. Por ejemplo puse TS->Delete(0); en el boton eliminar, y eso tendria que eliminar la primer linea del txt, pero el txt sigue estando igual.
Creo que no habéis entendido a eennzzoo, tiene razón, no se borra del archivo.

Quizas eennzzoo está buscando un ajuste como este:
Código:
void DeleteData(TStrings *TS, String dni)
{
  int ix = TS->IndexOf(dni);

  if (ix != -1) {
    if (MessageBox(0,"¿ Desea borrar los datos ?","",MB_YESNO)==IDYES) {
      TS->Delete(ix+2);
      TS->Delete(ix+1);
      TS->Delete(ix);
      Lista->SaveToFile(ExtractFilePath(Application->Name)+"file.txt");
    }
  } else
    MessageBox(0,"No se encontró una persona con ese DNI","", MB_OK);
}
Saludos.
Responder Con Cita
  #9  
Antiguo 23-03-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.048
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Pues sí, releyéndolo, parece que quiere borrarlo del fichero.
Responder Con Cita
  #10  
Antiguo 23-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por escafandra Ver Mensaje
Creo que no habéis entendido a eennzzoo, tiene razón, no se borra del archivo.
Hola escafandra.

Si, realmente no lo interpreté de ese modo. No pensé que intentara borrar un dato del archivo de texto con el método Delete... seguramente por eso desestimé el resto del párrafo.

Creo entonces que vale aclararle a eennzzoo que una vez usado el método LoadFromFile, los datos del archivo de texto cargados en Lista residen en la memoria y cualquier acción que se realice sobre Lista se perderá finalizar si previamente no se salvan con el método SaveFromFile.

Se pueden tomar dos caminos:
  • Guardar la Lista luego de cada acción (agregado, modificado o borrado)
  • Guardar la Lista al finalizar previo a la liberación de Lista. (*)
(*) ejemplo:
Código:
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  Lista->SaveToFile('tu_archivo.txt');
  delete Lista;
}
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 23-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues sí, releyéndolo, parece que quiere borrarlo del fichero.
Si eso quiero, borrarlo del archivo. Mañana lo pruebo y les digo. Gracias.
Responder Con Cita
  #12  
Antiguo 23-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Creo que no habéis entendido a eennzzoo, tiene razón, no se borra del archivo.

Quizas eennzzoo está buscando un ajuste como este:
Código:
void DeleteData(TStrings *TS, String dni)
{
  int ix = TS->IndexOf(dni);

  if (ix != -1) {
    if (MessageBox(0,"¿ Desea borrar los datos ?","",MB_YESNO)==IDYES) {
      TS->Delete(ix+2);
      TS->Delete(ix+1);
      TS->Delete(ix);
      Lista->SaveToFile(ExtractFilePath(Application->Name)+"file.txt");
    }
  } else
    MessageBox(0,"No se encontró una persona con ese DNI","", MB_OK);
}
Saludos.
Ahora si funciona. Pero en vez de ser Lista->SaveToFile es TS->SaveToFile. Gracias.
__________________
https://www.facebook.com/riverplateoficial
Responder Con Cita
  #13  
Antiguo 23-03-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola eennzzoo.

También recuerda que usando la línea
Código:
  TS->SaveToFile(ExtractFilePath(Application->Name)+"file.txt");
al salir del form, guardarás todas las acciones previas realizadas en la lista, de otro modo tendrás que incluirla al finalizar cada accion (insertar, modificar o borrar).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #14  
Antiguo 24-03-2014
Avatar de eennzzoo
eennzzoo eennzzoo is offline
Miembro
NULL
 
Registrado: nov 2013
Ubicación: Argentina
Posts: 59
Poder: 11
eennzzoo Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola eennzzoo.

También recuerda que usando la línea
Código:
  TS->SaveToFile(ExtractFilePath(Application->Name)+"file.txt");
al salir del form, guardarás todas las acciones previas realizadas en la lista, de otro modo tendrás que incluirla al finalizar cada accion (insertar, modificar o borrar).

Saludos
Ok gracias. Ahi lo probe y funciona bien.
__________________
https://www.facebook.com/riverplateoficial
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Dibujar y borrar lineas con el movimiento de labels Acanol Gráficos 7 29-05-2006 10:50:43
Borrar lineas detalle al borrar registro maestro akinom38 Conexión con bases de datos 3 11-01-2006 10:38:07
Borrar Lineas en Word con delphi Renees Varios 0 21-10-2005 15:46:39
Borrar lineas Luli Gráficos 2 29-07-2005 15:21:28
Luego de borrar lineas en un memo... pablo OOP 3 26-04-2005 01:03:02


La franja horaria es GMT +2. Ahora son las 09:04:01.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi