![]() |
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 |
Re: Sortieren mithilfe von Indexdatein
Zitat:
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:
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.
array1[i]:=str;
TOX |
Re: Sortieren mithilfe von Indexdatein
HiHO, jop sowas in der Art meinte ich.
schau mal hier : ![]() ![]() Dann wirds dir bestimmt klar was ich meine. Ich weiß aber nicht wie ich das Programmieren soll ? LG |
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... |
Re: Sortieren mithilfe von Indexdatein
Delphi-Quellcode:
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?
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; Ich versteh nicht ganz wo mein Fehler liegt. Falls noch Fragen zu Variablen sind bitte frage. Kannst du mir helfen ? LG Cobe |
Re: Sortieren mithilfe von Indexdatein
Delphi-Quellcode:
Egal wie groß die Datei ist, du hast immer Zaehler=0
for j:=1 to filesize(f) do
Zaehler:=0;
Delphi-Quellcode:
Hier liest du alle Buchstaben in eine Variable :gruebel:
while not eof(f) do
read(f,wert);
Delphi-Quellcode:
reset(i);
Zitat:
Zitat:
- 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. |
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:
CyA
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; Cobain |
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:
Was soll denn diese Zeile bewirken?? Damit überschreibst du eine Datei.
rewrite(i);
Was ist eigentlich die Grundidee hinter deiner procedure? Ich hab irgendwie Probleme mich darin zurechtzufinden. :gruebel: Kommentare würden da helfen. Zitat:
|
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 ? ![]() |
Re: Sortieren mithilfe von Indexdatein
Zitat:
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. |
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