ASCAN( )-Funktion

Durchsucht ein Array nach einem Element, das die gleichen Daten und den gleichen Datentyp wie der Ausdruck enthält.

ASCAN(ArrayName, eExpression [, nStartElement [, nElementsSearched [, nSearchColumn [, nFlags ]]]])

Rückgabewerte

Numerisch

Parameter

  • ArrayName
    Gibt den Namen des Arrays an, das durchsucht werden soll.

  • eExpression
    Gibt den allgemeinen Ausdruck an, nach dem gesucht werden soll.

  • nStartElement
    Gibt die Elementnummer an, bei der die Suche beginnen soll. Das Element mit der angegebenen Nummer wird in die Suche einbezogen. Wenn Sie nStartElement nicht angeben, wird standardmäßig das gesamte Array durchsucht.

  • nElementsSearched
    Gibt die Anzahl der zu durchsuchenden Elemente an. Werden nStartElement und nElementsSearched weggelassen, beginnt die Suche beim ersten Arrayelement und wird bis zum letzten Arrayelement fortgeführt, wenn Sie nSearchColumn nicht angeben.

    Anmerkung   Auf ein Element eines zweidimensionalen Arrays können Sie auf zwei Arten Bezug nehmen. Im ersten Fall dienen zwei Indizes dazu, die Zeilen- und die Spaltenposition des jeweiligen Elements im Array anzugeben, bei der zweiten Möglichkeit wird eine Elementnummer verwendet. Diese Funktion benötigt ebenso wie andere, mit denen zweidimensionale Arrays bearbeitet werden, Elementnummern (hier nStartElement und nElementsSearched). Mit AELEMENT( ) können Sie für ein Element eines zweidimensionalen Arrays mit Hilfe des Zeilen- und des Spaltenindexes ermitteln, welche Nummer das Element hat.

  • nSearchColumn
    Gibt die Arrayspalte an, die durchsucht werden soll. Dies ist häufig sinnvoll bei Arrays, die von Funktionen wie z. B. AFIELDS( ) erstellt wurden.

    Sie können 0 oder eine negative Zahl für nSearchColumn verwenden, um eine Suche des gesamten Arrays festzulegen. Wenn Sie für nSearchColumn einen Wert größer 0 festlegen, dann behandelt ASCAN( ) die angegebene Spalte als eindimensionales Array und verwendet jede Datenzeile als Element bei der Suche. Im folgenden Beispiel werden nur das dritte und vierte Element von Spalte 2 durchsucht (an Stelle des gesamte Arrays).

    ? ASCAN(abc,"M",3,2,2)
    

    Visual FoxPro generiert einen Fehler, wenn für nSearchColumn eine Zahl angegeben wird, die größer ist als die Anzahl der verfügbaren Spalten.

  • nFlags
    Gibt zusätzliche Suchkriterien an, die für die Scanfunktion angewendet werden. Bei Standardscans wird die Groß-/Kleinschreibung berücksichtigt.

    Die Zahl, die in nFlags angegeben wird, liefert einen Bitwert, über den festgelegt wird, ob für das Scannen die Groß-/Kleinschreibung berücksichtigt werden soll und wie genau die Einstellungen sein müssen. Die Festlegungen erfolgen entsprechend der folgenden Tabelle:

    NFlag Bit Beschreibung
    0 0000 Aktuelles Verhalten in der vorherigen Version von Visual FoxPro
    1 0001 Groß-/Kleinschreibung wird nicht berücksichtigt
    2 0010 Aktuelles Verhalten in der vorherigen Version von Visual FoxPro
    3 0011 Groß-/Kleinschreibung wird nicht berücksichtigt
    4 0100 Exact OFF
    5 0101 Groß-/Kleinschreibung wird nicht berücksichtigt; Exact OFF
    6 0110 Exact ON
    7 0111 Groß-/Kleinschreibung wird nicht berücksichtigt; Exact ON
    8 1000 Rückgabe der Zeilennummer
    9 1001 Groß-/Kleinschreibung wird nicht berücksichtigt; Rückgabe der Zeilennummer
    10 1010 Rückgabe der Zeilennummer
    11 1011 Groß-/Kleinschreibung wird nicht berücksichtigt; Rückgabe der Zeilennummer
    12 1100 Rückgabe der Zeilennummer; Exact OFF
    13 1101 Groß-/Kleinschreibung wird nicht berücksichtigt; Rückgabe der Zeilennummer; Exact OFF
    14 1110 Rückgabe der Zeilennummer; Exact ON
    15 1111 Groß-/Kleinschreibung wird nicht berücksichtigt; Rückgabe der Zeilennummer; Exact ON

