Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Command Line Hinzufügen & Parsen (https://www.delphipraxis.net/1149-command-line-hinzufuegen-parsen.html)

Salomon 25. Okt 2002 10:46


Command Line Hinzufügen & Parsen
 
Hallo,
ich brauche mal wieder eure Hilfe bei einem Commandozeilen-Interpreter.
Ich füge in eine Listbox eine CommandLine ein, die aus einem Datum, einer Uhrzeit und den Schaltzuständen meiner Relaisplatine besteht.

Commandozeile:
Code:
30.10.2002 | 17.24.22 | 00000000 | Beschreibung
Und nun kommen die Probleme für die ich Lösungsansätze brauche ;-)

Hinzufügen neuer Commandozeilen:

1. Wenn eine neue Commandozeile hinzugefügt werden soll, muss geprüft werden, ob das Datum nicht schon überschritten ist.

2. Die Commandozeilen müssen so eingefügt werden, dass sie Chronologisch von oben nach unten abgearbeitet werden können.

Parsen der Commandozeilen in der Listbox:

Hier brauche ich überwiegend Lösungsvorschläge.
Wenn ich mit einem Timer jede Sekunde die gesammte Listbox durchgehe und checke, ob ich etwas ausführen muss, wird das Programm sehr langsam.
Vor allem wenn man eine lange Liste von Aufträgen in der Listbox hat.

Mfg
Salomon

Udontknow 25. Okt 2002 11:49

Hallo!

Also, um die Werte zu sortieren, musst du zunächst mal eine Funktion schreiben, die dir die (Start-?)Zeit einer Kommandozeile ausgibt bzw. berechnet (Hinweis auf die Funktionen WordCount & ExtractWord aus den RXUtils sowie auf die Funktionen StrToDate & StrToTime). Diese Funktion benutzt du dann, um deine Einträge in der Liste zu sortieren.
Sobald du deine Liste sortiert vorliegen hast (Sortieralgorithmen findest du ebenfalls in diesem Forum), musst du ja sowieso nur noch den ersten Eintrag in der Liste prüfen, alle anderen kommen ja später dran.

Cu,
Udontknow

wwerner 25. Okt 2002 12:06

Noch ein Tip:
- Suche den nächsten Schaltauftrag
- Berechne die Zeitdifferrenz zur aktuellen Zeit
- Starte einen Timer mit der Zeitdifferenz
- Wenn das Timerereignis eintritt Auftrag ausführen und das ganze von vorne

Gruß

WW

Salomon 25. Okt 2002 12:21

Schonmal ein Danke für die Vorschläge.

Mit dem Sortieren komme ich noch nicht klar, kann man den die TDateTime Daten mit den "<" u. ">" Operatoren vergleichen?

Und wie greife ich auf den Text eines Items zu? So geht es irgendwie nicht:
Code:
  for i :=1 to auftragslist.Count -1 do
   begin
    if auftragslist.Items[i].text = (copy (CmdLine,1,21)) then
      showmessage ('schon vorhanden');
   end;
Mfg Salomon

Christian Seehase 25. Okt 2002 12:44

Moin Salomon,

die Items einer Listbox sind vom Typ TStrings, ergo lass' mal das .Text weg (was Dir der Compiler wohl auch vorgeschlagen haben dürfe, wenn auch nicht so direkt ;-))

Ausserdem muss die Schleife bei 0 beginnen (der Endwert stimmt ja).

Salomon 25. Okt 2002 12:44

OK, die <> Opertoren kann ich schonmal zum Vergleich der Daten nutzten.

Aber wie ich auf den Text eines Items zugreife habe ich noch nicht raus, dabei sollte das doch so einfach sein...

Salomon 25. Okt 2002 13:23

Die Abfragen ob das Datum gültig ist, und ob es den Eintrag schon gibt habe ich nun fertig, nun kann es ans sortieren gehen.

In dem Sortier Algorithmen Tutorial gibt es ja jede Menge Auswahl, welchen Algorithmus würdet ihr mir für meine Aufgabe empfehlen?

Ich muss in den ListItems ja jedesmal zwei Werte (Datum, Zeit)vergleichen.

Mfg Salomon

wwerner 25. Okt 2002 13:35

Wandele dein Datum und die Zeit in ein TDateTime um, dann hast du nur noch einen Wert zu vergleichen. Und dann gibt es in TStinglist die Funktion sort. Bitte mal in der Hilfe anschauen

Gruß

WW


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz