Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   abspeichern einer textdatei ohne lästigen Zeilenumbruch (https://www.delphipraxis.net/119150-abspeichern-einer-textdatei-ohne-laestigen-zeilenumbruch.html)

cRayZo 21. Aug 2008 00:06


abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Hallo
ich habe folgendes Problem:
ich programmiere grade an einem System das uA. auf zeilenweiser ein und auslese von Textdateien basiert.
Dafür ist es immens wichtig, dass nur so viel Zeilen in der txt existieren, wie auch beschrieben sind!
wenn ich jetzt einen text aus einem RichEdit in eine Textdatei speichere
Delphi-Quellcode:
sl:=TStringlist.Create;
sl.text:=Richedit1.Text;
sl.SaveToFile('pfad');
dann habe ich dass Problem, dass immer ein Zeilenumbruch mit angehängt wird!!
Ich hab schon fast alles probiert. Vorher den Richedit zu trimmen bringt zB. schlicht gar nichts.

könnt ihr mir da helfen? das wäre klasse!

omata 21. Aug 2008 01:04

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Warum muss es unbedingt ein RichEdit sein?
Wenn du keine Textformatierung benötigst, dann reicht doch ein Memo völlig aus.

Dann kannst du einfach folgendes schreiben...
Delphi-Quellcode:
  Memo.Lines.SaveToFile('<FILE>');

marabu 21. Aug 2008 05:30

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Moin,

der Thread TMemo: Leerzeilen am Ende erkennen beschäftigt sich auf gewisse Weise mit dem gleichen Thema.

Einen ungewollten Zeilenumbruch am Ende kann man bei Verwendung von strings.SaveToFile() oder strings.SaveToStream() nicht vermeiden, aber im Nachgang so beseitigen:

Delphi-Quellcode:
begin
  // ...
  strings.SaveToStream(stream);
  stream.Size := stream.size - Length(sLineBreak);
  // ...
end;
Grüße vom marabu

cRayZo 21. Aug 2008 16:53

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Zitat:

Zitat von marabu
Moin,
Einen ungewollten Zeilenumbruch am Ende kann man bei Verwendung von strings.SaveToFile() oder strings.SaveToStream() nicht vermeiden, aber im Nachgang so beseitigen:
Delphi-Quellcode:
begin
  // ...
  strings.SaveToStream(stream);
  stream.Size := stream.size - Length(sLineBreak);
  // ...
end;

wie sieht das bei einer stringlist aus?
so?
Delphi-Quellcode:
sl:=TStringlist.Create;
sl.text:=Richedit1.Text;
sl.Text:=sl.text-Length(sLineBreak);
sl.Savetofile('');
oder wie? SLineBreak ist ein Zeilenumbruch..
etwas wie size beim stream fällt mir bei einer stringlist nicht ein..

SirThornberry 21. Aug 2008 16:59

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
so wie du es machst geht es nicht. Entweder du schreibst die Zeilen einzeln in eine Datei oder verwendest SaveToStream und änderst dann dei Streamgröße.

cRayZo 21. Aug 2008 17:38

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
wie säh es denn aus, wenn ich es einzeln einspeichere?
Wenn ich wieder string.savetofile mache, kommt doch immer ein Zeilenumbruch..
Wenn ich das zeilenweise mache, hab ich doch nachher so viele Zeilenumbrüche wie Zeilen?
oder verstehe ich dich falsch?

DP-Maintenance 21. Aug 2008 18:07

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage

cRayZo 22. Aug 2008 20:22

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
also, bitte korrigiert mich

ich mache das jetzt anders..

Mit einem Zeilenumbruch am Ende muss ich leben, nur wenn Zeilenumbrüche in der Mitte sind möchte ich diese "leeren" Zeilen löschen. Ich hätte das jetzt so gemacht, "???????" ist der platzhalter für das "erkennungszeichen" von einem Zeilenumbruch
Delphi-Quellcode:
for i2:=0 to Richedit1.Lines.Count do
if Richedit1.Lines[i2]= ??????????
then Richedit1.Lines.Delete(i2);
bitte helft mir, ich bin ech schon verzweifelt....

p80286 22. Aug 2008 21:44

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Hallo crayzo,
leider hab ich nicht so recht verstanden,worum es Dir geht,darum ein paar Basics.
Unter Dos wird jede Zeile in ener Textdatei durch CRLF (#13+#10) begrenzt.
das ist so!
Wenn Du mit .lines arbeitest, sind diese Zeilenbregenzer nicht sichtbar (unter normalen Umständen).
Wenn Du Leerzeilen löschen willst, dann mach es ungefähr so:

Delphi-Quellcode:
if trim(length(xxx.lines[i]))=0 then xxx.delete(i);
Wenn Du unbedingt an die CRLF heran willst, solltest du mit xxx.Text arbeiten.

In Deinem Eingangsstatemet Schreibst Du:
Zitat:

ich programmiere grade an einem System das uA. auf zeilenweiser ein und auslese von Textdateien basiert.
Dafür ist es immens wichtig, dass nur so viel Zeilen in der txt existieren, wie auch beschrieben sind!
Leider kenne ich Deine Beschreibung nicht. Da aber eine wesentliche Eigenschaft von Textdateien ihre variable Größe ist, mußt Du vor Benutzung dieser Datei sicherstellen,daß auch alle benötigten Daten in der Datei enthalten sind. Wenn mehr als die x Zeilen in der Datei stehen, dann werden sie eben ignoriert.

Oder sollte es sein daß Du dich mit einer CSV-Datei herumschlägst, bei der die Anzahl der Phys. Datensätze nicht mit der Anzahl der log. Datensätze übereinstimmt?

Übrigens ist Zeilenumbruch ein Begriff aus der Textbearbeitung, der die phys. Formatierung eines logischen Satzes beschreibt.

Zeig dochmal ein Beispiel von Deinen Daten. Vielleicht gibt es ja auch eine ganz andere Möglichkeit der Lösung.

Gruß
K-H

fortuneNext 22. Aug 2008 22:17

Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
 
Zusammenfassend gesagt ist was er will:

-Den Absatz am Ende entfernen
-Leere Zeilen entfernen

das wars denke ich schon... xD

Ich würds so probieren:

Delphi-Quellcode:
for i2:=0 to Richedit1.Lines.Count do
if Richedit1.Lines[i2]= ''
then Richedit1.Lines.Delete(i2);


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 Uhr.
Seite 1 von 2  1 2      

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