Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi leer - leer - leer - wie lernt es mein Rechner? (https://www.delphipraxis.net/209449-leer-leer-leer-wie-lernt-es-mein-rechner.html)

NicoleWagner 8. Dez 2021 09:18

leer - leer - leer - wie lernt es mein Rechner?
 
Es geht darum, dass in einem Text-Feld entweder eine Uhrzeit angegeben wird oder eben keine.
Das Feld ist originär sicher leer, denn ich initialisiere es dezidiert mit ''.
Ist das Feld leer, so will ich die Wertzuweisung "Null" (nicht NULL iSv nil) haben.

Mein Problem ist jetzt, dass ich meinem Rechner nicht beibringen kann, was ein "leeres" Feld ist.
Unten meine Versuche. Diese Bedingungen sind alle drei "true", also der Rechner denkt, der Wert wäre NICHT ungleich Null / 00:00 usw.

Was der Rechner denkt?
Da ist schwierig, doch das Ergebnis ist jedenfalls (ich komme mir vor wie bei Anhalter durch die Galaxis): "12".

So sieht ein Codeschnipsel aus:

if (MaskEdit_ExitZeit.EditText<>'00:00') or (MaskEdit_ExitZeit.EditText<>'00:00:00') or (MaskEdit_ExitZeit.EditText<>'') then
try
dat:=StrToTime(MaskEdit_ExitZeit.EditText); // prüft, ob gültiges Datum
EinTrade_.ExitTime:=dat;
except // nur Zeitanteil aus Datum
EinTrade_.ExitTime:=0;
end;

Meine Frage: Wie bringe ich meinem Rechner bei, was ein leeres Feld ist?! (Delphi XE 3, TMaskEdit).
In der Schleife sind noch logische Fehler, um die geht es nicht. Es geht nur um die Zeile mit dem "if". Sie ist "true", wo sie 3 Gründe hätte, "false" zu sein.

himitsu 8. Dez 2021 09:35

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Delphi-Quellcode:
or (Trim(MaskEdit_ExitZeit.EditText)<>'') then
:?:

oder mal überlegt/nachgesehn, ob dann nicht eventuell 5 oder 8 Leerzeichen drin sind, wenn es leer ist?
Delphi-Quellcode:
or MaskEdit_ExitZeit.EditText.Trim.IsEmpty then


oder
Delphi-Quellcode:
if MatchStr(MaskEdit_ExitZeit.EditText.Trim, ['00:00', '00:00:00', '') then


Und wenn ich solchen Code debuggen sollte, bzw. der mit beim Debuggen über den Weg läuft ... ich würde dich dafür garantiert vierteilen, steinigen und dann dir auch noch den A versohlen.

StrToIrgendwasDef oder TryStrToIrgendwas :!:



Zitat:

Delphi-Quellcode:
// prüft, ob gültiges Datum

Nein, tut es nicht.


Und mal ganz im Ernst ... wenn eh immer 0 rauskommt, sobald Nichts oder Falsches drin steht, dann
Delphi-Quellcode:
dat := StrToTimeDef(MaskEdit_ExitZeit.EditText, 0);
// oder, wenn es nur ums prüfen geht - wenn man sich selber das fehlende IsNullOrWhiteSpace (ohne Parameter) dachgerüstet hat
if not MaskEdit_ExitZeit.EditText.IsNullOrWhiteSpace and TryStrToTime(MaskEdit_ExitZeit.EditText.Trim, Dummy) then
// bzw.
if not MaskEdit_ExitZeit.EditText.Trim.IsEmpty and TryStrToTime(MaskEdit_ExitZeit.EditText.Trim, Dummy) then
//
if (Trim(MaskEdit_ExitZeit.EditText) <> '') and TryStrToTime(Trim(MaskEdit_ExitZeit.EditText), Dummy) then
// ...



So lange es sich nicht um spezielle Fachbegriffe handelt, würde ich aus ästhetischen Gründen von Denglisch abraten.

NicoleWagner 8. Dez 2021 10:02

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Ganz lieben Dank!

So sieht das jetzt bei mir aus:

if MaskEdit_EntryZeit.EditText.IsEmpty
then EinTrade_.EntryTime:=0
else StrToTimeDef(MaskEdit_EntryZeit.EditText, 0);

Dass mein Compiler "MaskEdit_EntryZeit.EditText.IsEmpty" mit zig Fehlermeldungen bedenkt, wäre da nächste Rätsel. Doch egal, er compiliert und es tut, was es soll.

Und ja, das englische Gestammel ist deshalb, weil es Fachtermini sind, die zu übersetzen noch verwirrender wäre, als Denglisch zu stammeln.

himitsu 8. Dez 2021 11:19

AW: leer - leer - leer - wie lernt es mein Rechner?
 
https://docwiki.embarcadero.com/Libr...Helper_Methods :zwinker:
aber daher auch noch die Varianten mit Trim() und <>



Ja, wir haben hier auch zuviel davon, aber "Zeit" hätte ich jetzt nicht als Fachbegriff eingestuft :stupid:

Delphi.Narium 8. Dez 2021 11:37

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Zeit sind ja auch nur die zweiten 50% des Fachbegriffes.

ExitZeit ist der Fachbegriff, ebenso wie z. B. EntryZeit.

https://ninjacademy.traderfox.de/han...ategie/id-2128

bernhard_LA 8. Dez 2021 12:12

AW: leer - leer - leer - wie lernt es mein Rechner?
 
einfachmal die Fehlermeldungen des Compilers ausschneiden und hier posten, dann kann man ggf. mehr dazu sagen :-)

NicoleWagner 8. Dez 2021 14:17

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Danke für die weiteren Antworten.
"trim" trifft die Sache nicht, weil sie gesagt, die Eingabefelder explizit mit '' intialisiert werden.

@bernhard_LA

zu Compiler-Fehlermeldungen, die ich persönlich für Bugs aus Delphi XE 3 halte:

z.B.
'string enthält kein Element namens isEmty'

zur Zeile
... MaskEdit_EntryZeit.EditText.IsEmpty...

(Hinweis für jene, die nicht alle Postings lesen wollen: Das Kernproblem ist bereits gelöst, die Lösung steht oben, danke @himitsu!)

@Delphi.Narium
und: Ja, der Hinweis auf Traderfox hat die Sache recht gut erkannt!

peterbelow 8. Dez 2021 18:56

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Zitat:

Zitat von NicoleWagner (Beitrag 1498823)

zu Compiler-Fehlermeldungen, die ich persönlich für Bugs aus Delphi XE 3 halte:

z.B.
'string enthält kein Element namens isEmty'

zur Zeile
... MaskEdit_EntryZeit.EditText.IsEmpty...

XE3 hatte noch keine TStringhelper-Klasse, wenn mich mein Vergessnis nicht täuscht...

Redeemer 8. Dez 2021 21:03

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Warum eigentlich TMaskEdit und nicht Delphi-Referenz durchsuchenTDateTimePicker?

NicoleWagner 9. Dez 2021 08:42

AW: leer - leer - leer - wie lernt es mein Rechner?
 
@Redeemer, danke für Deine Anregung.
Warum?
Teils aus optischen Gründen. Und teils aus Gründen der Einfachheit. Dieses Feld ist eine Art Notizblock, in das maschinell geschrieben wird und das auch manuell ausgefüllt werde kann. Da ist in diesem Fall ein TEdit kompakter und klarer. Auch optisch, um es von den bereits vorhandenen TDateTimePickern, die ich für andere Zwecke nutze, zu unterscheiden.

Bekomme ich die Compiler-Meldungen irgendwie weg?
Sie bringen nämlich mehrmals am Tag die IDE zum Absturz, dadurch, dass sie einerseits den Arbeitsspeicher massiv zumüllen und andererseits die Programmierhilfe ins Leere greift und die CPU so auslastet, dass ich zum Taksmanager greifen muss. Ich kann da richtig zusehen. Wenn ich merke, sie wird langsam, dann kann ich mit etwas Glück noch schnell meine Arbeit speichern, bevor die Auslastung von 75 auf 99 Prozent hochgeht.:pale:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Seite 1 von 3  1 23      

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