Seite 1 von 1

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

Verfasst: 18.05.2006 14:19
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?

Verfasst: 18.05.2006 14:49
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]

Verfasst: 18.05.2006 15:22
von Xaby
Das wäre was für PB 4.x gewesen. Naja, vielleicht kann es ja noch integriert werden :roll:

Verfasst: 18.05.2006 16:12
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)


Verfasst: 18.05.2006 22:59
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

Verfasst: 19.05.2006 08:08
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