Systematischer Fehler - Ich find ihn nicht



  • while (i < Format.size())
    	{
    		i++;
    		std::string StrZCom;
    		StrZCom = Format.substr(i-1,1);
    		if (StrZCom == "/")
    		{
    			std::string Command = Format.substr(i-1,2);
    			if (Command == "/L")
    			{
    				Former += "#";
    				L[i] = "A";
    				i++;
    			}
    			else if (Command == "/N")
    			{
    				Former += "§";
    				N[i] = "1";
    				i++;
    			}
    		}
    		else
    		{
    			Former += StrZCom;
    		}
    	}
    	MessageBox::Show(gcnew String(Former.c_str()));
    	bool Existence = false;
    	int Durchgang = 0;
    	std::string wholeName;
    	while (Existence == false)
    	{
    		std::ifstream check;
    		Durchgang++;
    		unsigned int Counter = 0;
    		wholeName = "";
    		while (Counter < Former.size())
    		{
    			Counter++;
    			if (Former.substr(Counter-1,1) == "#")
    			{
    				wholeName += L[Counter];
    			}
    			else if (Former.substr(Counter-1,1) == "§")
    			{
    				wholeName += N[Counter];
    			}
    			else
    			{
    				wholeName += Former.substr(Counter-1,1);
    			}
    		}
    

    Das ist ein kleiner Ausschnitt.
    und er gibt bei der ersten Messagebox aus "## - §§§" also RICHTIG.
    aber Später ist wholeName nur A - 1 statt AA - 111 ??????
    Warum, ich finde diesen Vermaledeiten Denkfehler nicht



  • noch etwas vor dem geposteten Code:

    unsigned int i = 0;
    	std::string Former = "";
    	std::string L[100];
    	std::string N[250];
    


  • Klarer Fall für den Debugger. Spring einfach dahin, wo die Ausgabe noch stimmt und dann geh Schrittweise weiter, bis du merkst, dass sich etwas verändert.

    btw:
    Warum greifst du hier so komisch auf ein Zeichen zu?:

    if (Former.substr(Counter-1,1) == "#")..
    

    Ich würde das eher so machen:

    if (Former[Counter] == "#")..
    


  • Warum greifst du hier so komisch auf ein Zeichen zu?:

    Hab ich schon immer so gemacht, gewohnheit

    EDIT: Ja ich guck nochmal



  • drakon schrieb:

    Ich würde das eher so machen:

    if (Former[Counter] == "#")..
    

    Aber dann auch mit einfachen Anführungszeichen. 😉

    Und für ein einzelnes Zeichen kann man auch char verwenden.

    Tim06TR schrieb:

    Hab ich schon immer so gemacht, gewohnheit

    Dann gewöhn dir das ab, das ist nämlich nicht nur unnötig und irreführend, sondern auch ineffizient.



  • ich hab nun

    if (Former.substr(Counter-1,1) == "#")
    			{
    				wholeName += "A";
    			}
    			else if (Former.substr(Counter-1,1) == "§")
    			{
    				wholeName += "1";
    			}
    

    statt

    if (Former.substr(Counter-1,1) == "#")
                {
                    wholeName += L[Counter];
                }
                else if (Former.substr(Counter-1,1) == "§")
                {
                    wholeName += N[Counter];
                }
    

    jetzt stimmt der rstliche Kram aber nicht mehr
    das ist dann aber eine andere Sache



  • Naja. Das mit dem substring funktioniert ja immer noch nicht. 😉

    Hast du mit dem Debugger da denn überhaupt nix gefunden? - Das sollte ja echt einfach rauszu kriegen sein. Ohne deine Inention zu kennen ist es relativ schwer zu erraten, was dein Code machen soll und was du erwartest..



  • Nexus schrieb:

    Tim06TR schrieb:

    Hab ich schon immer so gemacht, gewohnheit

    Dann gewöhn dir das ab, das ist nämlich nicht nur unnötig und irreführend, sondern auch ineffizient.

    Wahrscheinlich ein alter BASIC-Hase. MID$ hieß die Funktion da, es gab nur Strings, Einzelzeichen waren halt Strings der Länge 1.



  • Wahrscheinlich ein alter BASIC-Hase. MID$ hieß die Funktion da, es gab nur Strings, Einzelzeichen waren halt Strings der Länge 1.

    Nein da hab ich nicht her aber Basic hab ich auch mal geschrieben.
    Und ich dachte das geht nur bei einem char und alle Progs machen das nu so (von mir natürlich)



  • Tim06TR schrieb:

    Wahrscheinlich ein alter BASIC-Hase. MID$ hieß die Funktion da, es gab nur Strings, Einzelzeichen waren halt Strings der Länge 1.

    Nein da hab ich nicht her aber Basic hab ich auch mal geschrieben.
    Und ich dachte das geht nur bei einem char und alle Progs machen das nu so (von mir natürlich)

    Ein Element in einem string ist ein char. 😉



  • Nein das löst das Problem grundsätzlich nicht, wie Windows eine Datei löscht, indem sie sie nur zum überschreiben frei gibt, ne das muss ich irgendwie anders lösen.
    Debugger sagt "String out of range", ja klar weil ## - §§§ nicht auf A - 9 passt
    er soll daraus dann B - 1 machen will er aber nicht, weil er ein Element sucht, das es nicht gibt, wie gesagt eigentlich sollte es ja auch AA - 111 heißen.

    also: AA - 121 danach aber dieser Schritt erfolgt NICHT
    er hört auf bei A - 8 (bzw: AA - 118) kurz vor neun.
    hmmm, warum denk ich mir auch immer so komplizierte S****** aus ???

    EDIT: Hätte er das Schei** eigentlich auch Zensiert, wenn ich das niocht getan hätte ?



  • Tim06TR schrieb:

    Nein das löst das Problem grundsätzlich nicht, wie Windows eine Datei löscht, indem sie sie nur zum überschreiben frei gibt, ne das muss ich irgendwie anders lösen.

    Was hat bitte char als Element von std::string mit Windows oder dem Löschen von Dateien zu tun? Könntest du dich vielleicht einmal so ausdrücken, dass man nicht ständig deine Probleme und Absichten erraten muss?

    Tim06TR schrieb:

    hmmm, warum denk ich mir auch immer so komplizierte S****** aus ???

    In der Tat eine berechtigte Frage. Es würde aber schon viel nützen, wenn du mal sagen könntest, was du erreichen willst (rein logisch, nicht auf konkreten Code bezogen), statt zu versuchen, uns deine gescheiterten Versuche nachvollziehen zu lassen.



  • ähm das mit dem löschen war ein Vergleich.
    http://de.wikipedia.org/wiki/Vergleich_%28Philosophie%29

    Ach ja gute Idee !

    Ich will, dass er nach eine Datei sucht mit dem Namen "AA - 111"
    und wenn sie vorhanden ist soll weitermachen und es soll aus "AA - 111"
    "AA - 112" werden usw.
    Es sei denn sie ist nicht vorhanden dann soll er stoppen.

    Und dieses Schema soll einstellbar sein also ein § steht für eine Zahl und # für einen Buchstaben.
    So und letzteres macht die Probleme, sonst würde ich das nie im Leben so kompliziert gestalten.
    Kann mir da jemand helfen ? Ich wüsste keinen anderen Weg das umzusetzen.

    (btw: er wandelt vorher um /L = # /N = $ um von Zeichen unterscheiden zu können.)



  • 1. Ich hab entschlossen bei 001 anzufangen.
    2. Ich hab mir Übergangsweise eine (App :D, es gibt für alles eine App) Konsolenanwendung geschrieben, dei das nach dem Beispiel macht, nicht Anpassfähig
    3. Gibt es irgendwelche Mittel, die mir das erleichtern könnten, von den ich evtl nicht weiß ???


Log in to reply