Tabulator Textdatei einlesen
-
Hallo...
ich komme da nicht weiter...
wie suche ich denn nach dem "\t" ?
wie werte ich es aus wenn ich nicht die erste Spalte haben will sondern die 3 und die 5 z.b.?Mein Code (einer meiner versuche)
CString string; CStdioFile File; char* szFileName= "c:\\test.txt"; File.Open(szFileName, CFile::modeRead,NULL); while (File.ReadString(string)) { string.Find('\t'); /* Hier soll das ganze dann in eine datei geschrieben werden aber nur die splaten die ich haben will */ }dank vorab uwe
-
Also, ich würde die Zeile an den \t richtig zerhacken und vorübergehend in einem CStringArray speichern. Aus dem kannst du dann die Spalten raussuchen, die du haben möchtest.
Mit zerhacken meine ich etwa sowas:
merke erste Fundstelle von \t
solange noch ein \t in der Zeile gefunden wird...
Vorderen Teil im Array merken
Zeile auf den hinteren Reduzieren
merke erste Fundstelle von \t
Zeilenrest in Array steckenSchon hast du eine fein säuberlich zerlegte Zeile.

Und durch das vorne "Wegnehmen" wird das Problem gelöst, dass immer nur das erste Auftreten von \t gefunden wird.
Okay?
-
Hallo...
Danke für die Hilfe...
Das habe ich befürchtet das es nur mit einem StringArray funzt...
Denn ich habe keine Ahnung wie ich mehr als ein \t in einer Zeile suche und auswerte b.z.w. in ein Array schreibe.
Dann weiss ich auch nicht wie ich ein Array durchsuchen kann und das ganze in auswertbare Strings zu bekommen.
Da werde ich noch viel lesen müssen....mfg uwe
-
Hey, nicht verzweifeln.

Also, zum schnelleren Nachschlagen:
In ein Array schreiben geht mit Add (anhängen) und SetAt (ersetzen).
Aus einem Array lesen kannst du mit GetAt.
Mit GetSize kriegst du die Anzahl der Elemente.
RemoveAll leert das Array.Mit den Funktionen solltest du schon mit einem Array arbeiten können. Diese Funktionen sind für CArray und alle davon abgeleiteten Arrays gültig. Die Parameter und so kannst du ja nachlesen.
Na? Sieht doch gar nicht so schwer aus, oder?
Ich finde es jedenfalls einfacher als die Arrays in C.
-
mit iostreams und den operatoren >>, << könntest du das einlesen,
diese lesen immer bis zum trennzeichen, in diesem Fall \t.Devil
-
zum zerlegen des cstrings kannst du auch die funktionen string.right string.mid oder string.left nehmen, wenn du mit >> operatoren net klarkommst. die drei dinger sind in der msdn sehr gut erklärt
-
Hallo...
danke für die Hilfe...das mit dem Array funz... aber er schreibt immer die ganze Zeile in das Array
CStringArray meinArray; // Hier die Datei auslesen und die Zeile in "string" CString string, ergebnis; while(File.ReadString(string)) { if ( string.Find("\t") != -1) //Wenn der Suchbegriff im String enthalten { // Hier suche ich, wie ich den String durchsuchen kann // Er schreibt immer die ganze Zeile in das Array meinArray.Add(); // <- Hier muss ja dann jeder einzelne Tabulator einer Zeile stehen.... //damit ich das ergebnis in eine Datei schreiben kann und das Array löschen kann //und die nächste Zeile einlesen kann } } File.Close(); m_strFeld.Format("%s",meinArray.GetAt(1)); m_strFeld2.Format("%d",meinArray.GetSize()); UpdateData(FALSE); }mfg uwe
-
Hattest du den Post von ... gelesen? Die Umsetzung (oder den Versuch) sehe ich nirgends. Das brauchst du aber, es löst genau das Problem, dass du die Zeile nicht zerlegt hast.

-
Hallo....
ich habe es jetzt mit string.Left und u.s.w. versucht...
es es funzt auch aber nur beim ersten tab. den zweiten findet er auch wenn ich den indexwert als startwert zum suchen eintrage.
Aber er zeigt mir beim zweiten eintrag immer auch den ersten eintrag mit an.
wie kann ich das abstellen?
und kann man den Code optimieren denn ich habe 12 splaten{ int index; index = string.Find('\t'); ergebnis = string; meinArray.Add(ergebnis.Left(index)); index++; index =string.Find('\t',index ) ; ergebnis = string.Left(index); meinArray.Add(ergebnis); m_strFeld2.Format("%i, %i",meinArray.GetSize(),index); } } File.Close(); m_strFeld.Format("%s",meinArray.GetAt(1));dank vorab uwe
-
estartu_de schrieb:
merke erste Fundstelle von \t
solange noch ein \t in der Zeile gefunden wird...
{
Vorderen Teil im Array merken
Zeile auf den hinteren Reduzieren
merke erste Fundstelle von \t
}
Zeilenrest in Array steckenDer Beitrag war schon mal.
Du brauchst eine Schleife!
Und hack den ersten gefundenen Teil ab. Sonst ist es klar, dass der nochmal gefunden wird. Richtig raus aus der Zeile. Dann kannst du auch immer bei -1 mit suchen anfangen.
-
Hallo....
super Dank..... jetzt FUNZT es...
mfg uwe