CString auseinander nehmen
-
Hallo, bin extremer Anfänger - bitte um Hilfe !!
habe einen String aus einer Datei ausgelesen und in die Variable CString Zeile eingelesen. Jetzt muss ich diesen vereinzeln und wieder auslesen, wobei das Auslesen auch kein Problem darstellt.
hier mein String:
S1y+S2y-S3y+S4y....
ausgegeben werden soll (es soll immer nach dem "y" abgeschnitten werden)
S1y+S2y-S3y+S4y....
+S2y-S3y+S4y....
-S3y+S4y....
+S4y....hier mein Anfang:
-----------------
CStdioFile WriteFile;
WriteFile.SeekToEnd();int i=0;
while (i <= (Zeile.GetLength()))
{ CString Ausgabe;if (i=0) ZeileNeu = (Zeile);
else
{
ZeileNeu = Zeile.Right(Zeile.GetLength()- ???);
i++;
}Ausgabe = ZeileNeu;
WriteFile.WriteString(Ausgabe);
}
----------------------------------------------------------------
ich habe keine Ahnung ob das so geht
helft mir bitte schnell ...
Danke
-
Anfaenger2001 schrieb:
ich habe keine Ahnung ob das so geht
Bevor ich mir das ansehe: was heißt, du weißt nicht, ob es geht? Hast du es nicht ausprobiert? Was kommt dabei raus? Gibts vielleicht Fehlermeldungen o.ä.?
Btw, eine Variable WriteFile nennen ist keine gute Idee, da es im Win-SDK eine Funktion mit dem Namen gibt.
-
Habe mir selber die Nacht um die Ohren geschlagen, so funktioniert es erstmal:
aber vielleicht kann mir noch jemand sagen, wie ich einen Zeilenumbruch in der CString Variable: Zeile wegbekomme! Mein CString Zeile geht leider über mehrere Zeilen : ich bräuchte also eine Idee, wie man aus einem String, der über mehrere Zeilen geht, einen langen String macht ???
------------------------------------------------------------------
CString Zeile;
int start=0;
int ende=0;while (Laufzeit)
{
CString Ausgabe, Wert;start=Zeile.Find("y")+1;
ende=Zeile.GetLength();Wert = Zeile.Right(ende-start);
Ausgabe = (Wert+"\n");
}
-
Zum Beispiel so:
int main() { CString str="ich bin ein \ntest\n und gehe\n über mehrere zeilen."; std::cout << str << std::endl << std::endl; int pos; while((pos=str.Find('\n'))>=0) { str.Delete(pos); } std::cout << str << std::endl << std::endl; }EDIT: Vielleicht noch Carriage Return ('\r') beachten...
-
ist das mit der while, Find und Delete neicht etwas wie mit Kanonen auf Spatzen schießen wenn es ein einfacher Replace auch tut?
CString str("ich bin ein \ntest\n und gehe\n über mehrere zeilen."); str.Replace("\n",NULL);Wobei zu beachten is das "\r\n" der korrekte Zeilenvorschub unter Windows ist, aber das nur nebenbei.
Off-Topic:
Ich werde mal bei Martin Richter ne Studie in Auftrag geben warum keiner beim CString den Konstruktor benutzt sondern alle eine Zuweisung machen , aber das nur am rande weil mir das mal aufgefallen is
-
CTecS schrieb:
ist das mit der while, Find und Delete neicht etwas wie mit Kanonen auf Spatzen schießen wenn es ein einfacher Replace auch tut?
Hehe, stimmt, da war ja noch was...

CTecS schrieb:
Ich werde mal bei Martin Richter ne Studie in Auftrag geben warum keiner beim CString den Konstruktor benutzt sondern alle eine Zuweisung machen , aber das nur am rande weil mir das mal aufgefallen is
Wo liegt der Vorteil beim Konstruktor-Aufruf? Für mich funktioniert eine normale Zuweisung wunderbar. Kommt doch aus Gleiche raus...
-
_matze schrieb:
Wo liegt der Vorteil beim Konstruktor-Aufruf? Für mich funktioniert eine normale Zuweisung wunderbar. Kommt doch aus Gleiche raus...
Mir geht es nicht um Vor- oder Nachteil das war nur eine Feststellung. Es gibt Programmtechnisch keinen Unterschied weil der CString intern das selbe Aufruft, soweit ich das bei durchtracen gesehen habe.
-
CTecS schrieb:
_matze schrieb:
Wo liegt der Vorteil beim Konstruktor-Aufruf? Für mich funktioniert eine normale Zuweisung wunderbar. Kommt doch aus Gleiche raus...
Mir geht es nicht um Vor- oder Nachteil das war nur eine Feststellung. Es gibt Programmtechnisch keinen Unterschied weil der CString intern das selbe Aufruft, soweit ich das bei durchtracen gesehen habe.
Ok, hatte sich wertend angehört.

Ich finde die Zuweisung einfach gewohnter, auch durch Sprachen, die ich früher benutzt habe.