Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Busquedad en un txt (https://www.clubdelphi.com/foros/showthread.php?t=85411)

eennzzoo 13-03-2014 18:04:13

Busquedad en un txt
 
Hola, tengo un problema. Lo que quiero es buscar un numero de documento dentro de un archivo y me traiga los datos de ese documento.
El archivo .txt seria asi:
33555444
Carlos
Martinez
66777888
Pedro
Rodriguez

Código:

void __fastcall TfCliente::btnBuscarClick(TObject *Sender)
{
        FILE *FOpen;
        char Nombre[30], Apellido[30], Dni[30];
        if( OpenDialog2->Execute() )
        {
                FOpen = fopen(OpenDialog2->FileName.c_str(), "r+");

                if( FOpen == NULL )
                {
                        ShowMessage("El archivo no se pudo abrir");
                        return;
                }
                          fscanf(FOpen, "%s", Dni);
                          fscanf(FOpen, "%s", Nombre);
                          fscanf(FOpen, "%s", Apellido);
                          Form1->editDni->Text = Dni;
                          Form1->editNombre->Text = Nombre;
                          Form1->editApellido->Text = hh;
        }
        fclose(FOpen);
}

Con ese codigo logro traer los primeros 3 datos a sus edits correspondiente.
Lo ideal seria tener un edit al cual yo le ingreso el numero de documento y obtengo los datos que le siguen a ese dni.
Agradezco la ayuda.

ecfisa 13-03-2014 18:38:46

Hola eennzzoo.

Creo que usar TStrings te va a simplificar la tarea:

Código:

...
TStrings *TS = new TStringList;
int curReg = 0;

void __fastcall TForm1::ShowRegister(const int pp)
{
  EditDNI->Text= TS->Strings[pp];
  EditNombre->Text= TS->Strings[pp+1];
  EditApellido->Text= TS->Strings[pp+2];
}

void __fastcall TForm1::btnOpenFileClick(TObject *Sender)
{
  if (OpenDialog1->Execute()) {
    TS->LoadFromFile(OpenDialog1->FileName);
    ShowRegister(0);
  }
}

void __fastcall TForm1::btnBuscarClick(TObject *Sender)
{
  for(int i=0; i< TS->Count; i+=3)
    if (Trim(EditBuscar->Text) == Trim(TS->Strings[i]))
      ShowRegister(i);
}

void __fastcall TForm1::btnNextClick(TObject *Sender)
{
  if (curReg < TS->Count-4) {
    curReg += 3;
    ShowRegister(curReg);
  }
}

void __fastcall TForm1::btnPrevClick(TObject *Sender)
{
  if (curReg >= 3){
    curReg -= 3;
    ShowRegister(curReg);
  }
}

También le agregué dos botones para desplazarte por los registros hacia adelante y hacia atrás.

Saludos :)

ecfisa 13-03-2014 19:07:47

Hola de nuevo.

Al copiar, sin darme cuenta omití el final:
Código:

...
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete TS;
}

Saludos :)

eennzzoo 13-03-2014 19:14:54

Anda joya, gracias.^\||/^\||/^\||/

eennzzoo 13-03-2014 20:42:26

Cita:

Empezado por ecfisa (Mensaje 473717)
Hola de nuevo.

Al copiar, sin darme cuenta omití el final:
Código:

...
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete TS;
}

Saludos :)

Hola, yo otra vez ja. Me gustaria que en ves de mostrarlo en los edit los muestre en un listview. Le agregue esto pero nose como hacer para que liste todos los documento y datos correstpondientes uno bajo de otro solo logro obtener la primer fila. Asi tendria que quedarme:

33555444 Carlos Martinez
66777888 Pedro Rodriguez

Las columnas del listview son documento nombre y apellido

Código:


void __fastcall TfCliente::ShowRegister(const int pp)
{
                TListItem *Item = Form1->ListView1->Items->Add();
                Item->Caption= TS->Strings[pp];
                Item->SubItems->Add(TS->Strings[pp+1]);
                Item->SubItems->Add(TS->Strings[pp+2]);
}


ecfisa 14-03-2014 06:49:07

Cita:

Empezado por eennzzoo (Mensaje 473723)
[b]...
Me gustaria que en ves de mostrarlo en los edit los muestre en un listview. Le agregue esto pero nose como hacer para que liste todos los documento y datos correstpondientes uno bajo de otro solo logro obtener la primer fila. Asi tendria que quedarme:

33555444 Carlos Martinez
66777888 Pedro Rodriguez

Las columnas del listview son documento nombre y apellido
Código:

void __fastcall TfCliente::ShowRegister(const int pp)
{
                TListItem *Item = Form1->ListView1->Items->Add();
                Item->Caption= TS->Strings[pp];
                Item->SubItems->Add(TS->Strings[pp+1]);
                Item->SubItems->Add(TS->Strings[pp+2]);
}


Hola eennzzoo.

Con un TListView a dos columnas (documento y nombre+apellido) la función sería:
Código:

void __fastcall TForm1::ShowRegister(const int pp)
{
  TListItem *lItem = ListView1->Items->Add();
  lItem->Caption = TS->Strings[pp];
  lItem->SubItems->Add(TS->Strings[pp+1]+" "+TS->Strings[pp+2]);
}

Pero debo decirte que el presentar los datos mediante este control, invalida y hace cambiar totalmente el sentido que inicialmente tenía esta y las demás funciones ...

Saludos :)

eennzzoo 14-03-2014 15:34:44

Cita:

Empezado por ecfisa (Mensaje 473743)
Hola eennzzoo.

Con un TListView a dos columnas (documento y nombre+apellido) la función sería:
Código:

void __fastcall TForm1::ShowRegister(const int pp)
{
  TListItem *lItem = ListView1->Items->Add();
  lItem->Caption = TS->Strings[pp];
  lItem->SubItems->Add(TS->Strings[pp+1]+" "+TS->Strings[pp+2]);
}

Pero debo decirte que el presentar los datos mediante este control, invalida y hace cambiar totalmente el sentido que inicialmente tenía esta y las demás funciones ...

Saludos :)

Osea que no hay forma de que liste todos los datos del txt al darle al boton?
Con ese codigo solo logro listar el primer documento con nombre y apellido, y no todos. Y luego de que me cargue todos los datos en el listview, ingresar en un edit el numero de documento y que me marque la fila en el listview.

ecfisa 14-03-2014 17:06:15

Hola eennzzoo.

Implementar lo que buscas con un TListView es un tema totalmente distinto del que se inició el hilo, te ruego que lo plantees como un nuevo tema tal como lo indica el punto ( 8 ) de nuestra guía de estilo.

Saludos :)


La franja horaria es GMT +2. Ahora son las 04:02:05.

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