![]() |
QBasic zu Delphi
Hallo!
Ich hab nen altes QBaisc Programm auf der Arbeit rausgekramt, dass ich auf einen aktuellen stand bringen möchte. Vorzugsweise mit Delphi. Allerdings bin ich mir bei einigen Zeilen noch etwas unsicher. Ist bei dem select case teil AND gleichwertig mit + ?
Code:
' QBasic
SELECT CASE (wert AND 240) / 16 CASE 0 TO 9 ascii$ = CHR$((wert AND 240) / 16 + 48) CASE 10 TO 15 ascii$ = CHR$((wert AND 240) / 16 + 55) END SELECT
Delphi-Quellcode:
Gibt es eine vergleichbare Funktion wie mid() in Delphi oder muss ich mit
// Delphi
case (wert + 240) of 0, 1, 2, 3, 4, 5, 6, 7, 8, 9: ascii = Chr((wert + 240) div 16 + 48) 10, 11, 12, 13, 14, 15: ascii = Chr((wert + 240) div 16 + 55) selber etwas stricken?
Code:
' Hier werden die angebenen Zeichen durch die Zeichen hinter dem = ersetzt
MID$(out$, 5 + pgrcnt * 12, 1) = CHR$(LEN(out$) - INT(LEN(out$) / 256) * 256) |
Re: QBasic zu Delphi
And ist genau wie in Delphi eine logische oder bitweise verundung. Vermutlich kannst du das einfach in Delphi ganz genauso schreiben.
In Delphi gibts nur Insert, d.h. Mid musst du wohl selbst machen. |
Re: QBasic zu Delphi
Code:
Kannst du in Delphi einfach so schreiben:
0 TO 9
Delphi-Quellcode:
case zahl of
0..9: tuwas1; 10..15: tuwas2; end; |
Re: QBasic zu Delphi
man braucht nichtmal ein CASE
Delphi-Quellcode:
also
if zahl <= 9 then tuwas1 else tuwas2;
Delphi-Quellcode:
allerdings mach ich es meist mehr so
if (wert and 240) div 16 <= 9 then
ascii := CHR((wert and 240) div 16 + 48) else ascii := CHR((wert and 240) div 16 + 55);
Delphi-Quellcode:
const cHexChars: array[0..15] of Char = '0123456789ABCDEF';
ascii := cHexChars[(wert and 240) div 16]; |
Re: QBasic zu Delphi
Zitat:
|
Re: QBasic zu Delphi
Copy() arbeitet ziemlich gleich wie Mid$.
|
Re: QBasic zu Delphi
Zitat:
|
Re: QBasic zu Delphi
Danke für die Tipps. Hab mir die Mid Funktion jetzt mit String Replace nachgebaut.
Das mit der case Anweisung 0..9 ist auch zimlich praktisch. Allerdings habe ich herrausgefunden das "+" und "and" jeweils ein anderes Ergebnis bringen, dachte das wäre so zimlich egal, ob ich + oder and hinschreibe. :-D |
Re: QBasic zu Delphi
+ addiert
AND verknüpft die Bits (als Binäroperator) also da kann man sich denken, daß es nicht das Selbe macht. oftmals benutzen viele OR statt + was manchmal bei Binäroperationen auch funktioniert, aber eben nicht immer (also wenn man z.B. ein BIT setzen will) |
Re: QBasic zu Delphi
OR liefert dann das selbe Ergebnis wie +, wenn man nur Zweierpotenzen verknüpft. Aber auch nur, wenn alle Operanden dabei voneinander verschieden sind! Man sieht ab und an so ein + beim Zusammenbasteln von Flag-Feldern, bei denen einzelne Bits in einem Integer-Wert (zurück-)gesetzt werden, das ist aber semantisch Blödsinn, und kann ggf. auch seltsame ungewollte Ergebnisse liefern.
"AND 240" ist binär "AND 11110000". D.h. dass von einem Byte nur die obersten 4 Bits betrachtet werden sollen. Das ist durch keinen der üblichen mathematischen Operatoren ausdrückbar, so lange man nicht genau weiss wie die unteren 4 Bits gesetzt sind (dann könnte man ihre Werte subtrahieren, ist aber auch verkorkster Stil den kein normaler Mensch auf Anhieb verstehen wird). \\Edit: Das "div 16" kannst du konsequenterweise hier auch durch den binäroperator SHR (shift right) ersetzen. N div 16 = N shr 4. Das div ist an dieser Stelle ähnlich schlechter Stil wie das o.g. Verwenden von mathematischen Operatoren für logische Operationen - es ist eigentlich genau das :) \\Edit2: Das letzte "+" in diesen Zeilen ist dagegen richtig! Da scheint eine Konvertierung zwischen Character-Tabellen stattzufinden, und in diesem Zusammenhang ist das mathem. + korrekt. Also nicht auf die Idee kommen daraus nun nen "OR" zu machen ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:05 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