Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Sortieren mithilfe von Indexdatein (https://www.delphipraxis.net/24773-sortieren-mithilfe-von-indexdatein.html)

Cobain 25. Jun 2004 23:04


Sortieren mithilfe von Indexdatein
 
Hallo Leute, ich muss ein Programm schreiben das eine Datei (f) sortiert mithilfe einder Indeexdatei (i). Die Datei f besteht nur aus einzelnen Buchstaben und jeder Element ist nur einmal vorhanden und nicht in der Reihenfolge.

Ich versteh leider nicht die logische verknüpfung zwischen der Indexdatei und der Ursprungsdatei. Die Indexdatei muss sich irgendwie die Stellebn merken an denen die Buchstaben sind.

Beispiel: In Datei f sind die Buchstaben f,k,a drinn dann soll praktisch in der Indexdatei dies geordet werden und da müsste 2,0,1 drinnstehen und somit durch den Platz an deren das Element steht geordnet sein.

Kann mir dabei jemand helfen ? Hat jemand schon etwas ähnliches programmiert ??

LG

Cobain

Nikolas 26. Jun 2004 06:50

Re: Sortieren mithilfe von Indexdatein
 
Zitat:

Beispiel: In Datei f sind die Buchstaben f,k,a drinn dann soll praktisch in der Indexdatei dies geordet werden und da müsste 2,0,1 drinnstehen und somit durch den Platz an deren das Element steht geordnet sein.
Ich versteh das jetzt so, dass du nachher in einer Datei k,a,f stehen haben willst.
Wenn nicht, :oops:

Ich würd das aus der Hüfte herraus so machen:
- array nehmen (array1)
- erster Buchstabe aus der Datei auslesen (str),
- erste Zahl aus der Indexdatei lesen (i),
- Buchstaben an passende Stelle ins array schreiben,also
Code:
 array1[i]:=str;
Wenn du das bis zum Ende der Datei machst, solltest du nachher mit ner for-Schleife alles aus dem array in eine Datei schreiben können.

TOX

Cobain 26. Jun 2004 10:55

Re: Sortieren mithilfe von Indexdatein
 
HiHO, jop sowas in der Art meinte ich.

schau mal hier : http://www.bbs-rodalben.de/delphi/da...ap5_seite1.htmhttp://www.bbs-rodalben.de/delphi/da...ap5_seite1.htm

Dann wirds dir bestimmt klar was ich meine. Ich weiß aber nicht wie ich das Programmieren soll ?

LG

Nikolas 26. Jun 2004 11:32

Re: Sortieren mithilfe von Indexdatein
 
So hab ich mir das auch vorgestellt. Wo liegt dein Problem? Kannst du Dateien öffnen, lesen und schreiben, mit arrays umgehen...?
Was hast du denn bis jetzt geschrieben...

Cobain 26. Jun 2004 23:05

Re: Sortieren mithilfe von Indexdatein
 
Delphi-Quellcode:
procedure TForm1.BSortClick(Sender: TObject);
var j:integer;
begin
LBSort.Clear;
reset(f);

for j:=1 to filesize(f) do
Zaehler:=0;

while not eof(f) do
read(f,wert);

if (zaehler=0) then kleinstes.zeichen:=wert.zeichen;
if (zaehler > 0) and (kleinstes.zeichen > wert.zeichen) and (wert.zeichen>letztes.zeichen)then
begin
kleinstes.zeichen:=wert.zeichen;
end;
if (zaehler > 0) and (kleinstes.zeichen < wert.zeichen) and (wert.zeichen>letztes.zeichen) then
Begin
reset(i);
stelle:=Zaehler;
seek(i,filesize(i));
write(i,stelle);
closefile(i);
letztes.zeichen:=wert.zeichen;

end;
Zaehler:=Zaehler+1;
LBsort.Items.add(wert.zeichen);
end;
meine Urliste also Datei (f) besteht wie schon gesagt aus einzeilnen buchstaben. Leider gibt er mir bis jetzt nur einen Buchstaben aus, und zwar setzt er den der am Ende der Urliste steht an den Anfang der zu Sortierenden?
Ich versteh nicht ganz wo mein Fehler liegt.
Falls noch Fragen zu Variablen sind bitte frage.
Kannst du mir helfen ?

LG

Cobe

Nikolas 27. Jun 2004 11:12

Re: Sortieren mithilfe von Indexdatein
 
Delphi-Quellcode:
for j:=1 to filesize(f) do
Zaehler:=0;
Egal wie groß die Datei ist, du hast immer Zaehler=0
Delphi-Quellcode:
while not eof(f) do
read(f,wert);
Hier liest du alle Buchstaben in eine Variable :gruebel:

Delphi-Quellcode:
reset(i);
Zitat:

Zitat von The Fine Manual
Die Prozedur Reset öffnet eine vorhandene Datei.
Ist F bereits offen, wird sie zuerst geschlossen und dann erneut geöffnet. Nach dem Öffnen wird der Dateizeiger an den Anfang der Datei gesetzt. :warn:

Wenn du das vor jedem Schreiben machst, ist es klar, dass du am Ende nur einen Eintrag hast.

Zitat:

Falls noch Fragen zu Variablen sind bitte frage.
Wenn dir klar ist, dass da was unklar ist, ist es doch klar, dass du da von selbst etwas aufklären solltest.
- Ein paar Kommentare und Einrückungen erleichtern das Lesen und dir fallen vielleicht selbst ein paar Fehler auf.

Für was hast du denn eigenrlich die ganzen if-KLammern??? Du weisst doch schon in welche Reihenfolge, die Daten gehören; das sortieren hat dir doch schon derjenige abgenommen, der die zweite Datei geschrieben hat.

Hast du dir mal meinen Vorschlag mit dem Array abgeschaut? Ich denke dass, das recht einfach zu machen ist.

Cobain 29. Jun 2004 18:15

Re: Sortieren mithilfe von Indexdatein
 
HiHo , ich habe den Quelltest "weiterentwickelt"! Ich habe in meinen Urdatei (qwertzuiopasdfghjklyxcvbnm) stehen !
Das programm sortiert bis (p) und dann folgen nur noch qqqqqqq
Wieso ? Was habe ich denn in meinem Quelltext falsch gemacht ??

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  reset(f);
  eingabe.Zeichen:=Edit1.Text;
  seek(f,filesize(f));
  write(f,eingabe);
  closefile(f);
  Edit1.SetFocus;

end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  reset(f);
  rewrite(i);
  Stelle:=0;
  Zaehler:=0;
  letzteskleines.zeichen:=' ';
  while filesize(i) < filesize (f) do
  begin //Begin von while filesize
  edit2.Text:=IntToStr(Filesize(i));
  edit3.Text:=IntToStr(Filesize(f));
  reset(f);
  Zaehler:=0;
    while not eof(f) do
    begin //Begin von while not eof
      read(f,wert);
      if (Zaehler = 0) then
      begin  //Begin A
        Kleinstes.Zeichen:=Wert.Zeichen;
        Stelle:=Zaehler;
      end;  //End A
      if (Zaehler > 0) and (wert.Zeichen < Kleinstes.Zeichen) and (LetztesKleines.Zeichen = '') then
      begin //Begin B
        Kleinstes.Zeichen:=Wert.Zeichen;
        Stelle:=Zaehler;
      end;  //End B
      if (Zaehler > 0) and (wert.Zeichen < Kleinstes.Zeichen) and (wert.zeichen > LetztesKleines.Zeichen) then
      begin //Begin C
        Kleinstes.Zeichen:=Wert.Zeichen;
        Stelle:=Zaehler;
      end;  //End C
      Zaehler:=Zaehler+1;
    end; // end von while not eof
    if Zaehler = filesize(f) then
      begin  //Begin D
        reset(i);
        seek(i,filesize(i));
        write(i,Stelle);
        Listbox2.Items.Add(Kleinstes.Zeichen);
        LetztesKleines.Zeichen:=Kleinstes.Zeichen;
      end;  //End D
  end; // end von while filesize
closefile(i);
end;
CyA

Cobain

Nikolas 29. Jun 2004 19:34

Re: Sortieren mithilfe von Indexdatein
 
Nochmal kurz ne Frage zum Anfang: Du hast eine Datei mit Daten und eine Datei in der steht an welchen Platz die Daten aus der ersten Datei eigentlich gehören, oder?

Dein Code sieht irgendwie danach aus, als würdest du keine Indexdatei benutzen.
Delphi-Quellcode:
rewrite(i);
Was soll denn diese Zeile bewirken?? Damit überschreibst du eine Datei.

Was ist eigentlich die Grundidee hinter deiner procedure? Ich hab irgendwie Probleme mich darin zurechtzufinden. :gruebel: Kommentare würden da helfen.

Zitat:

Das programm sortiert bis (p) und dann folgen nur noch qqqqqqq
Was wird denn ausgegeben?

Cobain 29. Jun 2004 19:40

Re: Sortieren mithilfe von Indexdatein
 
Jop ich habe eine Datei mit dem eintrag : qwertzuiopasdfghjklyxcvbnm ! Datei (f)
Ausgeben wird: abcdefghijklmnopqqqqqqqqqq !
Und diese sollen geordnet werden indem eine ihr Stelle in richtiger Reihenfolge in eine andere Datei, Indexdatei, schreibt !!

Komisch ist wenn man an den Anfnag der Datei ein z schreibt anstatt ein q dann funzt es.
Also gehe ich davon aus das er nur soweit sortiert, bis er das erste Element in der Datei im Alphabet erreciht hat und dann hört er auf, Aber ich versteh net warum ?

http://home.arcor.de/dasmol/ <= Dort kannste das Prog laden.

Nikolas 29. Jun 2004 19:54

Re: Sortieren mithilfe von Indexdatein
 
Zitat:

Und diese sollen geordnet werden indem eine ihr Stelle in richtiger Reihenfolge in eine andere Datei, Indexdatei, schreibt !!
Das steht aber im Widerspruch zu deinem Link im zweiten Post.
So wie ich die Sache verstanden habe, hast du eine Datei mit Daten und eine Indexdatei.

Bsp: Die Datei mit Daten: [c,a,b]; Die Indexdatei: [2,3,1].

Diese Indexdatei würde die erste Datei so sortieren, dass nachher Buchstaben in alphabetischer Reihenfolge in einer dritten Datei wären.
Denn als erstes kommt der 2. Eintrag in die neue Datei, das 'a'.
Dann kommt der 3. Eintrag in die neue Datei, das 'b'
...

Mit einer anderen Indexdatei ( [1,3,2] ) könntest du auch die Reihenfolge umdrehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.
Seite 1 von 2  1 2      

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