AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Leerzeilen aus Ini-Datei entfernen

Ein Thema von Ralf Stehle · begonnen am 26. Nov 2005 · letzter Beitrag vom 27. Nov 2005
Antwort Antwort
Ralf Stehle

Registriert seit: 8. Aug 2003
121 Beiträge
 
Delphi 7 Professional
 
#1

Leerzeilen aus Ini-Datei entfernen

  Alt 26. Nov 2005, 23:46
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
Ini.EraseSection([16.10.2005]) wird aber die Leerzeile nicht gelöscht. Nach einigen Wochen entsteht so eine Ini-Datei mit ganz vielen Leerzeilen

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
Ini.WriteString(FormatDateTime('dd.mm.yyyy',now), 'TXT1' , s + #13#10) Ralf
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.262 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 00:09
Moin Ralf,

der ganz einfache Weg:
INI-Datei in eine TStringList laden, und dann mit

StringList.Text := StringReplace(StringList.Text,#13#10#13#10,#13#10,[rfReplaceAll]); die doppelten Zeilen entfernen (ungetestet).
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)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 00:15
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:
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;
Ich habe den Code zwar nicht getestet, aber theoretisch müsste das so funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von Binärbaum
Binärbaum

Registriert seit: 19. Jan 2005
Ort: Elstra
764 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 02:51
Zitat von Martin K:
Warum fügst du überhaupt erst Leerzeilen ein?
Vermutung:
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
There are exactly 10 kinds of people: those who understand binary, and those who don't.
---
"Software reift beim Kunden. Bei Hardware ist es anders: Hardware fault beim Kunden." - Rainer G. Spallek
  Mit Zitat antworten Zitat
Phistev
(Gast)

n/a Beiträge
 
#5

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 07:35
@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 Code-Lib
  Mit Zitat antworten Zitat
Ralf Stehle

Registriert seit: 8. Aug 2003
121 Beiträge
 
Delphi 7 Professional
 
#6

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 08:19
Vielen Dank für Eure Hilfe, das hat mir schon sehr geholfen

Ralf
Ralf Stehle
ralfstehle@yahoo.de
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 09:27
Zitat von Binärbaum:
Zitat von Martin K:
Warum fügst du überhaupt erst Leerzeilen ein?
Vermutung:
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
Also bei mir ist das nicht so !

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 von Ralf Stehle:
Übrigens wurde mal die Frage gepostet, wie man Leerzeilen einfügt, das geht einfach so
Ini.WriteString(FormatDateTime('dd.mm.yyyy',now), 'TXT1' , s + #13#10) Ralf
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Leerzeilen aus Ini-Datei entfernen

  Alt 27. Nov 2005, 09:46
Zitat von Phistev:
@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 Code-Lib
Hast recht, hab meinen Code geändert:
Delphi-Quellcode:
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;
So funzt es aber, ich hab's getestet !!!

@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 !
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
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 12:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf