Überprüfen einer Eingabe (Datum)



  • Hallo,

    habe eine ListBox, die ich mit dem OnClick-Ereignis auslese. Dort steht ein Datum, eine Uhrzeit und eine Bezeichnung drin.
    Sobald auf die ListBox auf das bestimmte Datum geklickt wird, wird dieses in ein Edit geschrieben.
    Das ganze wird aufgeteilt, das Datum wird in ein Edit geschrieben, die Zeit in ein anderes und die Bezeichnung in ein drittes.
    Das klappt soweit auch ganz gut, nur muss ich mich drauf verlassen, dass das Datum immer dd.mm.yyyy eingegeben wird und die Zeit immer hh🇲🇲ss.
    Sollte nun einmal jemand das datum nur im format d.m.yy (z.B. 9.1.07) eingeben, geht das mit der aufteilung so nicht auf, da ich es folgendermaßen geregelt habe:

    for(c = 0; c <= ListBox1->Items->Count; c++){
          if(ListBox1->ItemIndex == c){
             cool = ListBox1->Items->Strings[c];
             d = cool[1];
             dd = cool[2];
             m = cool[4];
             mm = cool[5];
             y = cool[7];
             yy = cool[8];
             yyy = cool[9];
             yyyy = cool[10];
             Edit1->Text = d + dd + "." + m + mm + "." + y + yy + yyy + yyyy;
             z = c;
             h = cool[12];
             hh = cool[13];
             mins1 = cool[15];
             mins2 = cool[16];
             sek1 = cool[18];
             sek2 = cool[19];
             Edit3->Text = h + hh + ":" + mins1 + mins2;
          }
          int Laenge = cool.Length();
          Edit2->Text = "";
          for(int a = 22; a <= Laenge; a++){
             Edit2->Text = Edit2->Text + cool[a];
          }
       }
    

    Nun möchte ich, dass vorher übrprüft wird, ob das Datum d.m.yy oder dd.mm.yy oder d.mm.yy oder wie auch immer eingegeben wurde und dann die aufteilung dementsprechend vornimmt, kann mir jemand sagen wie man an sowas am sinnvollsten rangeht?

    Danke schonmal

    Gruß
    MWJK



  • Ich würde StrToDateTime() verwenden.

    Grüße Joe_M.



  • Hmm... klingt gut, aber dort muss ich doch auch etwas reinschreiben, und wenn ich da zum Beispiel

    StringToDate(ListBox1->Items->Strings[c]);
    

    nehme, dann schreibt der doch alles darein und will alles in nen Datum umwandeln, oder?

    Gruß
    MWJK



  • Hallo

    ja, StrToDateTime will den ganzen Parameter umwandeln, also müßte erstmal mit den AnsiString-Funktionen nach dem Ende des Datums gesucht werden. Normalerweise sollte ein Leerzeichen eom passender Token sein.

    bis bald
    akari



  • Hmm, das klingt logisch 😉
    Kannst du mir noch verraten, wie ich bei AnsiString nach einem leerzeichen suche? Also, ich hätte ja die Möglichkeit das ganze mit einer for-schleife und einer if-abfrage zu machen, ich zeig hier gerade mal wie:

    AnsiString Datum;
    for(int a = 1; a <= Datum.Length(); a++){
       if(Datum[a] != ""){
          Edit1->Text = Edit1->Text + Datum[a]);
       }
    }
    

    liege ich da richtig?

    habe es noch nicht ausprobiert, ist nur gerade so ohne compiler von mir hier geschrieben aber ich habe jetzt so keinen Fehler im Auge - dafür bin ich aber auch schon nicht mehr der wacheste.

    Könnt ja mal ein Feedback geben, ob man das so machen kann, oder ob es eine feinere möglichkeit gibt.

    Danke schonmal.

    Gruß
    MWJK



  • schau mal in der BCB-Hilfe bei den AnsiString-methoden nach Pos, wenn du den BCB6 hast kannst du dir auch mal die Funktionen Delimiter und DelimitedText von TStringList ansehen

    [Edit] mit

    if(Datum[a] != "")
    

    vergleichst du übrigends nicht mit einem Leerzeichen, sondern mit einem Leerstring, um ein Leerzeichen zu finden mußt du auch ein schreiben 😉

    if(Datum[a] != " ")
    


  • Okay, danke, das mit dem Leerstring wäre mir erst beim kompilieren aufgefallen 😉

    Ich arbeite mit Borland CBuilder 5 und auch mit dem CBuilder6.

    Die Funktionen werd ich mir sicher mal ansehen, Danke!

    Gruß
    MWJK


Anmelden zum Antworten