Wie kann ich feste Listen schnell definieren? DIM () Array?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Wie kann ich feste Listen schnell definieren? DIM () Array?

Beitrag von Xaby »

Heho Fans,

Dim Vokale.c(4)

Vokale="a","e","i","o","u"

Gibt es was in dieser Richtung?

Alternative wäre

Vokale(0)="a"
Vokale(1)="e"
Vokale(2)="i"
Vokale(3)="o"
Vokale(4)="u"

... ist doch etwas bescheiden.

Vor allem, wenn es Listen sind wie: Monate, Tage, feste Zahlen
Überschriften einer Tabelle. Oder Standard-Werte, die sich nur vereinzelt ändern.

Var Monate: Array[1..12] of String[3];

Monate=('Jan','Feb','Mär','Apr','...');

Print(Monate[8]);

Ausgabe: ...

Print(Monate[2]);

Ausgabe: Feb

....

Also in Pascal ging das irgendwie. Und ich hab auch noch nicht herausgefunden wie ich folgendes einfacher machen kann:

Text.s

Text="Hallo"

Mid(Text,5,1) >> "o"

Text[5] >> "o"

wäre doch auch nicht uncool oder? Oder geht das nicht, weil ein String nicht eine Kette von Charactern ist?
Hängt es mit dem Unicode zusammen? /:->

Klickt bitte mal hier:
http://www.tutorials.at/

Dann auf PASCAL ... und dort Tutorial Nr. 3 und 4
3 aber nur ganz unten.

Gibts in Pure auch Mengen?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Vermisse ich auch etwas.

Code: Alles auswählen

Structure udtValue
  Value.l[0]
EndStructure

*MyValues.udtValue

*MyValues = ?pValues

With *MyValues
  For i = 0 To 5
    Debug \Value[i]
  Next
EndWith


DataSection
  pValues:
    Data.l 10,11,12,13,14,15
EndDataSection
Funktioniert leider nicht mit Strings

Edit: Char

Code: Alles auswählen

Structure udtValue
  Value.c[0]
EndStructure

*MyValues.udtValue

*MyValues = ?pValues

With *MyValues
  For i = 0 To 4
    Debug Chr(\Value[i])
  Next
EndWith


DataSection
  pValues:
    Data.c "aeiou"
EndDataSection
FF :wink: [/code]
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Das wäre was für PB 4.x gewesen. Naja, vielleicht kann es ja noch integriert werden :roll:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Sowas ähnliches (und noch mehr) kann man über ne Macro machen:

Code: Alles auswählen

; creates the array 'arrayname' (opt. incl. type-suffix) with size 'size'
; and fills up to 10 (optional, 0=default) values inside it
Macro DimInit(arrayname, size, e0=0, e1=0, e2=0, e3=0, e4=0, e5=0, e6=0, e7=0, e8=0, e9=0)
  Dim arrayname(size);

  CompilerIf size > 0 : arrayname(0) = e0 : CompilerEndIf
  CompilerIf size > 1 : arrayname(1) = e1 : CompilerEndIf
  CompilerIf size > 2 : arrayname(2) = e2 : CompilerEndIf
  CompilerIf size > 3 : arrayname(3) = e3 : CompilerEndIf  
  CompilerIf size > 4 : arrayname(4) = e4 : CompilerEndIf
  CompilerIf size > 5 : arrayname(5) = e5 : CompilerEndIf
  CompilerIf size > 6 : arrayname(6) = e6 : CompilerEndIf
  CompilerIf size > 7 : arrayname(7) = e7 : CompilerEndIf  
  CompilerIf size > 8 : arrayname(8) = e8 : CompilerEndIf
  CompilerIf size > 9 : arrayname(9) = e9 : CompilerEndIf

EndMacro

; creates the array 'arrayname' (opt. incl. type-suffix) with size 'size'
; and fills it's values by the given function with maps from the optional given
; runindex (default 'i') that will run from 0 to size-1 into the targetvalues
Macro DimInitFuncFill (arrayname, size, fillfunction, runindex = i) {
  Dim arrayname(size)
  
  For runindex=0 To size-1
    arrayname(runindex) = fillfunction
  Next
EndMacro


; examples
DimInit(A.d, 6, -0.5, 3.141592);
Debug A(0)
Debug A(1)
Debug A(2)
Debug A(3)
Debug A(4)
Debug A(5)

DimInit(B.s, 3, "Peter", "Paul", "Marie")
Debug B(0)
Debug B(1)
Debug B(2)

DimInitFuncFill(A.d, 10, 17 + 18.2*i)
Debug A(0)
Debug A(1)
Debug A(2)

DimInitFuncFill(B.s, 10, "Goofy_"+Str(k), k)
Debug B(0)
Debug B(1)
Debug B(2)

!UD2
ullmann
Beiträge: 205
Registriert: 28.10.2005 07:21

Beitrag von ullmann »

Evtl. so:

Code: Alles auswählen

DataSection
Monatsnamen:
Data.s "Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"
EndDataSection

Dim Vokale.s(4)
Dim Monate.s(11) ;Index beginnt in PB immer bei 0

For i=1 To 5
  Vokale(i-1)=Mid("aeiou",i,1)
Next

Restore Monatsnamen
For i=0 To 11
  Read Monate(i)
Next
PB kennt nicht die Syntax Stringname[Index], Nachbildungen dürften komplizierter werden als Mid().

Von Mengen habe ich in PB noch nichts gehört.

Rainer
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Sogenannte Aufzählungstypen, die in Pascal vorkommen gibt es auch in PB. Dort heißen Sie Enumeration. Mengentypen, wie SET und der Ausschnitttyp .. sind nicht vorhanden.

Die DATA-Anweisung kann eine Hilfe sein, aber du solltest dir überlegen, ob du nicht eine andere Programmiersprache verwenden solltest. Vielleicht ist diese für deine Art Projekt besser geeignet.

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Antworten