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:
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