Delphi-PRAXiS

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:

KodeZwerg 9. Dez 2021 16:59

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Hallo, ich würde wahrscheinlich etwas anders an die Sache rangehen, ohne Code Beispiel, nur Theorie:

Variable aus Feld holen
Variable versuchen in einen Zeitwert zu wandeln
im "Except" Bereich mit der Variable etwas machen was passieren soll wenn Umwandlung fehl schlägt (leeres Feld, Quatsch im Feld etc...)

Nur so ein Gedanke um diesen Prüfungen aus dem weg zu gehen.
Wenn das durch ist würde ich auf Zeitwert 0:00:00.0000 prüfen, ich las da irgendwas bei dir ;-)

NicoleWagner 9. Dez 2021 18:55

AW: leer - leer - leer - wie lernt es mein Rechner?
 
danke für Deine Anwort. Weil Du die ganze Thread offenbar nicht gelesen hast, ist sie trotzdem nicht so prickelnd.

Bbommel 10. Dez 2021 10:06

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Dann nochmal zu deinem Ausgangsproblem, weil ja die Lösung mit ".IsEmpty" für dich nur begrenzt tauglich ist, wenn sie dein XE3 zum Absturz bringt. Offenbar war das mit den StringHelpern dann in der XE3 noch nicht ganz ausgereift. :-)

Dein Problem war ja das hier:

Delphi-Quellcode:
if (MaskEdit_ExitZeit.EditText<>'00:00') or (MaskEdit_ExitZeit.EditText<>'00:00:00') or (MaskEdit_ExitZeit.EditText<>'') then


Kann es sein, dass du hier einfach einen Logikfehler hast? Du prüfst, ob etwas "ungleich A oder ungleich B oder ungleich C" ist. Das ist aber immer "true". Denn wenn der Wert beispielsweise A ist, dann muss er in dem Moment ungleich B und auch C sein.

Konkret: wenn dein MaskEdiz_ExitZeit.EditText='' ist (also wirklich leer), dann wäre deine dritte Bedingung zwar faöse, aber die beiden anderen ja true, weil eben nicht "00:00" im EditText steht. Durch das "or" ist die Bedingung insgesamt true.

Fazit also: meinst du vielleicht einfach and statt or?

Sherlock 10. Dez 2021 10:54

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Dein Problem mit den "Compilermeldungen" lässt sich lösen, indem Du das einfach abschaltest (ist sowieso ab Codekomplexität knapp oberhalb von "Hello World" buggy):
Tools - Optionen - Editor Optionen - Code Insight -> Error Insight deaktivieren.

Macht die IDE auch insgesamt etwas schneller und stabiler.

Es ist übrigens nicht der Compiler,der da etwas falsch meldet, sondern ein Compiler, der nicht genau weiß, auf welchem Stand Delphi eigentlich ist.

Sherlock

TurboMagic 10. Dez 2021 17:57

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Naja, wäre sie auf einem Delphi 10.4+ wäre ErrorInsight auch so gut wie fehlerfrei. Dort wird nämlich per LSP der richtige C
ompiler dafür benutzt und das funktioniert zumindest für ErrorInsight jetzt echt gut. Spätestens ab 11.0, da wurde noch ein
Bugbeseitigt der beim Wechsel des Editor Tabs das ErrorInsight nicht immer aktualisierte.

NicoleWagner 13. Dez 2021 19:38

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Danke Sherlock für den Vorschlag zu Error Insight.
Leider finde ich diese Option nicht.
Die Programmierhilfe Autovervollständigen benutze ich dabei so intensiv, dsss ich ohne sie nicht mehr arbeiten kann.
Die Abschalten käme für mich nicht in Frage.

So sieht das bei mir aus:
https://abload.de/img/delphoptionenlhjwf.png

haentschman 14. Dez 2021 08:33

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Moin...:P
Zitat:

So sieht das bei mir aus:
...warum hängst du Bilder nicht hier an? Wenn das "Portal" abgeschalten wird...sind auch die Threads nicht mehr aussagekräftig. :zwinker:

Fehlermarkierung -> Haken raus

NicoleWagner 14. Dez 2021 17:07

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Danke, das mit dem Haken probiere ich!

Die Bilder hänge ich nicht hier an, weil Hochladen bei mir nicht funktionierte.


Liebe Grüße,
Nicole

haentschman 15. Dez 2021 06:00

AW: leer - leer - leer - wie lernt es mein Rechner?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

weil Hochladen bei mir nicht funktionierte.
...dann hast du was falsch gemacht. :P Jeder lädt hier am Tag einige Bilder hoch. Zugegeben einige Dateien sind "gesperrt" (exe z.B.) Probiers nochmal...:wink:

Rollo62 15. Dez 2021 06:46

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

Zitat von himitsu (Beitrag 1498785)
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

Hallo himitsu,
was für einen Vorteil hätte ein IsNullOrWhiteSpace() vor einem TryStrToTime( Trim() ) ?
Ist das nicht doppelt gemoppelt, oder hat TryStrToTime irgendeinen Bug den ich nicht kenne ?
Mir reicht in der Regel Letzteres aus.

Ok, im Problemfall gibt es eventuell leichte Performance-Vorteile,
was aber doch bei User-Eingaben sowieso relativ unkritisch ist.

NicoleWagner 15. Dez 2021 15:12

AW: leer - leer - leer - wie lernt es mein Rechner?
 
@haentmschman
Danke für die Grafiken.

Bei mir gibt es Probleme, doch nicht nur auf dieser Oberfläche. Ich verdächtige eines meiner Add-Ons, weiß aber leider noch nicht welches, weil es so viele sind.

Nicole
*auf der Jagd nach dem Übeltäter*


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 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