Dateiroutinen, Strings allgemein

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Dateiroutinen, Strings allgemein

Beitrag von Sieben »

Ich bin etwas verwirrt durch die Vielzahl von Dateiroutinen und die damit zusammenhängenden Fragen zu String-Parametern allgemein. Wenn ich diesen Wiki-Artikel:

https://wiki.freepascal.org/Unicode_Support_in_Lazarus

jedoch richtig verstehe, ist es seit FPC 3.0 aber möglich, auch Routinen, die laut Deklaration Ansistring, Unicode oder auch RawbyteString erwarten einfach einen String zu übergeben und auf die Magie des Compilers zu vertrauen - für alles, was er hinnimmt, hält er auch die nötigen Umwandlungen bereit. Dh ich baue meine eigenen Routinen und Applikationen konsequent einfach nur mit String auf und kann, bis auf direkte API-Aufrufe, damit 'querbeet' alle Routinen benutzen, soweit der Compiler nicht reklamiert? Und dieser Wiki-Artikel:

https://wiki.freepascal.org/LCL_Unicode_Support/de

wäre im Grunde seitdem hinfällig?

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Dateiroutinen, Strings allgemein

Beitrag von Mathias »

wäre im Grunde seitdem hinfällig?
Wen man genauer guckt, sieht man, da der Artikel sehr alt ist.

https://wiki.freepascal.org/index.php?t ... on=history

Unterdessen wurde viel an den Strings verbessert.
Ich bin auch der Meinung, das dies nicht mehr gültig ist.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Dateiroutinen, Strings allgemein

Beitrag von Winni »

Hi!

Der Artikel ist für Lazarus Version 0.9.2.
Inzwischen sind wir bei 2.0.10

Vergiss es. Danach hat es noch jede Menge Umbauten gegeben.

Wichtig ist, dass Du weisst, dass es jetzt fast alles mit "UTF8" gibt:
UTF8Length
UTF8Pos
UTF8Upper
etc....

Und bei einigen Funktionen haben sie dass schon automatisch aktualisiert.
Was Zwischendurch UTF8FileExists war, ist heute - wie schon vor 20 Jahren - wieder einfach nur fileExtsts - kann aber mit UTF8-Zeichen umgehen.

Winni

wp_xyz
Beiträge: 4869
Registriert: Fr 8. Apr 2011, 09:01

Re: Dateiroutinen, Strings allgemein

Beitrag von wp_xyz »

Es ist die Crux in diesem mehrsprachigen wiki-System, dass die Übersetzungen nichts davon mitkriegen, wenn der Ursprungsartikel geändert wurde. Da der Ursprungsartikel meist englisch ist, der dringende Rat: im Zweifelsfall mit dem englischen Artikel vergleichen und ggfs diesen zu Rate ziehen. Und speziell bei UTF8 kommt noch erschwerend dazu, dass sich da eine Menge geändert hat und viele Artikel, die früher gültig waren, nun nur noch zur Verwirrung beitragen. Andererseits werden diese alten Artikel ungern gelöscht (ein "normaler" wiki-Autor kann das gar nicht), weil gerade auf Linux-System noch uralte Lazrarus-Version gang und gäbe sind. Leider ist es halt mal so...

Sieben
Beiträge: 202
Registriert: Mo 24. Aug 2020, 14:16
OS, Lazarus, FPC: Ubuntu Xenial 32, Lazarus 2.2.0, FPC 3.2.2
CPU-Target: i386

Re: Dateiroutinen, Strings allgemein

Beitrag von Sieben »

Er muss ja auch nicht gelöscht werden, aber er könnte einen Disclaimer erhalten und einen Verweis auf den aktuellen Stand. Dass er sich auf eine uralte Version bezieht, war mir schon aufgefallen...
Wichtig ist, dass Du weisst, dass es jetzt fast alles mit "UTF8" gibt:
...
Und bei einigen Funktionen haben sie dass schon automatisch aktualisiert.
Was Zwischendurch UTF8FileExists war, ist heute - wie schon vor 20 Jahren - wieder einfach nur fileExtsts - kann aber mit UTF8-Zeichen umgehen.
Genau darauf bezog sich ja meine Frage - es gibt zwar eine Menge Routinen mit dem Zusatz 'UTF8', aber der aktuelle Wiki-Beitrag liest sich eben so wie dein zweites Statement - das mittlerweile egal ist, ob ich DirectoryExistsUTF8 aus LazFileUtils (das ja auch nur eine String-Umwandlung dazwischen schiebt) oder eben einfach System.DirectoryExists direkt aufrufe - der Compiler erledigt das intern. Auch klar, dass die alten Routinen jetzt nicht einfach rausfliegen, 'breaking code' ist nicht nett. Aber wie weit ist das umgesetzt? Nur bei einigen, wie du schreibst? Wo ist das Kriterium, ob ich 'noch' die UTF8-Variante verwenden sollte oder inzwischen einfach (wieder) schreiben kann, wie mir der Delphi-Schnabel gewachsen ist? Eine schöne Regel wäre wie gesagt: was der Compiler nicht reklamiert, das geht auch.

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Dateiroutinen, Strings allgemein

Beitrag von Mathias »

Aber was der normale User kann,, ein Hinweis reinschreiben, das der Artikel nur für gewisse fpc Versionen gültig ist.
So wie hier, das es Beta ist.
https://wiki.freepascal.org/Android_-_A ... PDeluxe/de
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
Winni
Beiträge: 1577
Registriert: Mo 2. Mär 2009, 16:45
OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
CPU-Target: 64Bit
Wohnort: Fast Dänemark

Re: Dateiroutinen, Strings allgemein

Beitrag von Winni »

Hi!

Ein Feature ist noch zu erwähnen:

Wenn Du strings vergleichst wie wir das seit TT (Turbo Tagen) machen, dann kommt auch der gleiche Mist raus:

ÄÖÜ, die spanischen, französischen und skandinavischen Sonderzeichen landen ganz am Ende.

Wenn man die allgemein gültige Sortierreihenfolge haben möchte - also Ö nach O etc, dann nimmt man :

function UTF8CompareStr(const S1, S2: string): PtrInt;

Für das Resultat gilt:
> 0 : s1 > s2
< 0 s1 < s2
= 0 s1 = s2

Falls Du mal ein Telefonbuch herausgeben möchtest .
Oder sonstwie Wert auf vernünftige Sortierung legst.

Winni

Antworten