AGB  ·  Datenschutz  ·  Impressum  







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

WriteLN + Zeilenumbruch

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

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

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 11:20
Erstmal Danke an euch beide

TextLaden lädt den Text nur noch mal ins Memo. Daran liegt das nicht, das habe ich auch schon auskommentiert und nach dem Speichern in die Textdatei geschaut und die Zeilenbrüche waren auch vorhanden.

Mhm zum 2. Punkt von himitsu: Selbst wenn ich
Delphi-Quellcode:
for i := 0 to memo1.Lines.Count+10 do
    WriteLn(f,memo1.Lines[i]);
schreibe kommt keine Fehlermeldung, sondern Delphi schreibt nur leere Zeilen , aber das hat ja nichts mit den Zeilenbrüchen zu tun.

Zitat:
Delphi-Quellcode:
{$I-}
Rewrite(f);
{$I+}
if IOResult<>0 then showmessage('Fehler beim Speichern.');
 ...
gute Kritik, aber bis jetzt hatte ich noch keinen Fehler.


zu HiWieGehts:
woher kommen denn die "#10#13" und wie kann ich das verhindern bzw. umgehen?
  Mit Zitat antworten Zitat
Pandax3

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

AW: WriteLN + Zeilenumbruch

  Alt 29. Jan 2012, 11:29
HiWieGehts hatte Recht.

wenn ich vor dem Speichern dies davor setze:
if pos(#13#10,Edit1.Text) <> 0 then showmessage('vorhanden'); bekomme ich die Meldung 'vorhanden'.

Jetzt frag ich mich halt nur woher das kommt? Oder wie kann ich das rauslöschen? Das ist noch nicht normal das an ein Edit "#13#10" gesetzt wird, oder?

Danke schon mal
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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
 
#4

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.340 Beiträge
 
Delphi 12 Athens
 
#5

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
 
#6

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
 
#7

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
 
#8

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


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 22:19 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