Abspeichern von 2 Arrays mit verschiedenen Typen

LordoftheBord

Mitglied
Hallo

Folgendes Problem: Ich möchte 2 Arrays, der eine vom Typ Integer der andere von Typ String, in eine Datei speichern. Hab mal folgendes versucht, was aber nicht klappt. Es wird zwar eine Datei erstellt, jedoch bekomme ich beim öffnen die Fehlermeldung: "Fehler 100: Lesefehler von Diskette/Platte.

Abspeichern:
Code:
program sortieren; 

uses crt; 

var 
  i, j, x, eingabe, ersetzen: integer; 
  ersetzen2: string; 
  name: array[1..3] of string; 
  punkte: array[1..3] of integer; 
  speicher: file of integer; 
  speicher2: file of string; 
begin 
  clrscr; 
  for i:=1 to 3 do 
  begin 
    clrscr; 
    writeln('Bitte geben Sie ihren Namen ein'); 
    readln(name[i]); 
    for j:=1 to 5 do 
    begin 
      randomize; 
      x:=random (5)+1; 
      writeln('erraten Sie die Zahl'); 
      readln(eingabe); 
      if eingabe=x then 
      begin 
        punkte[i]:=punkte[i]+1; 
        writeln('richtig'); 
      end 
      else 
        writeln('falsch'); 
    end; 
    readln; 
  end; 
  for i:=1 to 3 do 
  begin 
    for j:=i+1 to 3 do 
    begin 
      if punkte[i] < punkte[j] then 
      begin 
        ersetzen:=punkte[j]; 
        ersetzen2:=name[j]; 
        punkte[j]:=punkte[i]; 
        name[j]:=name[i]; 
        punkte[i]:=ersetzen; 
        name[i]:=ersetzen2; 
      end; 
    end; 
  end; 

  for i:=1 to 3 do 
    writeln(name[i], ' = ' ,punkte[i]); 

  assign(speicher, 'a:\datei2.exe'); 
  assign(speicher2, 'a:\datei2.exe'); 
  rewrite(speicher); 
  rewrite(speicher2); 
  for i:=1 to 3 do 
  begin 
    write(speicher,punkte[i]); 
    write(speicher2,name[i]); 
  end; 
  close(speicher); 

  readln; 
end.

Laden
Code:
program la; 

uses crt; 

var 
  speicher: file of integer; 
  speicher2: file of string; 
  punkte: array [1..3] of integer; 
  name: array [1..3] of string; 
  i: integer; 
begin 
  clrscr; 
  assign(speicher, 'a:\datei2.exe'); 
  assign(speicher2, 'a:\datei2.exe'); 
  reset(speicher); 
  reset(speicher2); 
  repeat 
    for i:=1 to 3 do 
    begin 
      read(speicher,punkte[i]); 
      read(speicher2,name[i]); 
      write(name[i], ' = ' ,punkte[i]); 
    end; 
  until eof(speicher); 
  close(speicher); 
  readln; 
end.
Ich weis es es nicht das kleinste Programm, doch würde ich mich sehr darüber freuen, wenn sich jemand die Mühe macht und den Fehler sucht. Ich weis nimmer weiter.

mfg
Luziflash

<asphyxia> Bitte code-Tags benutzen, damit der Code lesbarer wird. ;)</asphyxia>
 
Ich würde mal spontan behaupten, dass der Zugriffsfehler auftritt, weil Du die Datei zweimal gleichzeitig mit Schreibzugriff öffnest. Absolut sicher bin ich aber nicht.
 
Ich habs mal umgeändert, so das ich die Datei nur einmal öffne. Aber jetzt bekomm ich auf den Bildschirm lauter Nullen ausgespuckt. Glaube also net das es daran gelegen hat. Trotzdem Danke.

Code:
...

begin
clrscr;
assign(speicher, 'a:\datei2.exe');
reset(speicher);
repeat
      for i:=1 to 3 do
      begin
      read(speicher,punkte[i]);
      writeln(punkte[i]);
      end;
until eof(speicher);
close(speicher);
readln;
end.
 
Zuletzt bearbeitet:
Wäre es nicht sowieso eigentlich besser, wenn Du die einzelnen Daten in einer Textdatei speicherst? Dann bräuchtest Du nicht einmal ein File of String und einmal ein File of Integer.
 
Zurück