AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList ohne BOM speichern?

Ein Thema von fillibuster · begonnen am 2. Jan 2014 · letzter Beitrag vom 2. Jan 2014
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.541 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:38
Das hatte Uwe aber bereits erwähnt
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#12

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:38
TStrings hat eine Eigenschaft WriteBOM.
Nicht in D2010!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#13

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:39
Zitat:
In den gespeicherten Dateien ist immer eine (Leer)Zeile mehr drin als eigentlich geschrieben wird.
Nein, das ist völlig normales Verhalten. Am Ende einer jeden Zeile der Liste ist automatisch ein Zeilenumbruch. Nur in den Köpfen der Programmierer macht es Sinn nach der letzten Zeile keinen Zeilenumbruch haben zu wollen. Bin selbst mal drauf herein gefallen.

Entweder man hat nach jeder Zeile, auch der Letzten, automatisch ein #13#10 oder man kümmert sich von Anfang an selbst drum. Macht durchaus Sinn - falls du das gemeint hast.

Gruß,

Toni
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.837 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:40
Das hatte Uwe aber bereits erwähnt
Danke das hatte ich dann auch gesehen.
Man sollte vor dem Posten noch mal einen Refresh machen
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:41
TStrings hat eine Eigenschaft WriteBOM.
Nicht in D2010!
Jenau

TStrings (D2010 Doku)
TStrings (XE Doku)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#16

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 09:50
Nein, das ist völlig normales Verhalten. Am Ende einer jeden Zeile der Liste ist automatisch ein Zeilenumbruch. Nur in den Köpfen der Programmierer macht es Sinn nach der letzten Zeile keinen Zeilenumbruch haben zu wollen. Bin selbst mal drauf herein gefallen.
Diese "letzte Zeile" wird beim Öffnen via Liste.LoadFromFile jedoch nicht mit eingelesen, wie ich eben ermittelt habe: In meiner Testdatei befinden sich laut PsPad 23.971 Zeilen incl. der letzten, leeren Zeile, die ja nur aus 0D0A (#13+#10) besteht. Beim Einlesen derselben Datei via Liste.LoadFromFile erhalte ich jedoch nur 23.970 Zeilen.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 10:14
  1. Update auf XE oder höher
  2. sl.WriteBOM := false;
Danke für die Info. Dann braucht man hier nix mehr selbst machen (bzw. bei Update auf neue Version evtl. Altcode entsorgen).
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#18

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 10:41
Wer sollte das dann wieder einlesen können? Der BOM für UTF-8 hat schon seinen Sinn. Was stört dich daran?
Es kommt drauf an.
Bestimmte Dateiformate haben eine andere Standardformatierung, wenn kein BOM vorhanden ist.
z.B. XML ist standardmäßig UTF-8

Und auch bei HTML muß die Kodierung nicht als BOM drinstehen, sondern wird über Meta-Tags definiert.


PS: Im Notfall hätte man sich auch ganz einfach ein eigenes TEncoding definieren können, welches kein BOM enthält.
TMBCSEncoding.Create(CP_UTF8)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jan 2014 um 10:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#19

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 10:55

Entweder man hat nach jeder Zeile, auch der Letzten, automatisch ein #13#10 oder man kümmert sich von Anfang an selbst drum. Macht durchaus Sinn - falls du das gemeint hast.
Das ist durch die Historie bedingt. "CarriageReturn, Linefeed" war für viele Drucker und Monitore die Ansteuerung für eine neue Zeile. Jetzt kommt es darauf an was Du willst, eine neue Zeile nach Deinem Text oder aber nicht, dementsprechend ein x0D0A oder nicht.
Es gibt/gab ja auch Programme die eine Textdatei mit einem x0D0A121A beendet haben.

Alles eine Frage der Konvention.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Tonic1024
Tonic1024

Registriert seit: 10. Sep 2003
Ort: Cuxhaven
559 Beiträge
 
RAD-Studio 2009 Ent
 
#20

AW: TStringList ohne BOM speichern?

  Alt 2. Jan 2014, 12:00
Diese "letzte Zeile" wird beim Öffnen via Liste.LoadFromFile jedoch nicht mit eingelesen, wie ich eben ermittelt habe: In meiner Testdatei befinden sich laut PsPad 23.971 Zeilen incl. der letzten, leeren Zeile, die ja nur aus 0D0A (#13+#10) besteht. Beim Einlesen derselben Datei via Liste.LoadFromFile erhalte ich jedoch nur 23.970 Zeilen.
Ist letztlich Auslegungssache. In meinen Augen ist #13#10 nicht eine neue Zeile, sondern es steht am Ende der letzten, mit text gefüllten Zeile. So wie in jeder Zeile vorher.

Der Cursor blinkt nach einem LineFeed allerdings korrekter Weise am Anfang einer (noch) nicht existenten zusätzlichen Zeile. Der XY-Positionsanzeiger des Cursors zeigt dann folgerichtig natürlich eine Zeile mehr an. Diese wird dann natürlich aber nicht mit gespeichert, weil das ja ein zusätzliches #13#10 (im Stream also ein #13#10#13#10) zur Folge hätte. Mehrfaches Laden und Speichern würde jetzt je eine Zeile mehr erzeugen und die Datei würde wachsen, wachsen, wachsen.

Über die Darstellung kann man sich jetzt natürlich streiten. Technisch betrachtet ist es in meinen Augen aber korrekt wie es ist. Nur im Kopf ist es auf den ersten Blick irgendwie unlogisch.
Der frühe Vogel fängt den Wurm, richtig.
Aber wird nicht auch der frühe Wurm vom Vogel gefressen?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz