Archiv verlassen und diese Seite im Standarddesign anzeigen : Turbo Pascal Speicherzuweisung
Denial of Service
07.03.2005, 16:36
Leute ich hab ma wieder keinen Plan und schreib mir hier die Finger wund.
Ich schreibe am Donnerstag eine Arbeit über Speicherzuweisung in Informatik.
Folgendes jetzt:
Ich soll ein Programm schreiben, dass Zahlen, die ich eingebe auf der Festplatte (!!! nicht RAM) speichert. Noch besser wäre es mit Namen.
Außerdem soll ich hinterher durch eingeben der Speicherstelle an der der Name steht den Namen ändern können.
Hat hier irgendjemand ne Ahnung wie das geht? Oder könnte mir jemand einen Link geben, dass ich nicht unwissend bleibe? Ich lese gerne viel, aber am liebsten auf deutsch ^^
MfG DoS
Denial of Service
07.03.2005, 17:00
Gut DoS hat doch noch was zu stande gebracht :mauer:
Soweit komme ich, nur wie lese ich jetzt einzelne Stellen der Daten aus?
PROGRAM Zahlen;
USES crt;
TYPE dateityp=FILE OF Integer;
VAR datei:dateityp;
zahl:Integer;
PROCEDURE Datei_anlegen;
BEGIN
ASSIGN (datei,'C:zahlen.dta');
REWRITE(datei);
CLOSE(datei);
END;
PROCEDURE Datei_abspeichern;
VAR i:integer;
BEGIN
ASSIGN(datei,'C:zahlen.dta');
RESET(datei);
FOR i:=1 TO 10 DO
BEGIN
Write('Gib ne Zahl ein!');
Readln(zahl);
Write(datei,zahl);
END;
CLOSE(datei);
END;
PROCEDURE Datei_einlesen;
VAR i:integer;
BEGIN
ASSIGN(datei,'C:zahlen.dta');
RESET(datei);
FOR i:=1 TO 10 DO
BEGIN
READ(datei,zahl);
Writeln(zahl);
END;
CLOSE(datei);
END;
BEGIN
Datei_anlegen;
Datei_abspeichern;
CLRSCR;
Datei_einlesen;
END.
So jetzt bin ich soweit.
Ich versuche jetzt spezielle Stellen des Speicherplatztes auszulesen.
Mein Quelltext
PROGRAM Spezielles_auslesen;
USES crt;
TYPE dateityp=FILE OF string;
int=integer;
VAR datei:dateityp;
name:string;
Frage:int;
PROCEDURE Eingabe;
BEGIN
Writeln('Den wievielten Namen m”chten sie ausgegeben haben?');
Readln(Frage);
END;
PROCEDURE Richtige_stelle_suchen;
VAR i:int;
BEGIN
ASSIGN(datei,'C:Namen.dta');
RESET(datei);
IF Frage=5 THEN
BEGIN
seek(datei,1);
FOR i:=1 TO 2 DO
BEGIN
Read(datei,Name);
Writeln(name);
END;
END
ELSE BEGIN
Writeln('Dann halt net! :P');
END;
CLOSE(datei);
END;
BEGIN
Eingabe;
Richtige_stelle_suchen;
Readln;
END.
jetzt meine Frage: Warum zeigt der mir nicht die 5te Stelle in der Datei an?
Es funktioniert alles einwandfrei, aber er zeigt einfach nichts an...
Was habe ich falsch gemacht?
MfG DoS
Diogenes
07.03.2005, 18:40
Antwort: Weil Du ihm die 2. Angeschafft hast. Seek hat als Paramater die Datei und den Index, der bei 0 beginnt. Willst du die 5. Stelle Lesen, muß dort 4 stehen, wo Du 1 hast.
Denial of Service
07.03.2005, 18:59
Hab ich dich so richtig verstanden?
BEGIN
ASSIGN(datei,'C:Namen.dta');
RESET(datei);
IF Frage=5 THEN
BEGIN
seek(datei,5);
FOR i:=4 TO 5 DO
BEGIN
Read(datei,Name);
Writeln(name);
END;
END
ELSE BEGIN
Writeln('Dann halt net! :P');
END;
CLOSE(datei);
END;
Funktioniert leider immer noch nicht :(
bitte bitte feedback ich sitze hier seit 3h und zur Not sitze ich hier nochma so lange, aber ich muss dat jetzt hinbekommen.... :mauer:
Diogenes
07.03.2005, 19:23
DoS, hast Du schon einmal mit typisierten Dateien gearbetet?
Nehmen wir als Beispiel deine Zahlen. Der Lese-Code lautet dann in etwa:
procedure LiesDenFuenften;
var datei: file of integer;
rec: integer;
begin
assign( datei, 'c:zahlen.dta');
reset( datei);
seek(datei, 4);
read( datei, rec);
writeln( rec);
close( datei)
end;
Wenn Du einen Datensatz verwenden willst, rate iuch dir, den Dateityp so zu defininieren:
type tsatz = record vor, nach: string end;
tfile = file of tsatz;
Zum Bearbeiten Puffervariable Buf: tsatz definieren, füllen, schreiben mit Write. Umgekehrt: Read( datein, Buf); with Buf do WriteLn( vor, #010#013, nach);
Denial of Service
08.03.2005, 22:23
Ich danke dir
Es ist jetzt *schiel* halb 11 und ich hab´s endlich :)
Danke dir für die Hilfe
der Thread kann geclosed werden
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.