Datei auslesen und Wörter überspringen
-
Genau.
CString strText = "Käsekuchen"; CString strMid = strText.Mid(4, 5); // Nun sollte da "kuche" drin stehen, wenn ich mich nicht vertan habe...
-
Danke, es geht mit dem left und right befehl! Die | werden auch nicht angezeigt.
Der Code sieht jetzt so aus:
CString strOutput; int pos; CStdioFile stdFileInput("C:\\1.txt", CStdioFile::modeRead); while (stdFileInput.GetPosition() < stdFileInput.GetLength()-1) { stdFileInput.ReadString(strOutput); pos=strOutput.Find("|"); CString english = strOutput.Left(pos); CString german = strOutput.Right(pos); m_ctlEn.AddString(english); m_ctlDe.AddString(german); } stdFileInput.Close();
Jetzt stehen in einem Listenfeld die deutschen im anderen die englishen Wörter. Jetzt müsste ich noch wissen, wie man es macht, dass die Wörter, die in einer Zeile stehen, auch in den Feldern nebeneinander sind und nicht sortiert werden!
Wie würde es jetzt gehen, dass ich da eine Spalte hinzufüge? Also, angenommen das ist die txt datei:
english1|deutsch1
english2|deutsch2
abc|def
test1|Test2
ape|Affewenn ich jetzt hinter jedem Wort (jeder Zeile) noch ein | einfüge und dahinter eine Beschreibung hinzufügen will?
Also:ape|Affe|An ape is an animal.Kann mir da jemand helfen?
-
Das Sortieren kannst du in den Resourcen abschalten, ist ein Häkchen.
Wenn du mit drei Spalten arbeiten willst, kannst du es genauso machen, nur dass du den Englischen nochmal zerhacken musst.
Alles mit den Befehlen die du schon hast.
-
Wie meinst du das, zerschnibbeln? Ich meine es gibt ja nur LEft und Right... Oder gibt es auch noch nen Middle
Kannste vielleicht ein kleines Beispiel posten? Danke für das mit dem sortieren, habe ich übersehen...
-
Ist ehrlich ungetestet - hoffe du erkennst was ich meine:
stdFileInput.ReadString(strOutput); pos=strOutput.Find("|"); CString english = strOutput.Left(pos); CString Rest = strOutput.Right(pos); pos = Rest.Find("|"); CString german = Rest.Left(pos); CString sentence = Rest.Right(pos);
-
Hört sich gut an, schmeckt ihm aber nicht
Habe das übernommen, jedoch zeigt er nur die englischen Wörter an, die anderen beiden nicht...
Der Code sieht bis jetzt so aus:
CString strOutput; int pos; CStdioFile stdFileInput("C:\\1.txt", CStdioFile::modeRead); while (stdFileInput.GetPosition() < stdFileInput.GetLength()-1) { stdFileInput.ReadString(strOutput); pos=strOutput.Find("|"); CString english = strOutput.Left(pos); CString Rest = strOutput.Right(pos); pos = Rest.Find("|"); CString german = Rest.Left(pos); CString sentence = Rest.Right(pos); m_ctlEn.AddString(english); m_ctlDe.AddString(german); m_ctlBsp.AddString(sentence); } stdFileInput.Close();
Wie gesagt, es wird nur das Listenfeld english angezeigt
Kannst du mir helfen (oder jemand anders)?
danke!
-
Tja, komisch, dass es vorher mit den zwei Spalten funktioniert hat.
Right wurde falsch benutzt, so ist es besser:
pos=strOutput.Find("|"); CString english = strOutput.Left(pos); CString Rest = strOutput.Right(strOutput.GetLength() - pos - 1); pos = Rest.Find("|"); CString german = Rest.Left(pos); CString sentence = Rest.Right(Rest.GetLength() - pos);
Jetzt musst du noch das Replace machen und gut ist.
-
Macht spass, mit dir zu arbeiten
Jedoch gibt es da immernoch ein Prob...
CString strOutput; int pos; CStdioFile stdFileInput("C:\\1.txt", CStdioFile::modeRead); while (stdFileInput.GetPosition() < stdFileInput.GetLength()-1) { stdFileInput.ReadString(strOutput); pos=strOutput.Find("|"); CString english = strOutput.Left(pos); CString Rest = strOutput.Right(strOutput.GetLength() - pos - 1); pos = Rest.Find("|"); CString german = Rest.Left(pos); CString sentence = Rest.Right(Rest.GetLength() - pos); sentence.Replace('|', ' '); m_ctlEn.AddString(english); m_ctlDe.AddString(german); m_ctlBsp.AddString(sentence); } stdFileInput.Close();
So sieht der Code aus, jedoch (wie schon vorher auch) kommt eine Fehlermeldung:
error C2039: 'Replace' : ist kein Element von 'CString'Ausgegeben wird jetzt alles im richtigen Listenfeld, jedoch ist bei den Beispielen immmernoch das | davor
Danke, für deine Hilfe!
-
Wenn es nur DAVOR ist, dann lass es doch gleich beim kopieren weg.
CString sentence = Rest.Right(Rest.GetLength() - pos - 1);
-
Yo, es geht
Wäre ich gar nicht drauf gekommen, danke für deine Hilfe
PK01P.S.I´ll be back
-
SetAt müßte gehen.
Also
sentence.SetAt(sentence.GetLength()-1,' ');Gruß
Yvonne
-
Sorry, habe nicht gesehen, daß es schon eine dritte Seite gibt...
-
Aber ich hätte noch eine Frage zu dem Ausdruck
GetRight(strOutput.GetLength() - pos - 1);Wenn strOutput angenommen 20 Zeichen hat und das erste | ist an Position 5, dann müßte doch eigentlich als Rest alles rechts von Position 14 (20-5-1) zurückgegeben werden und nicht rechts von Position 5 oder?
Aber trotzdem kommt das richtige raus, kann mir jemand erklären wieso, bzw. wo liegt mein Denkfehler?
-
@yvonne: Du hast noch einen Verständnisfehler
Right will nicht die Anfangsposition haben sondern wieviele Zeichen von rechts aus gesehen kopiert werden sollen.
Okay?
-
Danke!!!!!!