![]() |
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:
Und nun kommen die Probleme für die ich Lösungsansätze brauche ;-)
30.10.2002 | 17.24.22 | 00000000 | Beschreibung
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 |
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 |
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 |
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:
Mfg Salomon
for i :=1 to auftragslist.Count -1 do
begin if auftragslist.Items[i].text = (copy (CmdLine,1,21)) then showmessage ('schon vorhanden'); end; |
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). |
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... |
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 |
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 23:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz