Seite 1 von 1

ArraySeek

Verfasst: 6. August 2011, 10:13
von Lewi
Hi,
ich rätzel, warum die nachfolgende Funktion ein falsches Ergebnis liefert:

Code: Alles auswählen

PROCEDURE Test()
aItem is array 3 by 4 Variants
nSearch is int = 2
nPos is int

aItem =[[1,"Ain", 3, "Hamburg"],
        [2,"Aisne", 5, "München"],
        [3,"Allier", 2, "Berlin"]]

// suche nach nSearch in Spalte 1
// Notation: ArraySeek(<array Name> , <Type of Search> , <Column> , <Sought Value> [, <Source Subscript>]) 
nPos = ArraySeek(aItem, asLinear,1,nSearch)
Info(nPos)
Als Ergebnis wird "1" geliefert, richtig wäre aber "2".
Gruß, Olaf

Re: ArraySeek

Verfasst: 6. August 2011, 11:06
von Lewi
Lösung gefunden:

Code: Alles auswählen

aItem is array 3 by 4 int
Was mir dabei neu ist, dass man scheinbar für mehr-dimensionale Array`s unterschiedliche Spalten-Typen nehmen kann obwohl das Array als "Int" deklariert ist.

Gruß, Olaf

Re: ArraySeek

Verfasst: 7. August 2011, 13:51
von klammerauf
Bei den Variants ist mir das klar, aber bei einem als int deklarierten Array? Bist du sicher? (kanns gerade nicht ausprobieren).

Sebastian

Re: ArraySeek

Verfasst: 8. August 2011, 20:03
von Herbert
Lewi hat geschrieben: Was mir dabei neu ist, dass man scheinbar für mehr-dimensionale Array`s unterschiedliche Spalten-Typen nehmen kann obwohl das Array als "Int" deklariert ist.
Olaf, kann dies sein, weil du in der 1. Kolonne suchst, welche genau den passenden Typ hat? Was passiert, wenn du in der 3. Kolonne suchen würdest?
Und was ist mit "Seek" anstelle von "ArraySeek"?

Re: ArraySeek

Verfasst: 9. August 2011, 23:32
von Lewi
klammerauf hat geschrieben:Bei den Variants ist mir das klar, aber bei einem als int deklarierten Array? Bist du sicher? (kanns gerade nicht ausprobieren).
Es ist wohl so, dass bei bei Zuweisung eines Strings zu einem INT-deklarierten Element der Wert automatisch zu einem Integer-Wert konvertiert wird.

Gruß, Olaf

Re: ArraySeek

Verfasst: 22. September 2011, 10:17
von klammerauf
Nur noch so als kleine Ergänzung.

Ich hatte gerade auch mit Arrays zu tun. Dabei bin ich auf eine ganz andere Möglichkeit gestoßen.

Statt der Variants, die ja im Array den Nachteil haben, dass man darin nicht suchen kann, hab ich einen Array aus einer Struct gebaut.

Also statt

Code: Alles auswählen

vorname, name, strasse, ort are strings
plz is int
arrAdr is array of 4 by * variants
ArrayAddLine(arrAdr,vorname,name,strasse,plz,ort)
das hier

Code: Alles auswählen

Adresse is structure
   vorname is string
   name is string
   strasse is string
   plz is int
   ort is string
END
CurrentAdress is Adresse
arrAdr is array of Adresse
...
ArrayAdd( arrAdressen, CurrentAdress )
Die Structure haben den Vorteil, dass man je Arrayzeile die gleichen Variablentypen hat, vor allem gegenüber Xbase++, wo man da auch mal durcheinanderkommen konnte, weil in einem Xbase++-Array je Element beliebige Werte stehen können.

Sebastian