Suchen in einer txt-Datei



  • wenn es Datensätze sind ist das doch recht einfach
    In meinem Beispiel Lese ich das Passwort aus einer Datei mit verschiedenen Datensätze herraus

    wenn du es ein wenig umänderst kannst du es auch für dich verwenden
    da ich nicht genau weiß wie deine DS sind

    void UserauswahlDlg::OnOk() 
    {
    UpdateData(TRUE);
    double write;
    double write1;
    double write2;
    double write3;
    double write4;
    double write5;
    CString PWort;
    
    CStdioFile datei3( Pfadannahme2 +"\\"+ Suchen200 +".txt", CFile::modeRead );
    datei3.Read( &write, sizeof( write) );
    datei3.Read( &write1, sizeof( write1) );
    datei3.Read( &write2, sizeof( write2) );
    datei3.Read( &write3, sizeof( write3) );
    datei3.Read( &write4, sizeof( write4) );
    datei3.Read( &write5, sizeof( write5) );
    datei3.ReadString(PWort);
    
    UpdateData( FALSE );
    datei3.Close();
    
    CString Passwortver = m_Passworteingabe;
    
                BYTE XOR_WERT='6';//*'6';
                for (int z = 0;z<Passwortver.GetLength();z++)
                    {
                    Passwortver.SetAt(z,Passwortver.GetAt(z)^XOR_WERT);
                    }
    
    if (Schleifezahl != 0)
    {
        if(PWort != Passwortver)
    

    hoffe konnte helfen wenn nicht melde dich nochmal

    Vossy



  • Hallo,

    das ganze ist ein funktionierender Lösungsweg. Ich habe dabei allerdings das Problem, dass ich den kompletten Datensatz in einen CString einlese. Da ein CString ein array ist das ganze nicht geeignet. Was ich suche ist, ohne vorher den gesamten Dateiinhalt in einen CString zu schreiben die Daten in der Zeile nach einem entsprechenden Wort auszulesen.

    stuttgart ;111;122;
    berlin ;222;444;
    hamburg ;222;444;

    Wenn ich also in einem char* stuttgart stehen habe, möchte ich die Daten ;111;122; auslesen. Bei berlin ;222;444; usw. Das ganze soll in einer sehr großen Txt-Datei stattfinden. Das einlesen der Daten in einen CString dauert zu lange und der CString besitzt auch nur eine begrenzte Kapazität an Daten.

    Gruß

    Carlos



  • Also da hätte ich eine ander lösung für dich
    Wenn du dir die Daten selbst erstellst und in die Datei
    schreibst dann ändere die Eingabeform ab und benutze eine Strucktur
    Beim Suchen kannst du dann die Struckeigenschaften nutzen und
    hast dann nicht mehr die probleme der zuordnung

    Andreas



  • Das Problem ist, dass ich die Daten nicht selbst erstelle, sonder auf die sich auf ein txt-Dokument geeinigt wurde. Daher bekomme ich eine Datei mit mehreren zehntausend Einträgen. Daher muss ich direkt in der Datei suchen.

    Gruß

    Jochen



  • Dann muß ich passen.
    Ich würde aber die gesammte datei einlesen
    natürlich DS passend
    umspeichern und dann verarbeiten
    Das problem was du hast ist das setzen des Cursors in der Datei.

    Tut mir leid das ich dir da nicht weiterhelfen kann
    Solltest du dennoch eine Lösung gefunden haben wäre es nett
    mich mal zu informieren

    Vossy



  • Wen du es so machen will dann mußt du den Filezeiger auf den den Punkt setzen ab dem du auslesen möchtest. Diesen Punkt finden geht aber IMHO auch nicht schneller als gleich die Zeile einzulesen und dann zu parsen.

    Willst du aus dieser Datei nicht Zeilenweise auslesen sondern das ganze als Datenbank nutzen und die Zeile suchen wo dein Suchwort steht dann solltest du das vorher in eine DB einlesen und von dort suchen.
    Du könntest aber einen Index anlegen wo der beginn des Filezeigers mit dem Suchwort gespeichert wird. (z.B. Berlin 200)
    Die würde aber eine 2te Datei bedingen die nicht unwesentlich klein ist.



  • Hi Unix-Tom

    habe ich ihn auch vorgeschlagen und das was der
    vorteil dann ist man kann Sie in einer DB beliebig
    weiterverarbeiten

    Vossy



  • Das mit dem Zeiger ist schon klar, nur wie bekomme ich den Zeiger auf den String? Das ist eigentlich die Funktion die ich suche, wie zum Beispiel bei der CString-Funktion find(). Es ist zwar möglich nach einem bestimmten Zeichen innerhalb der Datei zu suchen, allerdings fehlt mir das suchen nach einem bestimmten String wie zum Beispiel "berlin" und als Rückgabewert den entsprechenden Zeiger.

    Gruß

    Carlos



  • Gibt es IMHO nicht und wenn dann wird auch nur verglichen und der Zeiger zurückgeliefert.
    Das kann man leicht selbst auch machen.



  • Hallo,

    erst mal ne kurze Verständnisfrage. Was bedeutet IMHO? Und wie kann man das mit dem Zeiger zurückliefern leicht selbst machen, denn gerade das ist es was ich suche.

    Gruß

    Carlos



  • Meiner bescheidenen Meinung nach auf Englisch.

    Du öffnest die Datei (CFILE)
    Jetzt ließt du den Inhalt einzeln aus.
    Jedesmal vergleich mit deinem String.
    Sollte der String passen gehst du mit dem Filezeiger bis zum Wortanfang zurück.
    Dies ist jezt die Position des Wortbeginns. member von CFILE GetPosition()

    Auslesen:

    Datei öffnen.
    member seek() von CFILE um zur Position zu gehen.
    auslesen.


Anmelden zum Antworten