CString auflösen
-
habe irgendwie den faden verlogren oder ich
denke zu kompiziertich habe ein string der folgenes beinhaltet
CString Text_zusammen = "eins'zwei'drei'vier" //das Zeichen ' teilt den String CString Text1; CString Text2; CString Text3; CString Text4; for (int z = 0; z < Text_zusammen.GetLength();z++)//durchläuft die schleife bis Stringende erreicht { //Black out }
ich möchte nun das in
Variable Text1 der wert >>eins<<
Variable Text2 der wert >>zwei<<
Variable Text3 der wert >>drei<<
Variable Text4 der wert >>vier<< stehtmit CString::Right, CString::Left, CString::Mid
komme ich nicht klar Denke **wahrscheinlich viel zu umständlich.Kann mir jemand auf die Sprünge helfen
Vossy**
-
Ich denke eigentlich auch immer viel zu kompliziert, wills aber mal versuchen
CString Text_zusammen = "eins'zwei'drei'vier" //das Zeichen ' teilt den String CString Text1; CString Text2; CString Text3; CString Text4; int nIndexArray[4]; int nCounter = 0; for (int z = 0; z < Text_zusammen.GetLength();z++) { if ( Text_zusammen.GetAt(z) == "'") { nIndexArray[nCounter] = z; nCounter++; } } Text1 = Text_zusammen.Left(nCounter[0]); Text2 = Text_zusammen.Mid(nCounter[0]+1, nCounter[1]-nCounter[0]); Text3 = Text_zusammen.Mid(nCounter[1]+1, nCounter[2]-nCounter[1]); Text4 = Text_zusammen.Mid(nCounter[2]+1);
Kann funktionieren muß aber nicht... ist nicht getestet
Vielleicht hilft es Dir weiter
MfG veganza
-
Viel zu kompliziert...
Darf ich dir noch mal einen Tip geben ?
Schau dir mal CString::Find an...Devil
-
Hallo devil81
das habe ich aber ich komme da logisch
gesehen auf keine LösungIch weiß nicht warum aber hilf mir doch bitte mal
zu veganza
Hallo
du soetwas ähnliches habe ich auch schon versucht aber
das geht schon deshalb nicht da dies eine Ersetzenfunktion istSo etwas ähnliches nehme ich zum verschlüsseln bin Textdateien.
Auch ( Text_zusammen.GetAt(z) == "'") würde nicht gehen
Dennoch aber DankeVossy
-
hm, mit Find findest du die stelle an der ein bestimmtes zeichen das erste Mal steht,
CString::Right und CString::Left wollen wissen wo das Zeichen ist, ab dem getrennt
wird, klingelts ?devil
-
Nicht so schnell... so funktioniert meine Methode auch ( jetzt ist es getestet ) !!!
CString Text_zusammen = "eins'zwei'drei'vier" //das Zeichen ' teilt den String CString Text1; CString Text2; CString Text3; CString Text4; int nIndexArray[4]; int nCounter = 0; for (int z = 0; z < Text_zusammen.GetLength();z++) { if ( Text_zusammen.GetAt(z) == '\'') { nIndexArray[nCounter] = z; nCounter++; } } Text1 = Text_zusammen.Left(nCounter[0]); Text2 = Text_zusammen.Mid(nCounter[0]+1, nCounter[1]-nCounter[0]-1); Text3 = Text_zusammen.Mid(nCounter[1]+1, nCounter[2]-nCounter[1]-1); Text4 = Text_zusammen.Mid(nCounter[2]+1);
Die andere Möglichkeit mit CString::Find() müßte man ca. so realisieren:
Mit Find nach ' suchen, dann erhält man bis zum gefundenen Index-1 den erste String... wird mittels Left(gefundenerIndex-1) herausgelöst.
Danach schneidest Du bis zum ersten gefundenen Index den String ab... wird mittels Right(Gesamtstringlänge-Index) realisiert.
Das machst Du solange, bis nichts mehr gefunden wird !!!
So will es devil81 tun... IMHO
MfG veganza
[ Dieser Beitrag wurde am 16.11.2002 um 22:33 Uhr von veganza editiert. ]
-
nein Tut mir leid nicht wirklich
Alleine Hier wird nur das erste Zeichen gefunden und dann keines mehr
obwohl 8 Zeichen dtin sindfor (z = 0;z<Daten_lesen.Rechen_Variante.GetLength();z++) { if (Daten_lesen.Rechen_Variante.Find("'",z) == FALSE) { MessageBox("gefunden"); } else { MessageBox("nicht gefunden"); } }
Ich muß mir hier was anderes einfallen lassen
Gibt es irgendwo im Netz ein Praktisches Beispiel
Vossy
-
Würde ich so machen:
CString text("'Eins'Zwei'Drei'Vier'"); CStringArray arr; int old = 0,pos = 0; while(-1 != (pos = text.Find('\'',pos))) { arr.Add(text.Mid(old,pos - old)); old = ++pos; } if(old < text.GetLength()) arr.Add(text.Mid(old,text.GetLength() - old));
-
Nachdem Du das erste Zeichen gefunden hast, mußt Du den Ausgangs-String um den gefundenen ersten String abschneiden und in diesem "neuen" String weitersuchen.
Bsp:
CString str = "12'34'56'78'90";
der Find(') liefert 2 zurück
also ist den erster String von 0. bis zum 1. Zeichen, das 2. Zeichen ist der Trenner.
Jetzt löscht Du bis Index == 2 von Links her alles.
str.Right(str.GetLength - 2) // -2 weil das der erste Treffer war
und suchst in diesem "neuen" String wieder nach dem Trenner usw. usw. usw.
MfG veganza
-
Hallo Nemesyzz futzt gut und jetzt nehme ich es erst mal
auseinander denn verstehen möchte ich das ja auch.Tut mir leid das es bei mir nicht klick gemacht hat aber ich
habe die Find Methode ganz falsch verstandenIch danke euch allen für die geduldige hilfe
mFile.Open(Pfadannahme111 + "\\" + Anmeldename111 + "DBank.rm1", CFile::modeRead,NULL );// öffnen des Files while (mFile.ReadString(Daten_lesen.Rechen_Variante)) // ist Dateiende erreicht { int old = 0,pos = 0; // Zählvariablen auf 0 setzen CStringArray arr; // Array neu setzen while(-1 != (pos = Daten_lesen.Rechen_Variante.Find('\'',pos) { arr.Add(Daten_lesen.Rechen_Variante.Mid(old,pos - old)); old = ++pos; //dekrement des Zählers old } if(old < Daten_lesen.Rechen_Variante.GetLength { arr.Add(Daten_lesen.Rechen_Variante.Mid(old,Daten_lesen.Rechen_Variante.GetLength() - old)); } MessageBox(arr[4]); } mFile.Close();
Danke
Vossy