[OOBasic] Rechercher dans un Array: fonction InArray()

Contenu du snippet

'REM rechercher un mot dans un tableau, renvoie l'index si trouvé, ou -1 si FAUX
'REM si tableau à 2 dimensions : rechercher dans la dim1 sur la ligne val1 de dim1,
'REM      renvoie i si trouvé, -1 sinon et dans ce cas dim1 contient la 1ere position vide
'REM si val1 = -1 ou manquant : rechercher dans les 2 directions, la fonction renvoie i et val1 contiendra j
'REM      renvoie i si trouvé, -1 sinon et dim1 contient j si trouvé
'REM s'arrete sur la 1ere valeur vide
Function InArray(mot as string, array() as string, optional dim1 as integer, optional val1 as integer) as Integer
On Error goto Err_InArray
	dim i as integer, j as integer


	If IsMissing(dim1) Then
		dim1 = 1
		For i = lbound(array, dim1) To ubound(array, dim1)
			If mot = array(i) Then
				InArray = i
				Exit Function
			ElseIf array(i) = "" Then
				InArray = -1
				Exit Function
			End If
		Next I
	ElseIf dim1 <= 2 Then ' sait pas traiter les matrices 3 dimensions
		If Not IsMissing(val1) or val1 >= 0 Then
			REM rechercher dans l'autre dimension (dim2?) sur la ligne val1 de la dim1
			For i = lbound(array, dim1) To ubound(array, dim1)
				If dim1 = 1 Then ' val1 est sur la 2e dimension
					If mot = array(i, val1) Then
						InArray = i
						Exit Function
					ElseIf  array(i, val1) = "" Then ' fin de recherche
						InArray = -1
						dim1 = i
						Exit Function
					End If
				ElseIf dim1 = 2 Then
					If mot = array(val1, i) Then
						InArray = i
						Exit Function
					ElseIf  array(val1, i) = "" Then ' fin de recherche
						InArray = -1
						dim1 = i
						Exit Function
					End If
				End If
			Next i
		Else REM recherche dans les 2 dimensions
			For i = lbound(array, 1) To ubound(array, 1)
				For j = lbound(array, 2) To ubound(array, 2)
					If mot = array(i, j) Then
						InArray = i
						dim1 = j ' retour 2e valeur dans le param d'entrée !
						Exit Function
					ElseIf  array(val1, i) = "" Then ' pas dans cette ligne ?
						If j = lbound(array, 2) Then ' début de ligne vide ?
							InArray = -1
							Exit Function ' fin de recherche, pas trouvé
						Else
							Exit For ' ligne suivante
						End If
					End If
				Next j
			Next i
		End If
	End If
	InArray = -1
Exit Function
Err_InArray:
	InArray = -1
	Msgbox "Erreur " & err & " dans InArray (L." & erl & ") : " & error(err) & chr(13) & sValue & chr(13) & "*" & sTxt & "* "
	End
End Function



Compatibilité : VB 2005

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.