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 1 von 2  1 2      
st18061974

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

INI-Datei sortieren

  Alt 14. Aug 2005, 12:51
Hallo

Ich nutze eine INI-Datei als "Datenbank".

Diese sieht in etwa so aus:

[.]
anzahl=2134

[1]
date=08.12.1998
aus=3,2
ein=0
z=1
e=2

...

[2134]
date=20.07.2005
aus=3,2
ein=0
ss=2
fz=1
ns=1
nz=1

Jeder dieser Einträge enthält ein Datum. Alle anderen Einträge können variieren. Das Datum kann aber "von Hand" gesetzt werden. So kommt es vor das die Einträge nicht in der richtigen Reihenfolge sind. Das ist jedoch für den Programmablauf sehr wichtig. Da sonst die Anzeigen falschsein können.

Nun habe ich mir eine Sortierfunktion geschrieben die aber leider sehr Resourcenfressend ist. Und mich so etwas festgefahren.

Vielleicht kann mir jemand helfen und mir ein paar Tipps geben wie man das möglichst Simple machen kann (so das es auch ein 286'er schafft).

Vielleicht noch schnell hinten ran: Das Programm ist aus der Zeit in der ich mich noch nicht an Datenbanken traute. Und nun ist es auch nicht mehr möglich es zu ändern. Also es helfen mir keine "Datenbank-Tipps". Bitte nur Hinweise wie ich diese INI nach Datum sortieren kann.

Vielen Dank im vorraus
MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 13:01
Sorry, aber dazu will ich dir nicht wirklich einen Tipp geben. Die Lösung ist nun mal eine Datenbank. Ini Files sind dafür einfach nicht gedacht.

Aber das wolltest du ja gerade nicht hören. Aber dennoch wäre es vielleicht eine Ueberlegung wert, auf Datenbanken umzusteigen, alleine schon wegen der Performance.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 13:14
Wenn du schon eine Ini als Datenbank missbrauchst, dann bitte richtig . Bei einer Ini kann es nicht auf die Reihenfolge, sondern nur auf die Struktur der Werte ankommen. Deine Routine zum Einlesen muss also einen (Denk-)Fehler haben. Wenn du die Datei doch lieber sortieren willst: Zeig doch erstmal deinen bisherigen Code.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
zappel

Registriert seit: 30. Jan 2004
65 Beiträge
 
Delphi 2005 Personal
 
#4

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 13:17
Das vertauschen der einzelnen Einträge sollte kein Problem sein. Die Frage, die sich mir dabei als erstes gestellt hat: Wie greift man effizient auf das Datum am Index X zu?
Effizient kann nun bedeuten schnell oder ressourcensparend.

Eine schnelle Möglichkeit zum Sortieren könnte so aussehen:

Eine Funktion berechnet die Zeilennummer des jeweiligen Datums und speichert diese in einem Array. Nun könnten mittels Heap-Sort (hier effizienter als Quicksort, da das Feld schon vorsortiert ist) schnell die einzelnen Einträge umsortiert werden. Dabei bleibt aber zu beachten, dass die im Array gespeicherten Zeilen auch nach Tauschvorgängen im Feld immer noch die korrekten Daten enthalten. Dafür müsste dann die Methode zum Vertauschen sorgen.

Dieser Vorschlag hat den Nachteil, das ein großes Array erzeugt werden muss. Dafür sollte das Sortieren aber schnell funktionieren.

Eine ressourcensparende Variante fällt mir spontan nicht ein...
  Mit Zitat antworten Zitat
st18061974

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

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 13:40
Den Code zum sortieren direkt habe ich noch nicht geschrieben. Aber ich habe in einem anderen Programm das auch schon so gemacht. Bei dem kam es auf das löschen eines Eintrages an. Dieser Code enthält für alle Einträge ein eigenes Array das in dem Fall "NUR" für 1000 Einträge arbeitet. Wenn in der INI-Datei nun ein Eintrag gelöscht werden soll rücken alle Einträge um einen nach vorn. Diese dauert auf einem P2 mit 500MHz ca. 2min.

Wenn ich auf dieselbe Weise diese INI-Datei sortiere habe ich nun zwei Probleme. Zum einen ist der Zeitfaktor bei ca. 2500 Einträgen enorm. Und zum anderen ist bei dieser INI nicht immer jeder Eintrag vorhanden (aus Dateigrößengründen).

Nun hofft ich eigentlich das einer von Euch soetwas wie:

-Das wurde schon gefragt ... Kuck mal da. Oder
-Nutze doch einfach "SORTINI". Oder
-So etwas in der Art

Ich möchte die Funktion um das zu sortieren nicht Stundenlang tippen um dann zu sagen das es einfach viel zu lange dauert und das ganze dann wieder löschen.

Mein Problem ist das man sich die letzten 10 bis 50 Einträge dieser "INI" anzeigen lassen kann. Und diese müssen eben die aktuellsten Daten sein.

Vielleicht gibt es ja einen anderen Weg das zu machen. Aber mir raucht einfach nur der Schädel und ich krieg das nicht mehr hin. Immer wenn ich mich ran setze komm ich wieder in die selbe Richtung. Und das hat einfach keinen Sinn.
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#6

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 13:55
Eventuell würde es auch schon Sinn machen, beim Einfügen eines neuen Records diese sofort an der richtigen Stelle einzufügen. Beim Aendern ebenfalls... Das macht natürlich nur Sinn, wenn du immer nur nach Datum sortieren willst, und nicht auch mal nach anderen Werten. Aber wie gesagt, setze um auf eine DB. So aufwendig ist das sicherlich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von Surrounder
Surrounder

Registriert seit: 26. Sep 2003
Ort: Stuttgart
177 Beiträge
 
Delphi 2006 Professional
 
#7

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 14:32
Mich würde mal der Grund interessieren warum eine DB nicht mehr möglich ist? Ich denke ein kleiens Tool zu schreiben das vorhandenen INI-Files in die DB schreibt ist einfacher als sich den Kopf über eine Sortierfunktion für eine INI zu zerbrechen. Oder gibt es einen anderen Grund?
In C geschrieben und schön war zuletzt Franz Schuberts 9. Symphonie
  Mit Zitat antworten Zitat
marabu

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

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 14:46
Grundsätzlich ist die Erstellung einer Sortierfolge für die beschriebene Steuerdatei nicht schwierig. Mich irritieren nur Anforderungen, wie "muss sortiert gespeichert werden, sonst Anzeigeproblem" und "Lücken im Nummerkreis wegen Dateigrößenproblem". Wenn die Umstellung auf eine lokale Datenbank keine Option ist, dann kann man das Größenproblem durch eine BigIni-List aus der Welt schaffen. Die Sortierfolge lässt sich dann durch einen sortierfähigen Datum-String (DIN 2005-08-14 oder ANSI 20050814) in einer TStringList herstellen. Mit sl.AddObject(sDatum, Pointer(key)) kann dann durch die automatische Sortierung (sl.Sorted := true) ein Index erstellt werden, der mit Integer(sl.Objects[i]) die indexsequentielle Abschnittsnummer liefert.

Grüße vom marabu
  Mit Zitat antworten Zitat
st18061974

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

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 19:30
Also ...

Dieses Prog ist seit X Jahren im Einsatz. Wird auf X Rechnern verwendet. Selbst wenn ich die Source dazu finde habe ich, denke ich zumindest, nicht die Muse mich da nochmal reinzulesen und das ganze auf eine DB zu ändern.

Nun hat mich einer dieser X User wegen dem Problem der Anzeige der Einträge kontaktiert.

Und ich würde ihm einfach ein Tool bauen wollen das diese INI sortiert. Ohne das man noch irgend etwas machen muß.

@marabu:

Das klingt als ob es eine eifache Lösung gebe. Ich verstehe nur leider nur BAHNHOF. Könntest du das eventuell etwas einfacher und genauer beschreiben?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#10

Re: INI-Datei sortieren

  Alt 14. Aug 2005, 19:49
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ß.
Jetzt kann ich deine Argumente endlich verstehen.

Ich hätt da noch so eine Idee, wie du dieses Tool aufbauen kannst, denn es spricht ja nun nichts dagegen, für dieses Tool eine Datenbank zu verwenden. Da fällt mir spontan die VirtualTable Komponente von crlab.com ein, die im Paket MyDAC drinn ist. Ist ne Art Datenbank im Speicher, aber mit allem was SQL zu bieten hat... Also hier meine Idee:
1. Exportiere die gesamte INI Datei in eine Datenbanktabelle. Die Spaltennamen kannst du ja nach den Values aus der INI basieren. Als Primary Key nimmst du die Section Ueberschrift.
2. Du baust die ein SQL Statement select * from Tabelle order by Datum 3. Du durchläufst dein Resultset und erstellt die INI Datei komplett neu indem du einfach jeden einzelnen Record exportierst.

Ich könnt mir vorstellen, dass das bei 2000 Records noch ziemlich flott vonstatten geht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 14:02 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