probleme mit einer for schleife



  • wie mache ich das?? ich bin jetzt seit 5.00 uhr dabei das problem zu lösen aber ich schaffe es nicht



  • Einfach nach dieser Dieser Zeile

    Memo1->Lines->Add(PlhIndex+Artikel);
    

    das hier einfügen

    PlhIndex = "";
    

    Das sollte es schon gewesen sein



  • Hmm mach doch unter Table->Next() ein
    PlhIndex = "";



  • habe ich gemacht im ersten datensatz sind die platzhalter vorhanden ab dem zweiten nicht mehr



  • Also ich würde sagen, da is einiges im argen:

    AnsiString Artikel; 
    AnsiString PlhIndex; 
    int iD1=0; 
    int WertIndex=iD1; 
    int tIndex=Artikel.Length(); // ist hier nicht gut -> Länge immer 0
    int rIndex=18-tIndex;        // dito -> ist immer 18
    
    for(int i=0; i<Table1->RecordCount; i++)  // geht meiner Meinung nach besser mit ner while Schleife
    { 
        // hier solltest du iDl auf 0 setzten
        for(WertIndex;iD1<rIndex; ++iD1) 
        { 
            PlhIndex += "#"; 
            Refresh(); // Wozu ???
        } 
        Artikel=DBEdit2->Text;  // das gehört nach oben vor die innere for Schleife
        // hier müsste dann PlhIndex wieder auf leeren String gesetzt werden
        Memo1->Lines->Add(PlhIndex+Artikel); 
        Table1->Next(); 
    }
    

    Ich kenn jetz zwar diese Table nich aber ich versuchs mal:

    AnsiString Artikel = "";
    int tableIndex = 0;
    // Vorher noch die Table1 auf das erste Element setzten - wie gesagt ich kenn die nicht
    while(tableIndex < Table1->RecordCount)
    {
        Artikel = DBEdit2->Text;
        while(Artikel.length() < 18)
        {
            Artikel += "#";
        }
        Memo1->Lines->Add(Artikel);
    }
    

    Probier mal aus 🙂

    basedow



  • es klappt einfach nicht. [basedow] das mit der while Schleife geht auch nicht. Die schleife wird nicht gestoppt. ich glaube ich sehe den wald vor lauter bäumen nicht mehr



  • basedow schrieb:

    Also ich würde sagen, da is einiges im argen:

    ...aber ob eine unendliche Schleife soviel besser ist?

    basedow schrieb:

    AnsiString Artikel = "";
    int tableIndex = 0;
    // Vorher noch die Table1 auf das erste Element setzten - wie gesagt ich kenn die nicht
    while(tableIndex < Table1->RecordCount)
    {
        Artikel = DBEdit2->Text;
        while(Artikel.length() < 18)
        {
            Artikel += "#";
        }
        Memo1->Lines->Add(Artikel);
    }
    

    Probier mal aus 🙂

    ... vielleicht besser nicht. 😉
    Zumindest nicht, ohne tableIndex hochzuzählen. Und ich vermute irgendwo
    sollte noch ein Zugriff auf Table1 erfolgen (in Abhängigkeit von tableIndex),
    um durch die Datensätze zu navigieren.

    Gruß,

    Alexander



  • wenn du überprüfst ob 0<14 ist und das 1000mal ist es immer false wenn du es nicht inkrementierst oder ?

    da war wohl jmd schneller 😞



  • probier mal die Version, die kommt deiner ziemlich nahe

    AnsiString Artikel;  
    AnsiString PlhIndex = "";  
    int rIndex = 0;        
    
    for(int i=0; i<Table1->RecordCount; i++)  
    {  
        //Hier ist die Zuweisung sinnvoller
        Artikel = DBEdit2->Text;  
        rIndex = 18 - Artikel.Length();
    
        //wie von basedow schon beschrieben, den Zähler hier auf 0 setzten.
        for(int iD1 = 0; iD1<rIndex; ++iD1)  
        {  
            PlhIndex += "#";  
            Refresh();
        }  
    
        Memo1->Lines->Add(PlhIndex+Artikel);  
        //Die Zeichen wieder löschen
        PlhIndex = "";
        Table1->Next();  
    }
    

    @basedow

    guck dir deinen Code mal genauer an, du hast ne endlosschleife :p

    Edit: Kommt davon wenn man(n) trödelt 😉



  • naja, wenn du tableIndex innerhalb der Whileschleife nicht hochzählst kann die Schleife ja nicht stoppen.



  • Hoppla 😃
    Stimmt - da muss natürlich noch was rein.

    AnsiString Artikel = ""; 
    int tableIndex = 0; 
    // Vorher noch die Table1 auf das erste Element setzten - wie gesagt ich kenn die nicht 
    while(tableIndex < Table1->RecordCount) 
    { 
        Artikel = DBEdit2->Text; 
        while(Artikel.length() < 18) 
        { 
            Artikel += "#"; 
        } 
        Memo1->Lines->Add(Artikel); 
        tableIndex++;  // NEU
    }
    

    Jetzt sollte sie auch abbrechen.

    Und wie bereits gesagt, du musst vor der äusseren while-Schleife dafür sorgen, dass deine Table1 auf den ersten Datensatz zeigt. Ich kenn nur die Table-Komponente nicht. Da musst du selber noch mal schauen.

    @all: Man wird ja wohl noch ne blöde Abbruchbedingung vergessen dürfen 😃

    basedow



  • Danke PuppetMaster2k es klappt. ich wollt schon auf den balkon steigen und aus dem 3. stock springen.
    super es klappt!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • Habe mir mal erlaubt die while-Schleife etwas abzuändern.
    Warum nicht bewährte Eigenschaften und Methoden der TTable-Komponente
    verwenden.

    AnsiString Artikel = ""; 
    // int tableIndex = 0; wird nicht mehr benötigt
    // Vorher noch die Table1 auf das erste Element setzten - wie gesagt ich kenn die nicht 
    while(!Table1->Eof) 
    { 
        Artikel = DBEdit2->Text; 
        while(Artikel.length() < 18) 
        { 
            Artikel += "#"; 
        } 
        Memo1->Lines->Add(Artikel); 
        // tableIndex++;  // NEU ... und schon wieder alt
        Table1->Next();
    }
    

    So könnte es vielleicht auch gehen?

    Gruß,

    Alexander



  • ich weiss garnicht wie ich euch danken soll 😃 😃 😃



  • alexander ich werde es ausprobieren. danke



  • @ lisa
    nein, nicht von dem balkon springen 🙂
    denn ich glaube es kommen da noch schierigere aufgaben auf dich zu, an denen du noch mehr verzweifelst, falls du weiter prgrammierst... 😉

    also bitte, kein selbstmord.

    Bj



  • @Alexander: DIEEEEB!!! 😃

    basedow



  • nein das würde ich nicht machen. ich möchte mich doch weiter mit solch netten menschen wie euch unterhalten. noch mal danke ihr habt mir sehr geholfen
    🙂 🙂 🙂
    grus lisa

    p.s selbstmord ist keine lösung!! probleme muss man sich stellen und nicht davor weglaufen 👍



  • basedow schrieb:

    @Alexander: DIEEEEB!!! 😃

    basedow

    Das war kein Diebstahl, das war Tuning 🙂

    Gruß,

    Alexander



  • Offtopic-Diskussion abgetrennt.


Anmelden zum Antworten