La structure scan

scan ... by est une structure de contrôle puissante inventée avec Scriptol et elle peut remplacer par deux ou trois lignes, une page de code qui serait requise par les langages plus anciens.

Syntaxe:
scan tableau [, tableau]* (by fonction | bloc d'instruction /scan)

Ce qui signifie:
Scanner les tableaux élément par éléments et les utiliser comme paramètres d'une fonction ou d'un bloc d'instructions.

Cas d'une fonction

scan a, b, ... by fonction

Ou a, b, etc... sont des tableaux et fonction une fonction définie par l'utilisateur.

Chaque élément des tableaux a, b, ... sont à tour de rôle donnés en paramètre
à une fonction et traités ensemble par celle-ci.
Quand le dernier élement est atteint dans un des tableaux, le traitement se termine.

Cas d'un bloc d'instructions

scan a, b, ...
... instructions...
/scan

Ici les éléments des tableaux ne sont pas traités par une fonction, mais plutôt par le bloc d'instructions qui suit. Le mot clé by n'est pas utilisé.

Exemple de scan par un bloc d'instructions.
L'élément suivant de a est concaténé avec celui de b, et le résultat est empilé dans le tableau c.
array a = array(1,2,3,4,5,6)
array b = array("a","b","c","d")
array c = array()
scan a,b
  c.push(b[] + str(a[]))
/scan

c.display()
Affiche: > array (
  "a1",
  "b2",
  "c3",
  "d4"
)


L'index vide [] désigne l'élément actuellement pointé dans une liste. On peut aussi l'utiliser dans un assignement.

Reprenons le tableau a précédent:

Utilisation de l'index courant en assignement augmenté. array a = array(1,2,3,4,5,6)

scan a
  a[] * 10      `l'élément suivant est multiplié par 10
/scan

a.display()
Affiche: > array (
  "10",
  "20",
  "30",
  "40",
  "50",
  "60"
)


Tableau à deux dimensions

On crée un tableau à deux dimensions en utilisant un tableau à une dimension dont les éléments sont des tableaux.
Voici un exemple pour créer et parcourir un tableau à deux dimensions.
Ce tableau contient en fait trois dyn (variable dynamique) qui contiennent
chacune un tableau.

Création et parcours d'un tableau à deux dimensions. array a2 = array(
     ("a", "b", "c"),
     ("x", "y", "z"),
     (1, 2, 3) )

scan a2
  // conversion pour mettre chaque tableau en en x
  array x = a2[].toArray()
  scan x
    print x[]
  /scan
/scan

 Il aurait été plus simple d'avoir à éviter la création du tableau temporaire x, ceci peut être fait dans cet exemple (en utilisant la syntaxe simplifiée à instruction unique):
scan aa
  scan aa[] print aa[][]
/scan
Ceci fonctionne avec le compilateur natif solc, mais malheureusement, l'interpréteur Php ne le permet pas et donc solp ne peut l'utiliser.

 Exercices


1) Créer avec la structures scan, un tableau à deux dimensions dont les deux lignes ont les préfixes a et b, et les 5 colonnes les suffixes 1 à 5.
Le tableau de départ est:

array x = array(
("a","a","a","a","a"),
("b","b","b","b","b"))

Vous aurez besoin des éléments suivants:
- inclure "libphp.sol", aide à gérer les fonctions prédéfinies.
- str convertit en entier en text.
- les éléments d'un tableau sont des dyn qui doivent être convertis en types (text, etc...).
Afficher le tableau x modifié, avec la méthode de tableau display().

Réponse

2) En utilisant des boucles for au lieu de scan, et les fonctions prédéfinies chr() et ord(), créer le même tableau à deux dimensions en partant d'un tableau vide.

Réponse

3) Même problème, si on dispose au départ des trois tableaux suivants:
array x
array l = ("a", "b")
array c = (1, 2,3,4,5)

Réponse