Suchen in einer txt-Datei
-
Hallo Leute,
ich möchte nach einem bestimmten Wort Daten aus einer TXT-Datei auslesen. Gibt es da eine spezielle C-Klasse oder eine Funktion, mit der man die entsprechenden Daten auslesen kann ohne die Datei vorher in einen CString zu schreiben? Eine Funktion ähnlich der CString-Funktion CString::Find(...) wäre klasse.Wort Daten
Frankfurt am Main ;111;222;
Berlin ;222;333;
usw.Gruß
Carlos
-
ist das ein beliebiger Text oder sind das
DatensätzeVossy
-
Das ganze sind Datensätze. Einem bestimmten Wort werden gewisse Daten, zugeordnet.
Gruß
Carlos
-
wenn es Datensätze sind ist das doch recht einfach
In meinem Beispiel Lese ich das Passwort aus einer Datei mit verschiedenen Datensätze herrauswenn du es ein wenig umänderst kannst du es auch für dich verwenden
da ich nicht genau weiß wie deine DS sindvoid 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 zuordnungAndreas
-
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 informierenVossy
-
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
weiterverarbeitenVossy
-
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.