![]() |
Leerzeilen aus Ini-Datei entfernen
Ich lege in einer Ini-Datei Sections mit Datum als Namen an und lösche diese auch wieder, wenn Sie älter als 7 Tage sind
[15.10.2005] TXT1=Value1 TXT2=Value2 [16.10.2005] TXT1=Value1 TXT2=Value2 usw. beim Löschen der Section
Delphi-Quellcode:
wird aber die Leerzeile nicht gelöscht. Nach einigen Wochen entsteht so eine Ini-Datei mit ganz vielen Leerzeilen
Ini.EraseSection([16.10.2005])
Ich habe eine umständliche Programmierung gefunden, die Leerzeilen löscht
Delphi-Quellcode:
{***** Leerzeilen herausschneiden, d.h. Ascii-Folge 13 10 13 10 *****}
fs := TFilestream.Create(BefundListe + 'EKGBefunde.txt' ,fmopenread or fmShareDenyNone); SetLength(ba, fs.Size); fs.Read(ba[0], Length(ba)); fs.Free; i := 0; j := 0; for i := 0 to Length(ba) do begin if NOT ((ba[i] = 10) AND (ba[i-1] = 13) AND (ba[i-2] = 10)) AND NOT ((ba[i] = 13) AND (ba[i-1] = 10) AND (ba[i-2] = 13)) then begin SetLength(bn, j + 1); bn[j] := ba[i]; //s := s + ' ' + IntToStr(ba[i]); inc(j); end; end; fs := TFileStream.Create(BefundListe + 'EKGBefunde.txt', fmCreate); fs.Writebuffer(bn[0], Length(bn)); fs.Free; {****************************************************************************} In dem Code wird Byte-weise abgefragt, ob die Ascii-Folge 13 10 mehr als einmal hintereinander vorkommt und nur dann der zweite Puffer gefüllt, wenn das nicht der Fall ist Hat jemand einen Tipp wie das ohne FileStream direkt mit Ini.EraseStream geht? Übrigens wurde mal die Frage gepostet, wie man Leerzeilen einfügt, das geht einfach so
Delphi-Quellcode:
Ralf
Ini.WriteString(FormatDateTime('dd.mm.yyyy',now), 'TXT1' , s + #13#10)
|
Re: Leerzeilen aus Ini-Datei entfernen
Moin Ralf,
der ganz einfache Weg: INI-Datei in eine TStringList laden, und dann mit
Delphi-Quellcode:
die doppelten Zeilen entfernen (ungetestet).
StringList.Text := StringReplace(StringList.Text,#13#10#13#10,#13#10,[rfReplaceAll]);
Anschliessend dann die StringList wieder speichern. Nicht besonders performant (eher im Gegenteil ;-)), aber für ein gelegentliches benutzen wohl ausreichend. (Vorausgesetzt, die INI-Datei ist nicht allzugross) |
Re: Leerzeilen aus Ini-Datei entfernen
1.
Warum fügst du überhaupt erst Leerzeilen ein? Das ist doch nicht schlimm, wenn die ini so aussieht: [15.10.2005] TXT1=Value1 TXT2=Value2 [16.10.2005] TXT1=Value1 TXT2=Value2 usw. Oder? 2. Meine Methode mit einer StringList wäre diese:
Delphi-Quellcode:
Ich habe den Code zwar nicht getestet, aber theoretisch müsste das so funktionieren.
procedure LeerzeilenLoeschen(FileName: String);
var S: TStringList; i: Integer; begin S:=TStringList.Create; S.LoadFromFile(FileName); For i:=0 to S.Count-1 do begin If S[i]='' then S.Delete(i); end; S.SaveToFile(FileName); S.Free; end; |
Re: Leerzeilen aus Ini-Datei entfernen
Zitat:
Das liegt wohl daran, dass die Prozeduren von TIniFile nach jeder Section automatisch eine Leerzeile einfügen. Wenn man eine Section dann löscht, werden zwar alle Zeilen mit Werten gelöscht, aber keine Leerzeilen. MfG Binärbaum |
Re: Leerzeilen aus Ini-Datei entfernen
@Martin K: Lass die for-Schleife rückwärts laufen, sonst gibt's hinterher Probleme (Die Bedingung wird nur einmal ausgewertet...). Außerdem gibt's das schon in der
![]() |
Re: Leerzeilen aus Ini-Datei entfernen
Vielen Dank für Eure Hilfe, das hat mir schon sehr geholfen
Ralf |
Re: Leerzeilen aus Ini-Datei entfernen
Zitat:
Wenn ich eine Section in eine Ini schreibe, dann gibt es dort keine einzige Leerzeile. Die ini sieht dann ungefähr so aus: [15.10.2005] TXT1=Value1 TXT2=Value2 [16.10.2005] TXT1=Value1 TXT2=Value2 usw. Vorraussetzung ist natürlich, dass man diesen Befehl nicht verwendet: Zitat:
|
Re: Leerzeilen aus Ini-Datei entfernen
Zitat:
Delphi-Quellcode:
So funzt es aber, ich hab's getestet !!!
procedure LeerzeilenLoeschen(FileName: String);
var S: TStringList; i: Integer; begin S:=TStringList.Create; S.LoadFromFile(FileName); i:=0; Repeat If S[i]='' then S.Delete(i) else Inc(i); Until i=S.Count; S.SaveToFile(FileName); S.Free; end; @Ralf Stehle: Ich bleib dabei, wenn man erst gar keine Leerzeilen einfügt (mit Absicht, also +#13#10 oder so), dann hat die ini auch gar keine ! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:45 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