|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
Ja klar, der nimmt doch den ASCII-Wert Byte um Byte.
Dann ist eben 2 > 1 2 = ASCII 50, 1 = ASCII 49 B > A B = ASCII 60 A = ASCII 65 a > A a = ASCII 97 A = ASCII 65 Damals, in Assemblerzeiten oder noch früher, in Maschinensprache (ja, habe ich noch gemacht), haben wir das doch auch so programmiert. @Traderdoc: Ich denke nicht, dass der Compiler den String analysiert und in ein Datumsformat umwandelt. Dann spielt es auch keine Rolle, wie lang die Strings sind. Das erste Zeichen, auf das die Bedingung zutrifft, bezw. nicht zutrifft, gibt dann true oder false. Wenn du jetzt die Zeit in einen String umwandelst und dafür schaust, dass die Stellen stimmen (also nicht 10:00 mit 9:00 vergleichen), dann gibt das doch keine Probleme. Oder irre ich mich da? |
|
|||
Zitat:
|
|
|||
Ich glaube nicht, daß hier mit ASCII-Werten gearbeitet wird, MT kann UTF und das geht über ASCII hinaus, aber wie das auf der untersten Ebene (also Maschinencode) gemacht wird, hab ich keine Ahnung. AVT
|
|
|||
Da bin ich mir nicht so sicher, ob bei MT4 Strings immer UTF-Zeichen sind, also zwischen 2 und 4 Byte pro Zeichen. Da müsste ich mich schon genauer damit beschäftigen. Ist aber egal, dann wird halt UTF-Zeichen um UTF-Zeichen verglichen, nicht Byte um Byte.
|
|
|||
In der Tat:
string Zeit = "6"; if (Zeit > "10" || Zeit < "5") { Print ("Kein Handel. Zeit: ",Zeit); return; } Print ("Handel. Zeit: ",Zeit); } Hier ist die 6 aber größer als die 1 der 10 und somit als Ergbnis false. string Zeit = "45"; if (Zeit > "99" || Zeit < "5") { Print ("Kein Handel. Zeit: ",Zeit); return; } Print ("Handel. Zeit: ",Zeit); } ergibt ein true, weil die 4 der 45 kleiner ist als die 5. Ok, ich habe das Prinzip verstanden, man muß aber höllisch aufpassen und damit ist die Methode extrem fehleranfällig. Gut zu wissen, aber außer beim Zeitvergleich im Format HH:MM werde ich die Strings nicht vergleichen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
Klar Traderdoc, du kommst aus einer andern Ecke der Programmierwelt. Bei mir waren Stringvergleiche jahrzehntelang mein täglich Brot. Da passieren dann mit der Zeit keine Fehler mehr .
Wir haben oft mit indizierten Dateien gearbeitet, da haben wir die Keyfelder immer in Strings gespeichert. War halt einfach zum Debuggen, wenn man bei zusammengesetzten Keys alle Werte in Strings hatte. Und funktionieren tuts, ich betreue heute noch Software, die ich mal vor bald 40 Jahren geschrieben habe. Ist immer noch in Betrieb, mit einem biologischen Ablaufdatum (bin 71 Jahre alt). Strings sind aber auch nicht sehr effizient. Wer Wert darauf legt, solls besser bleiben lassen. |
|
|||
Ich denke auch da steckt intern sowas wie ein strcmp() und damit ASCII dahinter, ist also Lexikographisch vergleichbar.
https://www.geeksforgeeks.org/strcmp-in-c-cpp/ "Zweckmäßigerweise sind die Inhalte zweier Speicherstellen (Bytes) auf der untersten Maschinenebene immer miteinander (im Sinne einer Totalordnung) vergleichbar. Zweckmäßigerweise sind die Ziffern resp. Buchstaben den Bitkombinationen eines Bytes so zugeordnet, dass diese Ordnung mit der üblichen Ordnung im Ziffernsystem resp. Alphabet übereinstimmt. Aufbauend auf diesem Grundbaustein eines Vergleichs lassen sich durch lexikographische Zusammensetzung zusammengesetzte Datentypen, beispielsweise mehrstellige Zeichenketten, miteinander vergleichen. Korreliert die lexikographische Indizierung mit den Speicheradressen, hat also das beim Vergleichen höherrangige Byte die niedrigere Adresse, dann geschieht der Vergleich im Big-Endian-Stil, und im Little-Endian-Stil, wenn das höherrangige Byte die höhere Adresse hat. Da sich der lexikographische Vergleich im günstigsten Fall schon im ersten, höchstrangigen Byte entscheidet, ist er schneller, wenn dieses erste Byte im unmittelbaren Zugriff liegt. " https://de.wikipedia.org/wiki/Lexiko...der_Informatik Zitat:
|
|
|||
Ja, der Vergeich an sich geht natürlich schnell, aber heute werden Strings doch über Stringconstructors angesprochen und die sind mit Aufwand verbunden (erstellen des Constructors, Platz wieder freigeben etc.)
Das war zu Anfangszeiten einfacher. Man wusste den Anfang des Strings, konnte das entsprechende Byte direkt ansprechen und Ende des Strings war das erste ASCII 0. Nichts mit geschützen Speicherbereichen und pipapo. Und man hatte alle Möglichkeiten für fiese Spielchen Aber ich habe nur eine vage Ahnung davon, wie das heute genau gehandhabt wird. Ist schon lange, sehr lange her, dass ich da eingehend Bescheid wusste. Wenn ich mir manchmal neue Programme anschaue wird mir schwindelig, wie grosszügig mit Ressourcen umgegangen wird. Kostet ja auch nichts mehr. Nicht mehr 2000$ pro 1 bis 2 KB, wie zu meinen Anfangszeiten. Ja Kilobyte, nicht Giga oder sowas. Und das waren erst noch viel teurere Dollars. |
Lesezeichen |
Stichworte |
zeit abgleichen, zeit einstellen, zeit vergleichen |
|
|