AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

WriteLN + Zeilenumbruch

Ein Thema von Pandax3 · begonnen am 29. Jan 2012 · letzter Beitrag vom 30. Jan 2012
Antwort Antwort
Benutzerbild von himitsu
himitsu

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

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 11:33
woher kommen denn die "#10#13" und wie kann ich das verhindern bzw. umgehen?
Rate mal, warum ich nach der Einlesefunktion gefragt hab?

gute Kritik, aber bis jetzt hatte ich noch keinen Fehler.
Gib mal einen falschen Pfad an (nichtexistierendes Verzeichnis) oder ein Verzeichnis, bzw. eine Datei, wo für das Programm keine Schreibrechte existieren.

Wobei es auch unpraktisch ist, den eigentlichen Fehlergrund zu verschleiern, denn dann weiß man zwar daß etwas nicht geht, aber nicht warum.
Delphi-Quellcode:
if IOResult = 0 then begin
  ... hier die Dateizugriffe
end else
  ShowMessage('Fehler beim Speichern.' + sLineBreak + SysErrorMessage(IOResult));
Was man nun vermutlich erfahren würde.


Die Steuerzeichen #13 und #10 sind in einem Edit schon erlaubt, nur daß sie dort nicht als Zeilenumbruch/Steuerzeichen, sondern als stinknormale Zeichen interpretiert werden.
(so wie ein Texteditor <B> als Text behandelt, was ein Webbrowser nicht macht, sobald er den Text als HTML interpretiert)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jan 2012 um 11:37 Uhr)
  Mit Zitat antworten Zitat
Pandax3

Registriert seit: 16. Jul 2011
22 Beiträge
 
#2

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 11:58
ok du hattest Recht
ich habe beim Auslesen der Textdatei einen Fehler gemacht und habe die Zeilenbrüche mit ausgelesen, habe jetzt überall 2 Zeichen abgezogen und er liest die Zeilenbrüche nicht mehr ein

Danke für eure Hilfe

Habe jedoch noch schnell 2 Fragen:

ShowMessage('Fehler beim Speichern.' + sLineBreak + SysErrorMessage(IOResult)); Hat sLinebreak diesselbe Bedeutung wie "#13#10" ?

wieso tritt bei
Delphi-Quellcode:
for i := 0 to memo1.Lines.Count+10 do
    WriteLn(f,memo1.Lines[i]);
kein Fehler auf?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 12:24
OK, MSDN-Library durchsuchenEM_GETLINE ignoriert nichtexistierende Zeilen und gibt einen Leerstring zurück. (hätte erwartet, daß dieses geprüft wird)
Versuch das aber mal bei einer TStringList oder einer anderen Liste, wie TList und Co.
Bei dynamischen Arrays vergessen viele probehalber mal die Bereichsprüfung in den Projektoptionen zu aktivieren, was oftmals in Zugriffsverletzungen oder gar in einem Bufferoverrun resultiert.

Delphi-Referenz durchsuchensLineBreak ist unter Windows #13#10 (CRLF), was dort den Standardzeilenumbruch darstellt.
Kompiliert man eine Linux-Anwendung, ist es eine #10 und für MAC ist es eine #13. (Kylix oder XE2)
Es paßt sich also ans Zielsystem an.

[edit]
Ohh, wieso gibt's das nicht in der OH?
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (29. Jan 2012 um 12:27 Uhr)
  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
 
#4

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 12:25
Man ist eigentlich gut beraten sich für das Speichern von Daten, die man später auch wieder einlesen und verarbeiten möchte, ein möglichst einfach zu lesendes Format zu verwenden.

Ein Human-Readable-Format ist für ein Programm meistens schlecht/umständlich zu verarbeiten - und auch umgekehrt.

Speicher die Daten in 2 Dateien ... eine im Human-Readable-Format (nur zum lesen) und in einem weiteren Format, welches sich auch wieder einfach auslesen lässt.
In diesem Fall könnte dir z.B. auch eine schnöde Ini-Datei helfen Delphi-Referenz durchsuchenTIniFile
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
Pandax3

Registriert seit: 16. Jul 2011
22 Beiträge
 
#5

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 12:35
@himitsu danke für die erklärung

@Sir Rufo, kann schon sein, dass das mit einer .ini einfacher geht, aber jetzt läufts ja Merk ich mir fürs nächste Mal
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: WriteLN + Zeilenumbruch

  Alt 30. Jan 2012, 11:25
ok du hattest Recht
ich habe beim Auslesen der Textdatei einen Fehler gemacht und habe die Zeilenbrüche mit ausgelesen, habe jetzt überall 2 Zeichen abgezogen und er liest die Zeilenbrüche nicht mehr ein
??
Im Prinzip ist das mit den 2Zeichen schon ganz richtig, aber warum verwendest Du nicht readln oder TStrings.LoadfromFile?
Diese Möglichkeoten eine Textdatei zu lesen sind recht ausgereift, und jahrelang erprobt.
Damit könntest du Dir einiges an Ärger ersparen.

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

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 09:56 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