![]() |
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:
dann habe ich dass Problem, dass immer ein Zeilenumbruch mit angehängt wird!!
sl:=TStringlist.Create;
sl.text:=Richedit1.Text; sl.SaveToFile('pfad'); 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! |
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>');
|
Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
Moin,
der Thread ![]() Einen ungewollten Zeilenumbruch am Ende kann man bei Verwendung von strings.SaveToFile() oder strings.SaveToStream() nicht vermeiden, aber im Nachgang so beseitigen:
Delphi-Quellcode:
Grüße vom marabu
begin
// ... strings.SaveToStream(stream); stream.Size := stream.size - Length(sLineBreak); // ... end; |
Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
Zitat:
so?
Delphi-Quellcode:
oder wie? SLineBreak ist ein Zeilenumbruch..
sl:=TStringlist.Create;
sl.text:=Richedit1.Text; sl.Text:=sl.text-Length(sLineBreak); sl.Savetofile(''); etwas wie size beim stream fällt mir bei einer stringlist nicht ein.. |
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.
|
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
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
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:
bitte helft mir, ich bin ech schon verzweifelt....
for i2:=0 to Richedit1.Lines.Count do
if Richedit1.Lines[i2]= ?????????? then Richedit1.Lines.Delete(i2); |
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:
Wenn Du unbedingt an die CRLF heran willst, solltest du mit xxx.Text arbeiten.
if trim(length(xxx.lines[i]))=0 then xxx.delete(i);
In Deinem Eingangsstatemet Schreibst Du: Zitat:
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 |
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); |
Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
Zitat:
Aber so wie du hab ichs schon versucht...trotzdem danke;) aber ich versuche es jetzt auf eine andere Art also..^^ @ p80286: sieht gut aus, ich habe, als ich meinen quellcode für euch kommentiert habe, bevor ich ihn posten wollte, einen anderen viel entscheidenderen Fehler entdeckt, bzw. wie ich es anders ebenfalls gut hinbekomme. Danke p80286 .. ^^ Nur ich habe eine Frage: Wie kann ich irgendwo mitten in einer Prozedur sagen, dass er einfach wieder an den Anfang der Prozedur springt? Also wenn ein fehler auftritt, dann korrigiere den Fehler und "starte die Prozedur neu" keine Schleife oder so, sowas wie procedure.TTest.FormShow.restart gibt es so etwas ähnliches? das wär cool =) ich wollte es ja dadurch erreichen, indem ich einfach schreibe Test.Visible:=False; Test.Visible:=True weil ich es im onShow verwenden muss. Aber dort darf ich visible nicht verwenden.. gibt es eine andere Möglichkeit? Vielleicht einen befehl an ein anderes Fenster, der dann den visible-Befehl ausführt? vielen Dank schonmal.. |
Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
Wie wäre es denn mit einer Schleife?
|
Re: abspeichern einer textdatei ohne lästigen Zeilenumbruch
Warum schreibst du dir nicht deine eigene Speichernfunktion so wie du sie haben willst?
Beispiel (ungetestet):
Delphi-Quellcode:
var
i: Integer; s: string; lStream : TStream; begin lStream := TFileStream.Create(YourFileName, fmCreate); try for i := 0 to strings.count - 2 do begin s := strings.string[i] + #13#10; lStream.Write(s[1], Length(s)); end; if (strings.count > 0) then begin s := strings.string[strings.count - 1]; lStream.Write(s[1], Length(s)); end; finally lStream.Free; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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