Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi textdatei sortieren (https://www.delphipraxis.net/40921-textdatei-sortieren.html)

herrentor 23. Feb 2005 09:38


textdatei sortieren
 
moin

ich möchte gerne eine textdatei sortieren lassen. und zwar so, dass keine doppelten einträge in einem bereich vorkommen, sondern dafür ein zähler um eins erhöht wird.

beispiel:

[22.02.05]
werder; wird; meister;
werder; ist; meister;
bayern; wird; letzter;

[23.02.05]
werder; wird; meister;


es soll also unter einem datum nicht 2mal die gleiche zeile auftreten. mit databanken hab ich mich noch nie beschäftigt, gibt es andere möglichkeiten?

alcaeus 23. Feb 2005 09:42

Re: textdatei sortieren
 
Moin herrentor,

such mal hier im Forum, das Thema gabs schon öfters (auch in letzter Zeit)

Greetz
alcaeus

herrentor 23. Feb 2005 09:48

Re: textdatei sortieren
 
ich weiß, ich hatte vor nicht ganz so langer zeit eine ähnliche frage gestellt, aber das ergebniss war, dass ich mit einer *.ini datei versuchen soll, hat aber nicht hingehauen und jetzt hab ich die ansprüche soweit zurückgeschraubt, dass es vielleicht doch in einer stringlist sortiert werden kann, oder nicht?

Schuster 23. Feb 2005 10:03

Re: textdatei sortieren
 
Mit einer Stringlist sollte das funken

Delphi-Quellcode:
MeineString_List : TStringlist;

Procedure xxxx
begin
MeineString_List:=TStringlist.Create;

    try
        MeineString_List.LoadFromFile(Pfad);
    except
    begin
        ShowMessage('Fehler beim Laden der Datei');
        MeineString_List.free;
        exit;
    end;
end;

function vergleiche(x:Integer):String;   //x Ist der aktuelle String (count)
var temp: string;
begin
    temp:= trim(copy(MeineString_List.Strings[x],41,30));
    Hier dann noch die Stringlist nach temp durchsuchen und vergleichen.
    usw.
end;

herrentor 23. Feb 2005 10:15

Re: textdatei sortieren
 
ist das bei deinem ansatz nicht so, dass man in einer datei dann auch nur insgesamt einmal ein string vorkommen kann? die datei darf durchaus mehrere male den string enthalten, jedoch nicht zwischen einem datum und dem nächsten.

Schuster 23. Feb 2005 10:22

Re: textdatei sortieren
 
Zitat:

ist das bei deinem ansatz nicht so, dass man in einer datei dann auch nur insgesamt einmal ein string vorkommen kann? die datei darf durchaus mehrere male den string enthalten, jedoch nicht zwischen einem datum und dem nächsten.
Ja mein ursprünglicher Code ist so aufgebaut.

Aber du kannst dir ja den Index von einem Datum bis zum nächsten merken und dann nur diesen Bereich nach
doppelten Einträgen durchforsten.

herrentor 23. Feb 2005 10:25

Re: textdatei sortieren
 
das problem ist nur, dass es keine festen indizes gibt. es stehen immer unterschiedlich viele einträge unter'm datum. angenommen ich würde das datum auch noch rausnehmen, wie kann denn die zeilen vergleichen, ich durchschau irgendwie dein programm nicht. ich hätte das jetzt so gemacht:

Delphi-Quellcode:
if fileexists('C:\test.txt') then
        begin
        sl.LoadFromFile('C:\test.txt');
        if pos('werder; wird; meister', sl.Text)=0 then
        begin
         sl.Add('werder; wird; meister');
         sl.SaveToFile('C:\test.txt');
        end;
        end;
aber ich kann doch nicht alle möglichen varianten (werder; wird; meister/ werder; ist; meister/ etc.) hinschreiben, wie kann ich das vereinfachen und wie kann ich in die datei einen counter einfügen, der sich dann bei else erhöht?

Sharky 23. Feb 2005 10:28

Re: textdatei sortieren
 
Zitat:

Zitat von herrentor
das problem ist nur, dass es keine festen indizes gibt. es stehen immer unterschiedlich viele einträge unter'm
datum.

Ich sehe einfach das Problem nicht ;-)
Lade die Datei in ein StringList.
Jetzt kopierst Du alle Einträge zwichen dem ersten und nächsten "Datum" in eine zweite SL. Diese sortierst Du und prüfst auf doppelte Einträge. Danach verschiebst Du diese in eine dritte Stringlist.
Jetz wiederholst Du dies für alle Einträge die zwichen zwei Daten stehen.
Fertig.

