Dateien einlesen

Specialguest

Grünschnabel
Hallo

Ich habe ein kelines Problem!
Ich möchte eine Textdatei mit sehr vielen Daten durchsuchen. Die Datei besteht aus mehreren Datensätzen die durch ein @ Zeichen von einander getrennt sind!
Die Taxtdatei besteht aus ca 1000 verschiedenen Sätzen die alle eine eimalige nummer haben z.b 12334 .
Nun möchte ich diese Datei durchsuchen nach diser nummer und immer wenn die nummer gegeben ist soll bis zum @ alles in einen CString gespeichert werden. Leider komme ich hier nicht auf die Logik!
Folgendes habe ich schon versucht!
CFile datei;
datei.Open("test.txt",CFile::modeRead);
CString quelle,ziel;
CString m_such ="12334";
for (unsigned int i=0;i<datei.GetLength();i++)
{
if (quelle.Find('@' != -1))
{
ziel = quelle.Mid(quelle.Find(m_such),quelle.ReverseFind('@') - quelle.Find('m_such'));
}
}
m_lesen = ziel;

Da sich aber im CString quelle noch nicht befindet kanna ja auch noch nichts gesucht geschweige gefunden werden!
Wie bekomme ich den das was in CFile datei gefunden wird in CString quelle
Oder ist hier meine Logik falsch!
Ich kann mir ja mit TCHAR[1000] 999 zeichen einlesen, jedoch ist dieses zuwenig für meine textdatei!
Ich hoffe mir kann einer einen kleinen Tips dazu geben.
 

Thomas Kuse

Erfahrenes Mitglied
Mit der Memberfunktion Read kannst du soviel Bytes einlesen, wie Du möchtest. Der Datei-Zeiger wird dann um die Anzahl Bytes erhöht, so dass Du beim erneuten einlesen die darauffolgenden Bytes bekommst.

Du liest die Datei solange ein, bis du das EOF - Zeichen erhalten hast (EOF-File).
 

Specialguest

Grünschnabel
EOF

mit EOF meinst du End Of File oder?
Also eine do while Schleife die solange durchlaufen wird bis EOF erreicht ist!
Darin dann abfragen ob mein m_suchen drin ist, wenn ja bis zum @ alles in CString kopieren!
Die Logik ist da, nur das umsetzen fehlt mir!
Aber trotzdem Danke erstmal ich versuch es mal!
 

Specialguest

Grünschnabel
Das wäre genial!

Hey Du!
Also wenn du mich so fragst, wäre ich über jede Hilfe dankbar!
Ich sitze hier schon wieder und komme nicht weiter!
Wenn du da ein Programmbeispiel hättest, wäre das echt gut!
mfg
 

Specialguest

Grünschnabel
Hallo Thomas
Ich habe eine Lösung gefunden!
Da aber die textdatei irsinnig viele verschiedende Datensätze hat dauert dieser Suchvorgang sehr lange!
Ich schreib mal den Code auf! Vieleicht hast du ja ne Idee wie ich das etwas schneller machen kann!
Code:
CStdioFile csFile;
csFile.Open("Vert.txt",CFile::modeRead | CFile::typeText);
int i=0;
CString str = "";
CString filecontent = "";
CString find ="";

while (csFile.ReadString( str )) {
      if (str.Find(m_such)!=-1 )  {
	str = str.Mid(str.Find('>'+m_such),str.Find("<")-str.Find('<'+m_such));
	filecontent += str +' \n' ;
        i++; 
      }
      if (str.Find(m_such)==-1 ) {
	AfxMessageBox("Nix da!");
      }
}	
csFile.Close();
m_test = filecontent;
UpdateData( FALSE );
Vieleicht hast du ja ne Idee, danke!
sven

[edit mod=joki]Code-Tags eingefügt[/edit]
 
Zuletzt bearbeitet von einem Moderator:

Thomas Kuse

Erfahrenes Mitglied
Code:
      if (str.Find(m_such)==-1 ) {
	AfxMessageBox("Nix da!");
      }
bekommst Du so nicht jede Zeile eine Messagebox, in der Dein Suchbegriff nciht auftaucht?