hilfe mit left



  • Hi,

    nochmal gibt es eine möglichkeit diese whileschleife zuerstellen???
    ich such den passenden befehl und finde diesen nciht..
    hat das schon mal einer gemacht oder weiss wie???

    wäre wirklich sehr nett.



  • CString strText = "Hallo, wie gehts";
    	for(int i = 0; i != strText.GetLength(); i++)
    	{
    		char szTrace = strText.GetAt(i);
    		if(strText.GetAt(i) == ' ')
    		{
    			break;
    		}
    	}
    
    	int nIndex = 0;
    	CString szTrace;
    	do
    	{
    		szTrace = strText.GetAt(nIndex);
    		nIndex++;
    	}
    	while(szTrace != ' ');
    


  • Nanu, deine beiden Schleifen machen doch so ziemlich das selbe. Und sie brechen beide nach dem ersten Leerzeichen ab und suchen nicht bis zum String-Ende.

    Ich würde das eher so probieren:
    - zwei integer-Variablen erstellen, z.B. nStart und nEnde
    - nStart setzt du auf 0 und nEnde weist du den Rückgabewert von der Find-Funktion zu
    - in der Bedingung der while-Schleife prüfst du jetzt ab, ob nEnde ungleich -1 ist
    in der while-Schleife:
    - den Substring mit Mid(nStart, nEnde) auslesen (oder sonstwas machen)
    - nStart den Wert nEnde + 1 zuweisen
    - nEnde wieder den Rückgabewert von Find zuweisen, allerdings erst nach dem gefundenen Zeichen mit der Suche beginnen: SuchString.Find("X", nStart);
    Nach der Schleife den hintersten Substring auch noch auslesen (falls benötigt).
    So ungefähr, habe es nicht getestet...
    :xmas2:



  • int wert = 0;
    CString test = "Hallo Du!";
    
    wert = test.Find(' ');
    
    CString ErgebnisString = test.Left(wert-1);
    

    Sollte funktionieren. habe es nicht getestet.

    Gruß
    Günni 😉

    OH SORRY!!! HABE GERADE ERST GELESEN, DASS DU DEN REST NOCH VERARBEIETN MÖCHTEST. GLEICH....



  • int wert = 0;
    CString test = "Hallo Du!";
    CString ErgebnisString = "";
    
    while (test.GetLength() > 0)
    {
        wert = test.Find(' ');
    
        ErgebnisString = test.Left(wert-1);
        test = test.Right(test.GetLength() - wert);
        test.TrimLeft();
    }
    

    Schau mal ob's hinhaut. Wie gesagt: nicht getestet....
    Und den Ergebnisstring musst Du halt immer irgendwo hinpacken.

    Drück mal im Compiler die F1 Taste. Dann kommst Du in die (hoffentlich installierte) MSDN. Dort gibst Du unter INDEX "CString" erin und wählst dann links "CString Methoden" (bei VC6.0 heisst es "Class Members"). Dann bekommst DU alles was man mit CStrings machen kann.
    MSDN is cool!!!! 😉

    Gruß
    Günni



  • hey,

    danke das funktioniert prima.

    Jetz nochmal etwas wie beche ich diese schleife ab sprich auch die while schleife wenn die if true ist???

    while(!out.eof())
    
    	{	
    		out.getline(buff,250);// zeilenweise einlesen
    
    		in.Format("%s", buff); // char wandeln in cstring
    
    		if(neu == in)
    		{
    			neu.Empty();
    		MessageBox("if");
    
    		}
    
    	}
    


  • Einfach so!

    if(neu == true)
    {
       ....
       break;
    }
    

    oder so:

    if(neu)
    {
       ...
       break;
    }
    

    ist beides gleich



  • hi,

    in neu und in stehen zwei strings und nur wenn diese gleich sind soll er die if-anweisung ausführen und danach aus beiden anweisungen (while + if() herausgehen.



  • Sorry mein Fehler

    if(neu == in)
    {
       ....
       break;
    }
    

    So ist es aber OK 😉



  • hi nochmal

    das vergleichen geht jetzt aber eins hab ich noch

    while (query.GetLength() >= 0) // solang bis das ende des strings erreicht ist
    	{ 
    
           wert = query.Find(' '); 
           neu = query.Left(wert);  //       
    	   query = query.Right(query.GetLength() - wert); 
           	   stoppwortquery(); 		
    	   query2.Format("%s%s",query2, neu); 	   
                neu.Empty(); 	 
    
    	}
    

    das funzt ja wunderbar das er mir den linken teil des Stringes weiter bearbeitet, aber halt nur einmal....
    Der Rest von dem String lässt er einfach weg, statt dessen hängt er irgendwie in einer endlos schleife fest.....
    Ich dachte das die while-anweisung solange durchlaufen wird bis die länge von query gleich 0 ist.
    aber diese wird nie 0 und den rest des strings bearbeitet er auch nicht.
    Hat noch einer ne kleine hilfestellung für mich???



  • Ich glaube das was Du brauchst ist CStringParser.
    Googel mal danach, oder schau mal bei codeprject.com nach



  • Sorry,
    sollte codeproject.com sein.



  • geht das nciht anders??

    ich meine der rest des Stringes steht ja nun in query noch drin....
    er müsste doch nur reagieren und diesen auch verarbeiten.



  • Hallo

    kann es sein das das gefundene leerzeichen (am anfang des codes) noch am string hängt??? Das heisst das er wenn er wieder durch die anweisung laufen will er immer und immer das leerzeichen finden tut???
    So das ich es erst löschen müsste bevor die anweisung von vorne beginnt??

    Ich habe jetzt schon verschiedene verscuhe gestartet wie ich es löschen könnte, aber das ergebins war immer das ich ein zeichen (wie ein rechteck) eingelesen bekomme:

    query = query.Delete(query.Find(wert));
    

    oder:

    query = query.ReverseFind(' ', NULL);
    

    Aber vom ansatz her könnte es doch so sein oder??
    und löschen müsste ich es doch auch so können oder??

    Ach ja ich habe es ganz am schluss der vorhin angegebenen while- anweisung geschrieben.



  • :xmas1:

    HI

    helfen kann mir keiner???

    wäre schon nett, weil ich probiere aus und es geht nix.....

    danke

    :xmas2:


Anmelden zum Antworten