WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   pascal problem! array schreibn (http://www.wcm.at/forum/showthread.php?t=77381)

porli 17.11.2002 10:39

pascal problem! array schreibn
 
also:

i hab wieder mal ein problem für euch!!!;)

müssn für die schuile da so a schirches proggi schreiben und jetzt bring ma ned zam an array in die datei zum schreim!! er sagt immer:"ungültige qualifizierung". und jetzt brauchat ma bidde a paar lösungsvorschläge!


Quelltext:

procedure schreiben(var ptmoment:tgesamt);
var
dat,dat2:text;
letztzahl:integer;

begin
assign(dat2,'zahl.txt');
reset(dat2);
readln(dat2,letztzahl);
close(dat2);
assign(dat,'index.txt');
{$i-}
reset(dat);
{$i+}
If (ioResult<>0) then
begin
assign(dat,'index.txt');
rewrite(dat);
close(dat)
end;
assign(dat,'index.txt');
append(dat);
write(dat,ptmoment[letztzahl]); {ungültige qualifizierung}
close(dat)
end;

flinx 17.11.2002 17:41

TP-Hilfe sagt:
Code:

(ungültige Qualifizierung)

Diese Fehlermeldung erhalten Sie bei dem Versuch,

 a eine Variable zu indizieren, die kein Array
  ist,
 b auf Felder einer Variablen zuzugreifen, die
  kein Record ist, oder
 c eine Variable zu dereferenzieren (mit ^), die
  kein Zeiger ist.


porli 18.11.2002 15:39

so gscheit war ich auch schon! aba das hat ma nicht wirkli weiter gholfen! :rolleyes: leider! *schnief*

weil a: sie is ein array
b: sie is auch ein record
c: und das letzte versteh ich nicht was das heisst!

aba kann ma irgendwer in quelltext korriegieren oda so??

ich weiß nämli uur nicht mehr weiter!

flinx 18.11.2002 15:51

Zitat:

weil a: sie is ein array
b: sie is auch ein record
Ein array aus records?

Strukur/Definition von tgesamt wäre nett zu wissen?

porli 18.11.2002 21:05

oke ich hab dir/euch mal da das ganze proggi geadded!

danke schon mal jetzt! :)

flinx 19.11.2002 00:41

Code:

tdatum=record
      jahr:integer;
      monat:1..12;
      tag:1..31;
    end;
    tzeit=record
      stunde:0..23;
      minute:0..59;
      sekunde:0..59;
    end;
    tkennzahl=record
      raum:1..14;
      geraet:1..10;
      Zustand:0..1;
    end;
    tgesamt=record
      datum:tdatum;
      zeit:tzeit;
      kennzahl:tkennzahl;
    end;
    tmoment=array [1..maxaction] of tgesamt;
procedure schreiben(var ptmoment:tgesamt);
...
write(dat,ptmoment[letztzahl]); {ungültige qualifizierung}
...

IMHO trifft Fehler a) zu. Einen Record wirst nicht mit Indices ansprechen können.
je nach dem was schreiben willst:
Code:

write(dat, ptmoment.kennzahl.raum)
                            .gerät
                    .zeit.stunde

Sollte ptmoment vom Typ tmoment und letztzahl der Index sein:
Code:

ptmoment[letztzahl].zeit.stunde
hth

porli 19.11.2002 16:55

na schau ich will den gsamten array ptmoment im feld[letztzahl (is a zahl aus einer datei)] in eine neue datei mit den namen inex.txt schreiben!

in dem array-feld soll ein zahlendatensatz drinnstehn der sich aus

datum
zeit
kennzahlen

zusammensetztt!

oda hab ich das falsch verstanden?

meinst du das ich schreiben müsste:
write(dat, ptmoment.kennzahl.raum.gerät.zeit.stunde) aba das geht ja nciht! ich hab ma dacht ich schreib den ganzen record tgesamt in das array!

ich weiß ja nicht ich kenn mich mit dem noch nciht gut aus! ham das grad neu gmacht! und unser lehrer is a bissi a depp!
:)

Zitat:

