Unterschiede: Delphi<>Lazarus TInifile und Stringfunkt
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Unterschiede: Delphi<>Lazarus TInifile und Stringfunkt
Hallo!
In einem von Delphi nach Lazarus portierten Projekt (um es auch auf Linux lauffähig zu machen) gibt es massive Probleme, da die Stringfunktionen copy() und delete() anscheinend irgendwie anders funktionieren. Gibt es einen Unterschied zwischen Delphis TIniFile und dem von Lazarus? Wenn ich die ganzen Unterschiede kenne, ist es einfacher, das Projekt anzupassen, als wenn ich in über 10.000 Zeilen Try-and-Error versuche.
Danke schonmal!
Targion
In einem von Delphi nach Lazarus portierten Projekt (um es auch auf Linux lauffähig zu machen) gibt es massive Probleme, da die Stringfunktionen copy() und delete() anscheinend irgendwie anders funktionieren. Gibt es einen Unterschied zwischen Delphis TIniFile und dem von Lazarus? Wenn ich die ganzen Unterschiede kenne, ist es einfacher, das Projekt anzupassen, als wenn ich in über 10.000 Zeilen Try-and-Error versuche.
Danke schonmal!
Targion
-
- Lazarusforum e. V.
- Beiträge: 2809
- Registriert: Sa 9. Sep 2006, 18:05
- OS, Lazarus, FPC: Linux (L trunk FPC trunk)
- CPU-Target: 64Bit
- Wohnort: Dresden
- Kontaktdaten:
Dann scheint das doch nicht das erste Zeichen zu sein...vielleicht ein Leerzeichen davor? Bzw. einfach mal Copy(Trim(h), 0, 1)... probieren.
Ich habs gerade probiert und es funktioniert bestens und ich bekomm die entsprechende Nachricht:
Ich habs gerade probiert und es funktioniert bestens und ich bekomm die entsprechende Nachricht:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
var temp: string;
begin
temp := '°1234';
if Copy(temp, 0, 1) = '°' then
ShowMessage('Erstes Zeichen ist ein °')
else
ShowMessage(Copy(temp, 0, 1));
end;
Johannes
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Also, es ist kein Leerzeichen davor... Und es funktioniert trotzdem nicht!
Die Stelle sieht jetzt so aus:
Also ich kann echt keinen Fehler finden!!
Die Stelle sieht jetzt so aus:
Code: Alles auswählen
if copy(Trim(h),0,1) = '°' then begin
Erstens fangen Strings bei 1 an, nicht bei 0.
Also Copy(temp,1,1) wäre besser, obwohl der Compiler so freundlich ist, das 0 auch zu schlucken.
Das ist aber nicht dein Problem.
Mit Zeichen > #127 kann's schwierig werden, da dann die $LANG Einstellungen im Editor eine Rolle Spielen. Versuch mal gegen #186 zu testen.
Also Copy(temp,1,1) wäre besser, obwohl der Compiler so freundlich ist, das 0 auch zu schlucken.
Das ist aber nicht dein Problem.
Mit Zeichen > #127 kann's schwierig werden, da dann die $LANG Einstellungen im Editor eine Rolle Spielen. Versuch mal gegen #186 zu testen.
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
Immernoch kein Erfolg:
(Irgendwo stand, dass Strings mit 0 beginnen... Ich suche mal danach. Aber egal!)
Code: Alles auswählen
if copy(h,1,1) = #186 then begin
-
- Beiträge: 688
- Registriert: Mi 3. Okt 2007, 21:00
- OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
- CPU-Target: x86_64
So:
i,j: Integer
Code: Alles auswählen
h:=db.ReadString('XModule('+IntToStr(i)+')','ID'+IntToStr(j),'');