Entwickler-Ecke

Dateizugriff - Sortieren und Index-Datei


Mav - Do 18.09.03 23:35
Titel: Sortieren und Index-Datei
Hi Leute,

also ich will den Inhalt einer Datei sortieren und in einer Index-Datei speichern. Mein Problem ist jetzt, dass ich immer EoF-Fehler hab und die Index-Datei teils extrem groß wird.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
procedure TForm1.Nummersortieren;
var i: integer;
begin
     assignfile(nummer, 'nummer.dat');
     if fileexists('nummer.dat'then
        reset(nummer)
     else rewrite(nummer);

     assignfile(datei, 'daten.dat');
     if fileexists('daten.dat'then
        reset(datei)
     else rewrite(datei);

     
     sortieren.posi:= 0;
     while not eof(datei) do
     begin
          read(datei, game);
          merke:= game.bestellnr;
          for i:= 0 to filesize(datei)-1 do
          begin
               read(datei, game);
               if merke > game.bestellnr then
               begin
               merke:= game.bestellnr;
               sortieren.posi:= filepos(datei) - 1;
               end;
               if eof(datei) then
               begin
               write(nummer, sortieren);
               seek(datei, 0);
               end;
          end;
     end;
     closefile(datei);
     closefile(nummer);
end;


AndyB - Fr 19.09.03 00:28

Warum holst du das

Delphi-Quelltext
1:
2:
3:
4:
5:
               if eof(datei) then
               begin
               write(nummer, sortieren);
               seek(datei, 0);
               end;

nicht aus der inneren Schleife in die äußere Schleife? Denn wenn eof(datei) True wird, dann wird die innere Schleife sowieso verlassen.


Mav - Do 09.10.03 14:03

Ich hab das ganze nochmal neu geschrieben.
Nun ist aber mein Problem folgendes. Ich hab drei Einträge in der zu sortierenden Datei. Der Mittlere Wert wird an 1. und 3. Position ausgegeben, der kleinste an 2. und der größte gar nicht.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
procedure TForm1.Nummersortieren;
var merke,i,j,k,ende: integer;
begin
     assignfile(nummer, 'nummer.dat');
     if fileexists('nummer.dat'then
        reset(nummer)
     else rewrite(nummer);

     assignfile(datei, 'daten.dat');
     if fileexists('daten.dat'then
        reset(datei)
     else rewrite(datei);

     i:= 0;
     ende:= filesize(datei);

     seek(datei,0);
     ende:= filesize(datei) - 1;
     k:= 0;
     j:= 0;
     i:= 0;
     sortieren.posi:= 0;

     for k:= 0 to ende do
     begin
          read(datei,game);
          sort[k]:= game.bestellnr;
          posi[k]:= filepos(datei) - 1;
     end;
     seek(datei,0);

     for j:= 0 to ende do
     begin
          for i:= 0 to ende do
          begin
               if sort[i] > sort[i+1then
               begin
                    merke:= sort[i];
                    sort[i]:= sort[i+1];
                    sort[i+1]:= merke;
                    merke:= posi[i];
                    posi[i]:= posi[i+1];
                    posi[i+1]:= merke;
               end;
          end;
     end;

     for k:= 0 to ende do
     begin
          sortieren.posi:= posi[k];
          write(nummer,sortieren);
     end;
     closefile(datei);
     closefile(nummer);
end;