Zweidimensionales Array vorbelegen?

Alle Fragen zur Programmierung, die nicht in die speziellen Themen passen
Antworten
Benutzeravatar
cybermonkey342
Foriker
Beiträge: 28
Registriert: So 9. Mär 2008, 13:07
Wohnort: Ba-Wü
Kontaktdaten:

Zweidimensionales Array vorbelegen?

Beitrag von cybermonkey342 » Di 16. Sep 2008, 14:31

Hallo,

ich habe mal in den Docs nachgesehen und mal rumprobiert, aber leider keinen Erfolg gehabt. Wie kann ich ein Array in GAMBAS bei der Erzeugung mit sinnvollen Werten belegen? Also z.B. so was (erfundenes Beispiel, gibts aber ähnlich bei Python, Pascal, C++ etc.):

Code: Alles auswählen

meineVariable[3,3]=(1,2,3
                  4,5,6
                 7,8,9)
Früher gab es ja bei alten BASIC-Dialekten einen "Workaround":

Code: Alles auswählen

Dim meineVariable(3,3)
FOR i=1 to 3
FOR j=1 to 3
  READ myVariable(i,j)
NEXT
NEXT
DATA 1,2,3
DATA 4,5,6
DATA 7,8,9
Aber das geht ja bei GAMBAS leider auch nicht.
Anmerkung, es soll NICHT alles in einer Zeile stehen, also NICHT: meineVariable[3,3]=1,2,3,4,5,6,7,8,9
Mit den besten Grüßen,
Cybermonkey342

Benutzeravatar
cybermonkey342
Foriker
Beiträge: 28
Registriert: So 9. Mär 2008, 13:07
Wohnort: Ba-Wü
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von cybermonkey342 » Do 18. Sep 2008, 14:37

Hallo,

ich bin jetzt etwas weiter gekommen.

Code: Alles auswählen


PUBLIC SUB Form_Open()
DIM holla AS Integer[2, 2]

holla = [1, 2, 3, 
         4, 5, 6, 
         7, 8, 9]

Label1.Text = Str$(holla[3])


END
Komisch ist aber, dass ich ein zweidimensionales Array anlege, es aber nur eindimensional füllen und aufrufen kann ...
Immer noch niemand eine Idee?
Mit den besten Grüßen,
Cybermonkey342

Gamberianer
Foriker
Beiträge: 43
Registriert: Di 9. Sep 2008, 06:45
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von Gamberianer » Di 23. Sep 2008, 17:45

Hallo,

hatte das Problem auch schon ohne es wie gewollt lösen zu können.
Habe daher die Daten in einer separaten Datei abgelegt, von woaus ich sie nach belieben in ein Array einlesen kann.
Bei nur wenigen Werten ist eine diekte Zuordnung aber wohl einfacher.

Gruß Richard

Benutzeravatar
cybermonkey342
Foriker
Beiträge: 28
Registriert: So 9. Mär 2008, 13:07
Wohnort: Ba-Wü
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von cybermonkey342 » Do 25. Sep 2008, 13:42

Scheint mir auch die einzige Lösung zu sein. Hast du zufällig ein kleines Beispiel parat ... ?
Mit den besten Grüßen,
Cybermonkey342

Gamberianer
Foriker
Beiträge: 43
Registriert: Di 9. Sep 2008, 06:45
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von Gamberianer » Fr 26. Sep 2008, 09:57

Hallo cybermonkey342,

habe ein kleines Demoprogramm geschrieben, dass die grundsätzliche Vorgehensweise zeigen soll. Du brauchst nur noch eine Form, den Dateipfad entsprechend zu ändern und die Datei 'test.dat' anlegen, dann sollte das Programm laufen. Es gibt auch andere Möglichkeiten wie im Wikibooks beschrieben, aber diese finde ich insofern gut, weil sie nahezu unbeschränkte Möglichkeiten bietet Daten abzuspeichern und wieder einzulesen. Allerdings ist es etwas schwierig zu programmieren, da nicht alle Programmfehler zu Fehlermeldungen führen und man bei komplizierteren Sachen schon einige Zeit zur Fehlerbehebung, aber auch zur Fehlererkennung braucht.