Original geschrieben von flinx
Sollte ptmoment vom Typ tmoment und letztzahl der Index sein:

ja soll er/es!
Zitat:

Code:

ptmoment[letztzahl].zeit.stunde

:
was meinst damit? dann tät er ja nur zeit und stunde schreiben! oda?:confused:

flinx 19.11.2002 17:49

Zitat:

na schau ich will den gsamten array ptmoment im feld[letztzahl (is a zahl aus einer datei)] in eine neue datei mit den namen inex.txt schreiben!
:) des hab ich mir fast gedacht.
Zitat:

ich schreib den ganzen record tgesamt in das array!
hast ja auch getan :D , nur willst jetzt den 'Verweis' auf den Record (dessen Felder wieder Records sind) in eine Datei schreiben und des wird nicht ganz funktionieren. Du musst die Felder der Records schreiben: d.h. z.B. so
Code:

write(dat, ptmoment[letztzahl].datum.jahr)
write(dat, ptmoment[letztzahl].datum.monat)
write(dat, ptmoment[letztzahl].datum.tag)
write(dat, ptmoment[letztzahl].zeit.stunde)
write(dat, ptmoment[letztzahl].zeit.minute)
write(dat, ptmoment[letztzahl].zeit.sekunde)
write(dat, ptmoment[letztzahl].kennzahl.raum)
write(dat, ptmoment[letztzahl].kennzahl.geraet)
write(dat, ptmoment[letztzahl].kennzahl.Zustand)

hth

porli 19.11.2002 19:55

sorry hab grad min 30-40 zeilen gschrieben und dann is compi abgstürtzt jetzt weiiß ichs nimma genau aba ich versuchs nomal:

aha :eek: *check*

aba bleibt das dann trotzdem nur in einem index von dem array?

das soll dann eine riesige zeichenkette sein!

z.B.: 2002020915341801081

heisst so viel wie im Jahr 2002 am 09.02 um 15:34:18 Uhr wurde im Raum 1 das gerät 10 eingeschaltet!

so wenn ich das aus der datei dann wieder herausles kann ich dann auch wieder auf die einzelnen records zugreifen? nein oda?

weil wenn ich jetzt schreib:

Code:

readln(dat,ptmoment[letztzahl]);
dann les ich den ganzen datensatz in den array

aba wenn ich jetzt schreib:

Code:

