Was ist hier dran falsch?



  • Button1->Enabled=false;
    OpenDialog1->Execute();
    datei->LoadFromFile(OpenDialog1->FileName);
    for(int zeile=0; zeile < datei->Count; zeile++)
     {
     Application->ProcessMessages();
     if((datei->Strings[zeile].Length() != 3)||(datei->Strings[zeile].Length() != 4))
      {
      datei->Strings[zeile]="";
      }
     }
    datei->SaveToFile(OpenDialog1->FileName);
    Button1->Enabled=true;
    

    Kann mir eine hilfreiche Seele sagen was daran falsch ist? Es sollen alle Zeilen die nicht 3 oder 4 Buchstaben haben leer gemacht werden. Aber es sind am Ende alle zeilen weg auch wenn 3 bzw 4 Buchstaben-Zeilen vorhanden sind



  • überlege mal dein if-Bedingung.
    bei welcher Stringlänge kommt false?

    zu empfehlen währe noch:

    if(OpenDialog1->Execute())
        datei->LoadFromFile(OpenDialog1->FileName);
    


  • BigNeal schrieb:

    überlege mal dein if-Bedingung.
    bei welcher Stringlänge kommt false?

    Wie meinst du das? die if-Bedingung sagt doch Wenn die länge von datei->Strings[zeile] nicht gleich ist dann datei->Strings[zeile]="";
    oder verstehe ich das falsch

    BigNeal schrieb:

    zu empfehlen währe noch:

    if(OpenDialog1->Execute())
        datei->LoadFromFile(OpenDialog1->FileName);
    

    hab ich



  • Die Bedingung ist immer wahr, deshalb wird immer gelöscht.

    if(!(datei->Strings[zeile].Length() == 3 || datei->Strings[zeile].Length() == 4))
    


  • Holst schrieb:

    BigNeal schrieb:

    überlege mal dein if-Bedingung.
    bei welcher Stringlänge kommt false?

    Wie meinst du das? die if-Bedingung sagt doch Wenn die länge von datei->Strings[zeile] nicht gleich 3 ist dann datei->Strings[zeile]="";
    oder verstehe ich das falsch

    edit: siehe dickgedruckte



  • AnsiString asString = "irgend ne länge"; 
    if((asString .Length() != 3) || (asString .Length() != 4))
    {
      asString ="";
    }
    

    Ich habe kurz deinenCode von ein paar unleserlichen sachen befreit.
    jetzt erklährmir doch mal, was deine If-Abfrage genau bewirken soll.
    und in welchem fall der Code "asString = ""; " nicht ausgeführt wird.



  • Wenn Du schreibst:
    if( ..Length()!=3 || ...Length!=4)
    dann ist !=4 wahr bei Länge drei und !=3 wahr bei Länge 4
    besser: if( ..Length()<3 && ...Length>4)

    Das sollte dann schon klappen



  • ok habs verstanden wieso es nicht geht ^^

    danke



  • Hat eigentlich jemand mein Posting da oben gesehen?!? Da stand die Antwort doch schon...

    Joe_M.


Anmelden zum Antworten