Die Bitwerte lauten wie folgt:

Bit Beschreibung
0 Bit für Nichtberücksichtigung der Groß-/Kleinschreibung
1 Bit für Exact ON (nur gültig, wenn Bit 2 festgelegt ist)
2 Außerkraftsetzen des Bits für die Festlegung von Exact
3 Rückgabe der Zeilennummer bei 2D-Array

nFlags gilt nur für die ASCAN( )-Funktion und hat keinen Einfluss auf die Einstellungen für SET EXACT.

Hinweise

Wird eine Übereinstimmung gefunden, gibt ASCAN( ) die Nummer des Elements zurück, das den Ausdruck enthält. Kann keine Übereinstimmung gefunden werden, gibt ASCAN( ) den Wert 0 zurück.

Die Kriterien für eine erfolgreiche Übereinstimmung von Zeichenfolgendaten werden durch die Systemeinstellung von SET EXACT bestimmt, wenn nFlag mit Bit 2 nicht festgelegt wurde. Ist SET EXACT auf ON gesetzt, muss ein Element dem gesuchten Ausdruck Zeichen für Zeichen entsprechen und die gleiche Länge haben. Ist SET EXACT auf OFF gesetzt und entsprechen sich ein Element und der gesuchte Ausdruck bis zum Ende des Ausdrucks, ist die Übereinstimmung erfolgreich. Weitere Informationen zu Übereinstimmungskriterien für Zeichenfolgen finden Sie in der Zeichenfolgen-Vergleichstabelle im Thema SET EXACT.

In der vorherigen Version von Visual FoxPro sind die Parameter nStartElement und nElementsSearched optional. Der Wert für nStartElement muss > 0 sein, während nElementsSearched jeden beliebigen Wert annehmen kann. Für den neuen Parameter nSearchColumn müssen diese Parameter durch Ausgabe eines Wertes von –1 umgangen werden.

Die Parameter nStartElement und nElementsSearched erhalten eine besondere Bedeutung, wenn der Wert für nSearchColumn größer als 0 ist. In der vorherigen Version von Visual FoxPro wurden diese Parameter stets an das gesamte Array verwiesen. Wenn in dieser Version von Visual FoxPro ein positiver Wert für nSearchColumn ausgegeben wird, werden die Werte von nStartElement und nElementsSearched an das einzige eindimensionale Array verwiesen, das von nSearchColumn repräsentiert wird. Im folgenden Beispiel würden beispielsweise nur das dritte und vierte Element von Spalte 2 und nicht das gesamte Array durchsucht werden.

? ASCAN(abc,"M",3,2,2)

Beispiel

Im folgenden Beispiel wird ein Array erstellt und mit Firmennamen gefüllt; anschließend wird das Array mit ASCAN( ) nach einem bestimmten Firmennamen durchsucht. Wird der Firmenname gefunden, wird er aus dem Array gelöscht.

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer     && Open customer table
SELECT company FROM customer ;
   WHERE country = 'UK' ;
   INTO ARRAY gaCompanies
gnCount = _TALLY
gcName = 'Seven Seas Imports'
CLEAR
DISPLAY MEMORY LIKE gaCompanies*
gnPos = ASCAN(gaCompanies, gcName) && Search for company
IF gnPos != 0

** Company found, remove it from the array ** = ADEL(gaCompanies, gnPos) gnCount = gnCount - 1 ENDIF DISPLAY MEMORY LIKE gaCompanies

Siehe auch

ACOPY( ) | ADEL( ) | ADIR( ) | AELEMENT( ) | AFIELDS( ) | AINS( ) | ASORT( ) | ASUBSCRIPT( ) | DIMENSION | SET EXACT