readln(dat,ptmoment[letztzahl].datum.jahr
lest er dann nur es jahr?

porli 19.11.2002 20:10

he das funktioniert aba auch nciht! habs grad ausprobiert:

Code:

write(dat, ptmoment[letztzahl].datum.jahr)
write(dat, ptmoment[letztzahl].datum.monat)
write(dat, ptmoment[letztzahl].datum.tag)
write(dat, ptmoment[letztzahl].zeit.stunde)
write(dat, ptmoment[letztzahl].zeit.minute)
write(dat, ptmoment[letztzahl].zeit.sekunde)
write(dat, ptmoment[letztzahl].kennzahl.raum)
write(dat, ptmoment[letztzahl].kennzahl.geraet)
write(dat, ptmoment[letztzahl].kennzahl.Zustand)

und er schreibt wieder ungültige Qualifizeirung!

obwohl ich die strichpunkte noch hinzugefügt haben obwohl die damit ja nix zu tun haben! ich weiß nicht! an was kannst da liegen!?

flinx 19.11.2002 21:03

Zitat:

und er schreibt wieder ungültige Qualifizeirung!
hast
Code:

procedure schreiben(var ptmoment:tgesamt);
geändert??

Auslesen musst anders.
Ja, so wie ichs geschrieben hab, ist's eine Zeichenkette ohne Leerzeichen oder sonstwas, was das auslesen etwas schwierig machen dürfte. Ein Leerzeichen (irgendein Trennzeichen) wäre schon angebracht, damit man es vernünftig wieder auslesen kann bzw. du kannst die Werte auch untereinander schreiben (writeln)). Auslesen musst jeden Wert einzeln, und natürlich auch den Feldern im Record wieder zuweisen.

flinx 19.11.2002 21:49

Lesen vom file als Beispiel (ohne Gewähr und ohne Fehlerüberprüfung):
Code:

procedure leserecordvonfile(var Dateiname:String;var indenRecord:tgesamt);
var dat: Text;
    gelesenerDatensatz:array[1..9] of String;
    j,code: Integer;
begin
    assign(dat, Dateiname);
    reset(dat);
    j:=1;
    while ((not eof(dat)) and (j < 10)) do
    begin
    readln(dat,gelesenerDatensatz[j]);
    j:=j+1;
    end;
    close(dat);
    Val(gelesenerDatensatz[1],indenRecord.datum.jahr,code);
    Val(gelesenerDatensatz[2],indenRecord.datum.monat,code);
    Val(gelesenerDatensatz[3],indenRecord.datum.tag,code);
    Val(gelesenerDatensatz[4],indenRecord.zeit.stunde,code);
    Val(gelesenerDatensatz[5],indenRecord.zeit.minute,code);
    Val(gelesenerDatensatz[6],indenRecord.zeit.sekunde,code);
    Val(gelesenerDatensatz[7],indenRecord.kennzahl.raum,code);
    Val(gelesenerDatensatz[8],indenRecord.kennzahl.geraet,code);
    Val(gelesenerDatensatz[9],indenRecord.kennzahl.Zustand,code);
end;

Setzt voraus, dass in dem - zu lesenden - File die Daten untereinander und in der richtigen Reihenfolge geschrieben wurden!

Kannst natürlich auch die Daten in eine Zeile schreiben (mit Delimiter), einen String einlesen und die Daten aus dem String extrahieren.

porli 21.11.2002 20:28

Zitat:

Original geschrieben von flinx

hast
Code:

procedure schreiben(var ptmoment:tgesamt);
geändert??


ja hab ich! (siehe anlage)

ab es funzt trotzdem nicht! das a´ndere werde ich ma noch anschaun! hab noch ikeine zeit ghabt! danke! aba es geht nciht mit dem reinschreiben!
:heul:

flinx 21.11.2002 21:48

Zitat:

ja hab ich! (siehe anlage)
Na hast noch nit, ptmoment ist immer noch vom typ tgesamt und nicht vom typ tmoment und du versuchst immer noch an record zu indizieren ... :confused:
Wennst den schon indizierten Record (sprich: tmoment[25]) übergeben willst, musst innerhalb der schreiben procedure den index weglassen (also z. B. ptmoment.datum.jahr). Wennst den Index, so wie dus gemacht hast, innerhalb der Prozedur ausliest, wirst schon das gesamte array übergeben müssen und nicht nur einen Record .... :rolleyes:

porli 22.11.2002 10:04

Zitat:

Original geschrieben von flinx

Na hast noch nit, ptmoment ist immer noch vom typ tgesamt und nicht vom typ tmoment und du versuchst immer noch an record zu
indizieren ... :confused:
[/b]
du hast auch nicht gsagt das vom typ tgesamt sein soll! siehe weiter oben! du hast gsagt vom tgesamt!! ;)

ja 9ich will eh den ganzen array übergeben! es soll in einem index vom array der komplette record tgesamt sein!

flinx 23.11.2002 08:23

Zitat:

hast auch nicht gsagt das vom typ tgesamt sein soll! siehe weiter oben! du hast gsagt vom tgesamt!!
Ich nehm an du meinst tmoment. Nein ich hab nicht gesagt, es soll vom Typ tmoment sein (ich habs nur angenommen, und du hast es bestätigt, also hab ich mir gedacht, du hast den Übergabetyp schon geändert...)
Zitat:

ja 9ich will eh den ganzen array übergeben! es soll in einem index vom array der komplette record tgesamt sein!
Dann brauchst eh nur mehr den Übergabetyp in tmoment ändern und dann kannst ptmoment indizieren.

Wir haben anscheinend ein bisschen aneinander vorbei geredet. :lol:


Alle Zeitangaben in WEZ +2. Es ist jetzt 18:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag