AGB  ·  Datenschutz  ·  Impressum  







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

INI-Datei sortieren

Ein Thema von st18061974 · begonnen am 14. Aug 2005 · letzter Beitrag vom 18. Aug 2005
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 21:52
Zitat von st18061974:
Und ich würde ihm einfach ein Tool bauen wollen das diese INI sortiert. Ohne das man noch irgend etwas machen muß.
Wenn das so ist, dann probiere mal, ob du diesen Code (mit D5?) zum Laufen bringst:

Delphi-Quellcode:
uses
  Classes,
  IniFiles,
  SysUtils;

const
  tmj = 'dd.mm.yyyy';
  jmt = 'yyyy-mm-dd';

function ReformatStr(const s, sRule: string): string;
var
  i: integer;
begin
  Result := '';
  for i := 1 to Length(sRule) do
    Result := Result + s[Ord(sRule[i])];
end;

function ZeroPad(const i: cardinal; size: byte): string;
begin
  Result := IntToStr(i);
  if Length(Result) < size then
    Result := StringOfChar('0', size - Length(Result)) + Result;
end;

procedure IniSort;
var
  ini: TMemIniFile;
  s, sKey, sSection: string;
  slSort, slValues, slSection: TStringList;
  i, j, iAnzahl: integer;
begin
  slSort := TStringList.Create;
  slSection := TStringList.Create;

  ini := TMemIniFile.Create(ParamStr(1));
  iAnzahl := ini.ReadInteger('.', 'anzahl', 0);
  for i := 1 to iAnzahl do begin
    sSection := IntToStr(i);
    if ini.SectionExists(sSection) then begin
      s := ini.ReadString(sSection, 'Datum', '');
      s := ReformatStr(s, #7#8#9#10#4#5#1#2);
      ini.ReadSectionValues(sSection, slSection);
      s := s + ZeroPad(i, 4);
      slValues := TStringList.Create;
      slValues.Assign(slSection);
      slSort.AddObject(s, slValues);
    end;
  end;
  slSort.Sort;
  ini.Clear;
  ini.WriteString('.', 'Anzahl', IntToStr(iAnzahl));
  for i := 0 to slSort.Count - 1 do begin
    sSection := Copy(slSort[i], 9, 4);
    sSection := IntToStr(StrToInt(sSection));
    slSection := TStringList(slSort.Objects[i]);
    for j := 0 to slSection.Count - 1 do begin
      sKey := slSection.Names[j];
      ini.WriteString(sSection, sKey, slSection.Values[sKey]);
    end;
    slSection.Free;
  end;
  ini.UpdateFile;
  ini.Free;
  slSort.Free;
end;
Grüße vom marabu
  Mit Zitat antworten Zitat
st18061974

Registriert seit: 5. Feb 2003
52 Beiträge
 
Delphi 5 Enterprise
 
#12

Re: INI-Datei sortieren

  Alt 15. Aug 2005, 18:59
@marabu:

Zunächst mal VIELEN, VIELEN, VIELEN Dank, das Du Dir die Mühe gemacht hast das zu Proggen. Es ist rasend schnell. Aber leider sortiert es nicht so wie ich es erhoffte.

Nach was da genau sortiert wird kann ich nocht nicht mal sagen, es ist irgendwie umsortiert, aber ich finde kein Schema. Und leider bleiben ja auch die Nummerierungen gleich. Doch genau diese sollen ja nach Datum sortiert sein.

@Jelly:

Muß für die Komponete nicht auf dem anderen Rechener auch die BDE installiert sein?

MfG
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#13

Re: INI-Datei sortieren

  Alt 16. Aug 2005, 07:03
Hi st18061974,

ich vermute mal, du musst noch das Literal 'Datum' in meinem Code nach 'date' abändern, damit deine Datei wirklich sortiert wird...

Grüße vom marabu
  Mit Zitat antworten Zitat
st18061974

Registriert seit: 5. Feb 2003
52 Beiträge
 
Delphi 5 Enterprise
 
#14

Re: INI-Datei sortieren

  Alt 17. Aug 2005, 16:30
Hallo marabu

Nein, das habe ich natürlich gemacht. Und ich habe jetzt das "Sortiershema" erkannt.

Die in der INI gespeicherten Einträge werden nach der ersten Zahl sortiert. Also 1,2, ... 10,11 u.s.w. und zwar im Bezug auf Monat und Jahr. Allerdings von 2000 nach 2005 und dann von 1998 und 1999. Noch dazu ist mittedrin irgendwie ein Sprung an dem sie wieder bei 2000 anfängt. Ich vermute mal, da ich den Script nur bedingt kappiere, das es daran liegt das hier Strings sortiert werden und keine Daten.

Das ist aber auch alles nicht so Wild. Die INI wird nämlich nicht umsortiert sonder nur umstruckturiert. Tatsächlich bleiben alle Einträge bei Ihrem jeweiligen Zähler. Ich habe hier mal ein Vorher - Nachher - Bild. Bei diesem auslesen habe ich vor dem sortieren die letzte 100 ausgelesen und danach. Wie man sehen kann hat sich da nicht verändert.

http://home.arcor.de/st18061974/test/vornach.gif

MfG
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: INI-Datei sortieren

  Alt 17. Aug 2005, 18:21
Du Schlingel,

in deinem ersten Posting hast du das Datum mit führenden Nullen bei Tag und Monat angegeben und darauf ist mein Code ausgerichtet. Wenn du ohne führende Nullen arbeiten willst, dann musst du die Funktion ReformatStr() durch die Funktion ReformatDate() ersetzen:

Delphi-Quellcode:
function ReformatDate(s: string): string;
var
  i, d,m,y: integer;
begin
  i := Pos('.', s);
  d := StrToInt(Copy(s, 1, Pred(i)));
  Delete(s, 1, i);
  i := Pos('.', s);
  m := StrToInt(Copy(s, 1, Pred(i)));
  Delete(s, 1, i);
  y := StrToInt(s);
  Result := ZeroPad(y, 4) + ZeroPad(m, 2) + ZeroPad(d, 2);
end;
Heitere Grüße vom marabu
  Mit Zitat antworten Zitat
st18061974

Registriert seit: 5. Feb 2003
52 Beiträge
 
Delphi 5 Enterprise
 
#16

Re: INI-Datei sortieren

  Alt 18. Aug 2005, 16:47
Ja, Super, nochmals vielen,vielen Dank.

Doch weiterhin bleibt das Problem, das die INI in ihrer strucktur zwar umsortiert wird aber eben die Einträge ihre Zählöer behalten.

Soll heißen ...

[123]
date=1.1.2004

[456]
date=1.1.2003

wird sortiert nach

[456]
date=1.1.2003

[123]
date=1.1.2004

Bei auslesen allerdings ist das völlig egal. Und die Reihenfolge ist somit nicht geändert.

Ich habe natürlich bereits versuch da durchzusteigen ... leider ohne Erfolg. Ich krieg das nicht hin.

MfG
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: INI-Datei sortieren

  Alt 18. Aug 2005, 16:55
Du verwirrst mich. Hat die Zahl, die den Abschnitt kennzeichnet, keine Bedeutung? Du willst die einfach neu durchnummerieren? Wenn dabei eventuelle Lücken verschwinden dürfen - nichts leichter als das. Ändere einfach die Zeile mit dem WriteString() aus:

Delphi-Quellcode:
...
ini.WriteString(IntToStr(Succ(i)), sKey, slSection.Values[sKey]);
...
marabu
  Mit Zitat antworten Zitat
st18061974

Registriert seit: 5. Feb 2003
52 Beiträge
 
Delphi 5 Enterprise
 
#18

Re: INI-Datei sortieren

  Alt 18. Aug 2005, 18:33
VIELEN, VIELEN, VIELEN, VIELEN, VIELEN, VIELEN, VIELEN DANK.

So klappts. Das ganze Tool (incl. einer "Gauge" also dieser Fortschrittanzeige) hat jetzt gerade mal 382kb. Und es braucht für mein 2500 Einträge-Test-INI ca 3-4 Sekunden.

Nochmals, VIELEN Dank, MfG
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 05:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz