[gelöst] COPY in Lazarus anders als Delphi?
[gelöst] COPY in Lazarus anders als Delphi?
Hi allerseits,
ich habe bisher mit Delphi gearbeitet. Nun möchte ich mal was für Linux machen und will mir Lazarus mal reinziehen. Dabei ist mir zunächst eins aufgefallen:
der Befehl COPY zum Zugriff auf einen Substring funktioniert grundsätzlich in Delphi und Lazarus gleich:
COPY(String,Index,Count)
Bei Delphi (XE3) kann ich allerdings den letzten Parameter COUNT weglassen (COPY(String,Index), zurückgegeben wird dann der gesamte Rest des Strings ab der Position INDEX. Das scheint bein Lazarus nicht zu funzen, jedenfalls bekomme ich die Fehlermeldung "Error: Wrong number of parameters secified for call to "$fpc_ansistr_copy". Muss ich da vielleicht irgendwo in den Einstellungen einen "Kompatibilitätsmodos" oder sowas einstellen? Oder ggf eine andere Unit einbinden?
Vielen Dank
Eddie
ich habe bisher mit Delphi gearbeitet. Nun möchte ich mal was für Linux machen und will mir Lazarus mal reinziehen. Dabei ist mir zunächst eins aufgefallen:
der Befehl COPY zum Zugriff auf einen Substring funktioniert grundsätzlich in Delphi und Lazarus gleich:
COPY(String,Index,Count)
Bei Delphi (XE3) kann ich allerdings den letzten Parameter COUNT weglassen (COPY(String,Index), zurückgegeben wird dann der gesamte Rest des Strings ab der Position INDEX. Das scheint bein Lazarus nicht zu funzen, jedenfalls bekomme ich die Fehlermeldung "Error: Wrong number of parameters secified for call to "$fpc_ansistr_copy". Muss ich da vielleicht irgendwo in den Einstellungen einen "Kompatibilitätsmodos" oder sowas einstellen? Oder ggf eine andere Unit einbinden?
Vielen Dank
Eddie
Zuletzt geändert von eddie11 am Fr 1. Feb 2013, 08:37, insgesamt 1-mal geändert.
Re: COPY in Lazarus anders als Delphi?
Ok, die F1 sagt dazu:
Copy returns a string which is a copy if the Count characters in S, starting at position Index. If Count is larger than the length of the string
S, the result is truncated. ....
Krücke also: COPY(String,Index,99999) oder COPY(String,Index,LENGTH(String)) bringt das gewünschte Ergebnis. Aber so muss ich den gessamten Code aus Delphi entsprechend überarbeiten. Die delphi-Variante wäre mir lieber...
Gruß
Eddie
Copy returns a string which is a copy if the Count characters in S, starting at position Index. If Count is larger than the length of the string
S, the result is truncated. ....
Krücke also: COPY(String,Index,99999) oder COPY(String,Index,LENGTH(String)) bringt das gewünschte Ergebnis. Aber so muss ich den gessamten Code aus Delphi entsprechend überarbeiten. Die delphi-Variante wäre mir lieber...
Gruß
Eddie
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: COPY in Lazarus anders als Delphi?
Vorsicht !eddie11 hat geschrieben:der Befehl COPY zum Zugriff auf einen Substring funktioniert grundsätzlich in Delphi und Lazarus gleich...
Bei Lazarus ist die String-Verarbeitung völlig anders als bei Delphi XE.
Lazarus und ältere Delphi Versionen arbeiten mit 8 Bit Chars, Delphi XE (und mseGUI) arbeiten mit 16 oder 32 Bit Chars.
In älteren Delphi - Versionen und in älteren Lazarus-Versionen waren die Zeichen in Strings ANSI-codiert. (Also abhängig von der Landes-spezifischen "Locale" Einstellung des Rechners.)
In der aktuellen Lazarus-Version sind die Zeichen in Strings UTF-8 Codiert.
In Delphi XE und mseGUI sind die Zeichen in Strings defaultmäßig UTF-16 codiert.
Durch diese Maßnahmen unterstützen sowohl Delphi XE als auch die neuen Lazarus-Versionen Unicode -> http://de.wikipedia.org/wiki/Unicode und damit die Erstellung von Programmen, die unverändert in verschiedenen Sprachen laufen können.
Der Umgang mit Strings wird dadurch teilweise (immer, wenn man auf einzelne Zeichen oder die Anzahl von Zeichen in einem (Teil)-String zugreifen will) kompliziert und inkompatibel zwischen Delphi und Lazarus.
-Michael
Re: COPY in Lazarus anders als Delphi?
jo, der Unterschied in der Codierung ist mir auch schon aufgefallen, trotzdem Danke für den Hinweis.
Das ist aber im Zusammenhang mit der Fragestellung unerheblich, da geht es ja nicht um Inhalte, sondern um Sprach-Syntax.
Das ist aber im Zusammenhang mit der Fragestellung unerheblich, da geht es ja nicht um Inhalte, sondern um Sprach-Syntax.
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: COPY in Lazarus anders als Delphi?
Es wäre natürlich schön, und eigentlich überhaupt kein Problem, wenn FPC den letzten Parameter von copy als "Default High(Cardinal)" oder ähnlich definieren würde. Das stört keine existierende Software.
-Michael
-Michael
Re: COPY in Lazarus anders als Delphi?
Das muss ist ein neues Feature in Delphi sein.
Beim FPC 2.7.1 (trunk) geht das auch.
Ist jetzt aber nicht soo schlimm, oder? 
Beim FPC 2.7.1 (trunk) geht das auch.
Code: Alles auswählen
var s:String;
begin
s:='test';
Caption:=Copy(S,2);
end;

Re: COPY in Lazarus anders als Delphi?
nö, ist nicht wirklich schlimm - hab' nur ne Menge Codezeilen in Dephi wo der Längen-Parameter fehlt. Muss ich jetzt halt überarbeiten....
-
- Beiträge: 3444
- Registriert: Mo 11. Sep 2006, 10:24
- OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
- CPU-Target: X32 / X64 / ARMv5
- Wohnort: Krefeld
Re: COPY in Lazarus anders als Delphi?
Neee. Hol Dir die neuste fpc Version die, wie Theo ja herausgefunden hat, (u.a.) dieses neue Feature hat.eddie11 hat geschrieben:nö, ist nicht wirklich schlimm - hab' nur ne Menge Codezeilen in Dephi wo der Längen-Parameter fehlt. Muss ich jetzt halt überarbeiten....
-Michael