gefüllten Vector leeren mittels .clear()



  • Hallo zusammen,

    mein kleines Programm liest derzeit eine TXT-Datei ein und soll bestimmte
    Zeilen wiederholt ausgeben:

    vector<string> lines;
    
    		if (( z = strstr( Zeile, " START:" )) != NULL)
    		{	if ((z = strstr( Zeile, " ENDE:" )) != NULL)
    			{}else{	zaehler=1;
    
    			      }
    		}
    		if (( z = strstr( Zeile, " ENDE:" )) != NULL)
    		{	if ((z = strstr( Zeile, " START:" )) != NULL)
    			{}else{	zaehler=0;
    					}
    		}
    		if (zaehler==1 )
    		{	if (( z = strstr( Zeile, " START:" )) != NULL)
    			{}else{ lines.push_back(Zeile); 
    					hochzaehler++;}
    		}
    		if( strstr(Zeile,"WIEDERHOLE") && strstr(Zeile," START"))
    		{	
    			for(i=0; i < hochzaehler; i++)
    			{fprintf(fpOut,"%s", lines.at(i).c_str());}	
    
    		}
    

    Die funktioniert soweit, sprich aus diesem Input:

    1
    2
    3
    START:
    4
    5
    6
    ENDE:
    7
    8
    WIEDERHOLE START
    9
    10
    11

    kommt folgender Output:

    1
    2
    3
    START:
    4
    5
    6
    ENDE:
    7
    8
    WIEDERHOLE START
    4
    5
    6
    9
    10
    11

    Bei einem zweiten Vorkommen von "START:" und "ENDE:", hängt er jedoch nur die Zeilen an den Vektor an.

    Wollte ihn jetzt wie folgt löschen:

    vector<string> lines;
    
    		if (( z = strstr( Zeile, " START:" )) != NULL)
    		{	if ((z = strstr( Zeile, " ENDE:" )) != NULL)
    			{}else{	zaehler=1;
    					lines.clear();			//Löschen der gespeicherten Elemente
    			      }
    		}
    		if (( z = strstr( Zeile, " ENDE:" )) != NULL)
    		{	if ((z = strstr( Zeile, " START:" )) != NULL)
    			{}else{	zaehler=0;
    					}
    		}
    		if (zaehler==1 )
    		{	if (( z = strstr( Zeile, " START:" )) != NULL)
    			{}else{ lines.push_back(Zeile); 
    					hochzaehler++;}
    		}
    		if( strstr(Zeile,"WIEDERHOLE") && strstr(Zeile," START"))
    		{	
    			for(i=0; i < hochzaehler; i++)
    			{fprintf(fpOut,"%s", lines.at(i).c_str());}	
    
    		}
    

    nur kommt es dabei beim Ausführen zur abnormal program termination...Was mache ich falsch ??? bei lines.empty() hängt er weiter lustig die Zeilen
    an den Vektor an.

    Theodor



  • Wo bleibt denn der Debugger stehen?
    Aus

    for(i=0; i < hochzaehler; i++)
    

    würde ich als Erstes mal

    for(i=0; i < lines.size(); i++)
    

    machen (bzw. std::min(lines.size(), hochzaehler ).



  • ...



  • Man bist du (Threadersteller) pervers. Schau dir mal den <fstream> Header an.



  • sry...war leider erkrankt...

    @314159265358979 --> warum bin ich "pervers" ? Keine ahnung was du mit dem fstream-Header meinst...

    @yahendrik --> keine Ahnung, das Programm stürzt direkt ab. Ich weiß auch nicht wie ich Programme mit Anhang (z.B. "C:\test.exe c:\514.txt")debugge...



  • Unser junger Freund pi hat ziemlich genaue Vorstellungen davon, wie ein C++ Programm auszusehen hat. Leider vergreift es sich hin und wieder bei der Wortwahl, wenn er ein C++ Programm sieht, das seinen Vorstellungen nicht entspricht.

    Ich weiß leider nicht, unter welchem OS und mit welcher IDE du entwickelst, aber man kann ein Programm im Debug-Modus laufen lassen. Im Debug Modus kannst du Brechpunkte auf Codezeilen setzen, sobald das Programm diese Codezeile erreicht bleibt es stehen und du kannst dir z.B. den Inhalt der Variablen anschauen.
    Wenn man C++ programmiert muss man den Umgang mit einem Debugger beherrschen, am besten du guckst dir die Hilfethemen zum Debugger deiner IDE an.



  • DocShoe schrieb:

    Unser junger Freund pi hat ziemlich genaue Vorstellungen davon, wie ein C++ Programm auszusehen hat. Leider vergreift es sich hin und wieder bei der Wortwahl, wenn er ein C++ Programm sieht, das seinen Vorstellungen nicht entspricht.

    word ! 👍

    DocShoe schrieb:

    Ich weiß leider nicht, unter welchem OS und mit welcher IDE du entwickelst, aber man kann ein Programm im Debug-Modus laufen lassen. Im Debug Modus kannst du Brechpunkte auf Codezeilen setzen, sobald das Programm diese Codezeile erreicht bleibt es stehen und du kannst dir z.B. den Inhalt der Variablen anschauen.
    Wenn man C++ programmiert muss man den Umgang mit einem Debugger beherrschen, am besten du guckst dir die Hilfethemen zum Debugger deiner IDE an.

    wie zum beispiel microsoft visual c++ oder codeblocks


  • Mod

    TheodorN. schrieb:

    @314159265358979 --> warum bin ich "pervers" ? Keine ahnung was du mit dem fstream-Header meinst...

    Er meint, dass du entweder Masochist bist oder keine Ahnung von der C++-Standardbibliothek hast. Deine Antwort, dass du von fstream keine Ahnung hast, beantwortet, welches von beiden der Fall ist. Und das ist schlecht, ganz schlecht, denn die c++-Standardbibliothek sollte man kennen, wenn man C++ macht 😉 . Die Chancen stehen auch gut, dass dein Fehler etwas damit zu tun hat, da die C-Bibliothek (die du benutzt) nicht gerade anfängerfreundlich ist und Fehler mit eben solchen Abstürzen wie diesem quittiert.

    @yahendrik --> keine Ahnung, das Programm stürzt direkt ab. Ich weiß auch nicht wie ich Programme mit Anhang (z.B. "C:\test.exe c:\514.txt")debugge...

    Dann finde es heraus! Zu wissen wie man einen Debugger benutzt ist eine der wichtigsten Grundtechniken beim Programmieren.



  • Danke zusammen, werde jetzt erst mal "richtig" debuggen lernen um zu sehen wo das Problem ist...


Anmelden zum Antworten