Autor Beitrag
Mav
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 18.09.03 23:35 
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.

ausblenden volle Höhe 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Fr 19.09.03 00:28 
Warum holst du das
ausblenden 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.

_________________
Ist Zeit wirklich Geld?
Mav Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: 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.


ausblenden volle Höhe 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;