2 x TStringList???



  • Mahlzeit,

    stehe hier wiedermal im Wald und brauche eure Hilfe.
    Folgendes Problem:

    2 TStringList, s1List und s2List.

    Soll: In einer Funktion wird ein Textfile eingelesen. Nach bestimmten Kriterien soll das File nun zerlegt und anschließend neu erstellt werden. Kein Thema eigentlich, wäre da nicht ... Genau hier hängts.

    Die StringLists werden erstellt. Wo ist egal, habe alles versucht. Header, im .cpp global, in der Funktion, ...
    Dann wird s2List abhängig von versch. Kriterien gefüllt. Mehrere Durchläufe, Anzahl variiert. Am Ende eines jeden Durchlaufs soll der Text 'zusammengeführt' werden.
    Plan: s1List ist das 'neue' Textfile, wird nach jedem Lauf durch den Inhalt von s2List ergänzt.

    Doch was ich auch mache, nach jedem Lauf ist s1List gleich s2List.

    mal etwas Code:

    TStringList*	s1List = new TStringList;
    	TStringList*	s2List = new TStringList;
    
    	for( int i = 0; i < file->Count; i++ )
    	{
    		s2List->Clear();
    
    		// hier wird die StringList gefüllt
    
    		s2List->Add( dspOut );
    
    		if( lauf == 1 )
    			tmp1ExportList = tmp2ExportList; // hier stimmts noch
    		else
    		{// ab hier ist dann s1List == s2List :( 
    			for( int l = 0; l < tmp2ExportList->Count; l++ )
    			{
    				if( l > tmp1ExportList->Count )
    					tmp1ExportList->Add( tmp2ExportList->Strings[l] );
    				else
    					tmp1ExportList->Strings[l] += tmp2ExportList->Strings[l];
    			}
    		}
    		lauf++;
    	}
    

    nur mal so ganz grob.

    wem fällt hier was auf? Mir nämlich nichts mehr 😕

    grüssle 🙂



  • Hallo

    Du kopierst mit

    tmp1ExportList = tmp2ExportList;
    

    nicht den Inhalt von A nach B, sondern die Adresse der Instanz A in den Zeiger von B. Das ist ein großer Unterschied, beide Zeiger zeigen danach auf die gleiche Instanz, die zweite Instanz ist "verlorengegangen". Den Effekt sieht du ja selber.

    Den Inhalt kopierst du stattdessen einfach mit

    tmp1ExportList->Text = tmp2ExportList->Text;
    

    bis bald
    akari



  • 😮 manchmal sollte man wirklich mal 5 Minuten vom Rechner weg. Bringt nix!

    Danke für den Schubser, akari.

    und folgendes:

    else
            tmp1ExportList->Strings[l] += tmp2ExportList->Strings[l];
    

    funktioniert natürlich auch nicht.

    So gehts dann:

    else
        {
            String str = s1List->Strings[l] + s2List->Strings[l];
            s1List->Strings[l] = str;
        }
    

    5 Minuten

    grüssle 🙂


Log in to reply