ArraySeek

Alle Themen rund um die Erstellung von Programmen
Antworten
Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

ArraySeek

Beitrag 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

Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

Re: ArraySeek

Beitrag 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

Benutzeravatar
klammerauf
Member
Beiträge: 116
Registriert: 28. November 2010, 15:11
Wohnort: bei Karlsruhe
Kontaktdaten:

Re: ArraySeek

Beitrag von klammerauf »

Bei den Variants ist mir das klar, aber bei einem als int deklarierten Array? Bist du sicher? (kanns gerade nicht ausprobieren).

Sebastian

Herbert
Site Admin
Beiträge: 529
Registriert: 23. Februar 2010, 08:06
Wohnort: Langenthal, Schweiz
Kontaktdaten:

Re: ArraySeek

Beitrag 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"?

Lewi
Member
Beiträge: 74
Registriert: 3. September 2010, 14:45
Wohnort: Hamburg
Kontaktdaten:

Re: ArraySeek

Beitrag 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

Benutzeravatar
klammerauf
Member
Beiträge: 116
Registriert: 28. November 2010, 15:11
Wohnort: bei Karlsruhe
Kontaktdaten:

Re: ArraySeek

Beitrag 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
--
WinDev 23, WM Apps für Android und iOS, Anwendungen für Windows CE Mobile Barcode Scanner, Python 3 mit Oracle

Antworten