herrentor 23. Feb 2005 10:36

Re: textdatei sortieren
 
hast du den befehl für das herauskopieren zwischen datum1 und datum2 vielleicht parat?

Sharky 23. Feb 2005 10:42

Re: textdatei sortieren
 
Zitat:

Zitat von herrentor
hast du den befehl für das herauskopieren zwischen datum1 und datum2 vielleicht parat?

Dafür gibt es keinen "Befehl". Du musst schon etwas dafür Programmieren. Aber das sollte doch kein Problem sein.
Du weisst ja wie eine Textzeile aussieht in der das Datum steht.

herrentor 23. Feb 2005 11:39

Re: textdatei sortieren
 
hab das jetzt mal versucht. programm macht auch keine zicken, sortiert aber auch nicht.

Delphi-Quellcode:
if pos('['+Statusbar1.Panels.Items[1].Text+']', sl1.Text)=0 then
       begin
       writeln(text_datei,'['+StatusBar1.Panels.Items[1].Text+']');
       end else
       begin
       m:=sl1.IndexOf('['+StatusBar1.Panels.Items[1].Text+']');

       for l:=sl1.IndexOf('['+StatusBar1.Panels.Items[1].Text+']')-1 to m do
           sl1.sorted:=true;

       end;
in StatusBar1.Panels.Items[1] läuft das datum.

Torpedo 23. Feb 2005 12:22

Re: textdatei sortieren
 
Zitat:

Zitat von herrentor
aber ich kann doch nicht alle möglichen varianten (werder; wird; meister/ werder; ist; meister/ etc.) hinschreiben, wie kann ich das vereinfachen?

Such mal nach ExplodeExplode :)

herrentor 23. Feb 2005 12:45

Re: textdatei sortieren
 
das hilft mir nicht viel weiter. ich benötige eine schleife die vom string aktuelles datum bis zum letzten string sortiert.

Die Muhkuh 23. Feb 2005 13:24

Re: textdatei sortieren
 
Such doch einfach immer nach dem ";" und kopiere diesen Wert in eine andere StringList. Dann lässt du diese durchlaufen und löscht vorhandene Einträge.

herrentor 23. Feb 2005 13:29

Re: textdatei sortieren
 
das wird glaub ich so nichts. ich hab jetzt ne datenbank angelegt, ma sehen ob das damit klappt. trotzdem danke

Schuster 23. Feb 2005 14:00

Re: textdatei sortieren
 
Mit dieser Function bekommst du die Position des ersten und nächsten Datums:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var x,a1,a2 : integer;
temp: string;
begin
    MeineStrinList:=TStringList.Create;

    MeineStrinList.LoadFromFile('C:\Programme\Borland\Delphi7\Projects\Test\Test.txt');

    x:=0;
    while x <= MeineStrinList.Count-1 do
    begin
        try
        strtodate( trim(copy(MeineStrinList[x],2,8)));
        temp:= trim(copy(MeineStrinList[x],2,8));
        if inttostr(a1) = '' then
            a1:= x     //Position erstes Datum
        else
            a2:= x;    //Position zweites Datum

        inc(x);
        except
        on EConvertError do
         inc(x);
        end;


    end;
    ShowMessage(inttostr(a1)+ inttostr(a2));
end;

herrentor 23. Feb 2005 14:22

Re: textdatei sortieren
 
ok danke, dass hilftmir weiter


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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