Code: Alles auswählen

' Gambas class file
' Demoprogramm zum Abspeichern und Einlesen von Daten


PUBLIC Datei AS File

PUBLIC SUB Form_Open()
  Datendateianlegen()
  Datenauslesen()
END


PUBLIC SUB Datendateianlegen()

  Datei = OPEN "/home/Richard/test.dat" FOR WRITE  'Datei oeffnen zum Beschreiben
                                                   'Datei "test.dat" muss bereits vorhanden sein!

  SEEK #Datei, 0                     'Zeiger auf Byte "0" in Datei

  WRITE #Datei, 10, 4                'Integerzahl "10" in Datei schreiben
  WRITE #Datei, 20, 4                'Integerzahl "20" in Datei schreiben
  WRITE #Datei, 30, 4                'Integerzahl "30" in Datei schreiben
  WRITE #Datei, 40, 4                'Integerzahl "40" in Datei schreiben
  
  CLOSE #Datei                       'Datei schliessen
END



PUBLIC SUB Datenauslesen()
  DIM iArray AS Integer[2, 2]        'Mehrdimensionales Array anlegen
  DIM I AS Integer
  DIM J AS Integer

  Datei = OPEN "/home/Richard/test.dat" FOR READ  ' Datei oeffnen zum Lesen
  
  SEEK #Datei, 0                     'Zeiger auf Byte "0" in Datei

  FOR I = 0 TO 1  
    FOR J = 0 TO 1
      READ #Datei, iArray[I, J], 4   'Daten der Reihe nach auslesen und in iArray speichern
      PRINT iArray[I, J]
    NEXT 'J
  NEXT 'I
  
  CLOSE #Datei                       'Datei schliessen
END
Den Programmteil 'Datendateianlegen' brauchst Du nur zum Anlegen der Datei und muss nicht Bestandteil des späteren Programm sein, wenn die Datendatei während der Ausführung nicht mehr verändert werden soll.

Viel Spaß beim Programmieren
Richard

Benutzeravatar
cybermonkey342
Foriker
Beiträge: 28
Registriert: So 9. Mär 2008, 13:07
Wohnort: Ba-Wü
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von cybermonkey342 » Di 30. Sep 2008, 16:15

Hallo,

vielen Dank für das Beispiel. Werde ich mir am WE mal zu Gemüte führen ... ah,ne, ist ja auch ein Feiertag :wink:
Falls was Sinnvolles dabei rauskommt, werde ich unter "Projekte" mal berichten ...
Mit den besten Grüßen,
Cybermonkey342

Benutzeravatar
cybermonkey342
Foriker
Beiträge: 28
Registriert: So 9. Mär 2008, 13:07
Wohnort: Ba-Wü
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von cybermonkey342 » Mi 1. Okt 2008, 09:44

Hallo,

habe es mal kurz ausprobiert, aber hat leider einen Nachteil: die Dateien werden binär gespeichert. D.h. es ist nicht möglich die Daten z.B. komfortabel mit einem Texteditor zu ändern... :?
Also test.dat sollte z.B. so aussehen:
0,0,0,1,2,0,0,0,1,2,3
0,1,2,2,1,1,0,0,1,2,1
[...]
1,2,0,0,0,0,0,0,0,2,3
Mit den besten Grüßen,
Cybermonkey342

Gamberianer
Foriker
Beiträge: 43
Registriert: Di 9. Sep 2008, 06:45
Kontaktdaten:

Re: Zweidimensionales Array vorbelegen?

Beitrag von Gamberianer » Mi 1. Okt 2008, 20:35

Hallo,

man kann die Daten auch als Textdatei speichern und auslesen.

Der Code für READ und WRITE muss dann einfach wie folgt aussehen:

WRITE #Datei, "1234", 4

bzw.

READ #Datei, Text$, 4

Damit kann man die Datei dann auch mit Texteditor erstellen bzw. ändern.

Gruß Richard

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste