Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Ayuda con archivo txt (https://www.clubdelphi.com/foros/showthread.php?t=84586)

eennzzoo 07-11-2013 17:35:28

Ayuda con archivo txt
 
Hola, tengo un problema. Lo que quiero hacer es que cuando ingrese en un edit el numero de documento, lo busque en un
archivo.txt y me traiga toda informacion que hay hay el primer punto que encuentre.

el archivo contiene esto
55555555 Carlos Sanchez Argentina. 888888888 Pedro Vazques Chile. 6666666 Julian Cacho Uruguay.

En el boton tengo esto

Código:

void __fastcall TForm2::Button2Click(TObject *Sender)
{
        char linea[128];
        char linea3[123]="";
        AnsiString linea2;
        ifstream archi("datos.txt");
        string documento;
        documento=Edit4->Text.c_str();
        int docu;
        while(!archi.eof())
        {
                archi.getline(linea,sizeof(linea));
                for (int i=0;i<strlen(linea);i++){
                        if (linea[i]==documento[i]){
                        docu=i;
                        }
                }
                for (int i=docu;i<strlen(linea);i++){
                        if (linea[i]!='.'){
                        linea3[i]=linea3[i]+linea[i];
                        }
                }
        }
        Edit3->Text=linea3;
        archi.close();
}

Si pueden ayudarme se los agradezco.

ecfisa 07-11-2013 22:51:03

Hola eennzzoo y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Un modo de hacerlo es:
Código:

bool SearchByDoc(String aText, String Searched, String &Found)
{
  TStrings *Split = new TStringList;
  String s;

  Split->Text = aText;
  ExtractStrings(TSysCharSet() << '.', TSysCharSet() << '\0', aText.c_str(), Split);
  Split->Delete(0);
  for(int i = 0; i < Split->Count; i++) {
    s = Split->Strings[i];
    if (s.SubString(0, s.Pos(" ")-1) == Trim(Searched)) {
      Found = Split->Strings[i];
      return true;
    }
  }
  delete Split;

  return false;
}

Ejemplo de llamada:
Código:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  TStrings *Arch = new TStringList;
  String Datos;

  Arch->LoadFromFile("Archivo.txt");
  if (SearchByDoc(Arch->Text, Edit1->Text, Datos))
    ShowMessage(Datos);
  else
    ShowMessage("No encontrado"); 

  delete Arch;
}

Saludos :)

eennzzoo 08-11-2013 00:47:06

Gracias lo voy a probar.

eennzzoo 09-11-2013 00:04:43

Que raro me devuelve la ventana diciendo no encontrado.
SearchByDoc(Arch->Text, Edit4->Text, Datos)
En ese edit le paso el documento que ingreso.

ecfisa 09-11-2013 02:43:19

Hola.

Seguramente sea por que en tu archivo existe un espacio antes del número de documento (o después del punto), se soluciona quitándolo antes de la comparación:
Código:

bool SearchByDoc(String aText, String Searched, String &Found)
{
  TStrings *Split = new TStringList;
  String s;

  Split->Text = aText;
  ExtractStrings(TSysCharSet() << '.', TSysCharSet() << '\0', aText.c_str(), Split);
  Split->Delete(0);
  for(int i = 0; i < Split->Count; i++) {
    s = Trim(Split->Strings[i]);
    if (s.SubString(0, s.Pos(" ")-1) == Trim(Searched)) {
      Found = Split->Strings[i];
      return true;
    }
  }
  delete Split;

  return false;
}

Saludos :)


La franja horaria es GMT +2. Ahora son las 11:50:39.

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