Datei auslesen und Wörter überspringen
-
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!!!!!!