vergleich zweier strings und neuer string zusammenstellen
-
while(in != neu || !out.eof()) { out.getline(buff,250) in.Format("%s", buff); //out.read(buff,1); if(in == neu) { MessageBox("in", neu); neu.Empty(); MessageBox("if", neu); } } out.close();
hi das ist der code der mir einwenig kopf zerbrechen bereitet...
und zwar soll solange zwei strings ungleich sind oder das ende des files erreicht wird die while-anweisung ausgeführt werden.
der eingelesen char wird zu string gewandelt damit der vergleich mit dem string auch funzt.
und dann wenn die strings gleich sind, soll neu gelöscht werden.so das war der erste teil...
dann kommt erzurück in eine andere funktion, dort soll aus dem zurückgegebenen neu und dem leeren string abc, ein string gemacht werden:
,,,, abc.Format("%s %s",abc, neu); // query2 enthält string ohne stoppwort neu.Empty(); // neu leeren
wie man da schon sieht soll, wenn das neu nicht im vergleich gelöscht worden ist soll es danach gelösch twerden.
So die Probleme liegen nun da, dass die while anweisung öfter wie nötig ausgeführt wird, ebenfalls die if.
und in abc wird ncihts geschrieben....
Ich hoffe es war verständlich, wie ich mein Problem euch nahe gebracht habe.
...Danke, schon jetzt für die Hilfe
-
Vielleicht liegt es daran, dass du in Format dein abc schon drin hast. Versuchs mal mit einer neuen Variable
CString str; str.Format("%s %s", abc, neu); // statt abc.Format("%s %s", abc...);
Und wo genau schreibst du denn CString::Format hin... ?
Gruß
:: NoName ::
-
ja
aber durch das ich die Variable ebenfalls in einer while schleife erstelle, tu ich öfter den string verlängern, und damit der erste teil der ja schon eingetragen wurde nicht verloren geht, dachte ich schreibe ich es so das die Variable abc = abc + neu ist,
aber das könnte ich doch auch so machen
abc += abc + neu
oder???
würde aber auf das gleich raus laufen oder??
-
Ja...
Gruß
:: NoName ::
-
ja ich habe es eben auch probiert gleiche sch***
wie könnte ich das sonst noch machen vielleicht noch ne dritte Variable an die ich dann immer den inhalt von abc übergebe...
Das ist es aber auch ncith wirklich oder:xmas2:
-
Dann machst du irgendwas falsch...
Wo genau schreibst du denn das Format hin?
Hast du es noch in der while Schleife ?Gruß
:: NoName ::
-
.... if(query.Left(1) == _T(' ')) { while(query.Left(1) == _T(' ')) { query.TrimLeft(); MessageBox(query,"4");// } MessageBox("aus if","5");// } xyz(); query2.Format("%s %s",query2, neu); ....
das Format steht in der ersten while anweisung.
die andere zuerst gepostete wird erst nach dem aufruf von xyz bearbeitet.
-
Es steht wahrscheinlich nichts in der Variable weil du das Format in xyz() reinschreiben musst...
while(in != neu || !out.eof()) { out.getline(buff,250) in.Format("%s", buff); //out.read(buff,1); if(in == neu) { MessageBox("in", neu); neu.Empty(); MessageBox("if", neu); } query2.Format("%s %s",query2, neu); } out.close();
Und dann kannst du in einer anderen Funktion mit query2 weiterarbeiten
Gruß
:: NoName ::
-
so würde es mir aber bei jedem schleifen durchlauf neu in die variable schreiben es soll aber nur einmal drin stehen...
-
Dann schreibst du eben das Format außerhalb der Schleife...
Gruß
:: NoName ::
-
kann ich dir irgendwie (ausser über das forum) meinen code mal zukommen lassen. Nur die beiden fkt.
weil in den aktes am laufenden band, und ich habe den eindruck das du mir ganz gut helfen könntest
-
Hi,
ich denke das es an den schleifen köpfen vielleicht hängt...
z.B.:while(in != neu || !out.eof())
oder:
while (query.GetLength() > 0)
ich sehe da zwar nicht wirklich ein problem aber irgendwie habe ich das gefühl das die schleifen ncith richtig durchgearbeitet werden bzw. beendet werde (geht nur mit Strg + Alt +Entf...)
'Ne möglich das ich dir den code schicke (von den zwei fkt.) gibt es nicht, oder.
Muss ihn hier wenn komplett posten ( was ich eigentlich nicht will),oder ??
-
Wird denn keine MessageBox ausgegeben wenn er durch diese Schleife läuft ?
while(in != neu || !out.eof())
Von mir aus kannst du mir den Code schicken, schick mir einfach ne' Mail...
Gruß
:: NoName ::
-
Hallo :xmas2:
so ich habe die beiden Anweisungen mal schritt für schritt zusammen geschustert:
Fkt 1:
CString alpha= ""; CString beta; while(query.GetLength() >0) { int wert = query.Find(' '); teilstringlinks = query.Left(wert); query = query.Right(query.GetLength() - wert); while(query.Left(1) == _T(' ')) { query.TrimLeft(); } StoppwortEingabe(); beta.Format("%s %s",alpha , teilstringlinks ); alpha = beta; }
In dieser Fkt sind keine Probleme String wird zusammen gesetzt und alles.
Fkt 2 (StoppwortEingabe())
CString stoppwortliste = "...\\stoppwortliste.txt"; CString in; ifstream out(stoppwortliste,ios::in); char buff[100]; while(in != teilstringlinks || !out.eof()) { out.getline(buff,250); in.Format("%s", buff); if(in ==teilstringlinks) { teilstringlinks.Empty(); } } out.close();
So diese Funktion läuft ohne Probleme durch, solange ein Stoppwort gefunden wird....
Wenn der String kein Stoppwort ist, hängt sich die Anwendung auf und ist nur noch per 'affengriff' zu beenden.Warum??
gut frage, weiss einer eine antwort???