Chaînes de caractères
Précédent | Partie II. Vue d'ensemble des opcodes | Suivant

## Chaînes de caractères

Les variables chaîne de caractères sont des variables dont le nom commence par S ou par gS (pour les variables chaîne locales ou globales, respectivement), et elle peuvent mémoriser n'importe quelle chaîne avec une longueur maximale définie par l'option de ligne de commande -+max_str_len (255 caractères par défaut). On peut utiliser ces variables comme argument d'entrée de n'importe quel opcode qui attend une chaîne constante entre apostrophes, et on peut les manipuler durant les périodes d'initilasation ou d'exécution avec les opcodes dont la liste suit.

Il est également possible d'utiliser des chaînes dans les p-champs. Un p-champ chaîne peut être utilisé directement par plusieurs opcodes de l'orchestre, ou il peut être d'abord copié dans une variable chaîne :

    a1    diskin2 p5, 1

    Snom  strget  p5
    a1    diskin2 Snom, 1

Les chaînes dans Csound peuvent être exprimées par les doubles apostrophes traditionnelles (" "), mais aussi par {{ }}. La seconde méthode est utile si l'on veut utiliser les caractères ';' et '$' dans la chaîne sans avoir recours aux codes ASCII.

| Note
Les variables chaînes et les opcodes correspondants ne sont pas disponibles dans les versions de Csound antérieures à la 5.00.

On peut également lier une chaîne à un numéro au moyen de strset et strget.

Csound 5 a aussi amélioré l'analyse des constantes chaîne. Il est possible de spécifier une chaîne multi-lignes en l'entourant avec {{ et }} à la place des habituelles doubles apostrophes (noter que la longueur des constantes chaîne n'est pas limitée, et n'est pas affectée par l'option -+max_str_len), et les séquences d'échappement suivantes sont automatiquement converties :

- \a : cloche d'alerte

- \b : retour arrière

- \n : nouvelle ligne

- \r : retour chariot

- \t : tabulation

- \\ : le caractère '\'

- \nnn : le caractère ayant le code ASCII (en octal) nnn

Les chaînes peuvent être utilement employées avec l'opcode system :

    instr 1
     ; csound5 permet de placer une chaîne sur plusieurs lignes dans des accolades doubles
        system {{     ps
                date
                cd ~/Desktop
                pwd
                ls -l
                whois csounds.com
            }}
    endin

Et avec les opcodes python, entre autres :

    pyruni {{
    import random

    pool = [(1 + i/10.0) ** 1.2 for i in range(100)]

    def get_number_from_pool(n, p):
        if random.random() < p:
            i = int(random.random() * len(pool))
            pool[i] = n
        return random.choice(pool)
    }}

## Opcodes de manipulation de chaîne

Ces opcodes effectuent des opérations sur les variables chaîne (note : la plupart des opcodes ne sont exécutés qu'au moment de l'initialisation, et ils ont une version avec un suffixe "k" qui s'exécute au taux-i et au taux-k ; les exceptions à cette règle comprennent puts et strget) :

- strcpy et strcpyk - Assignation à une variable chaîne.

- strcat et strcatk - Concaténation de chaînes, avec mémorisation du résultat dans une variable.

- strcmp et strcmpk - Comparaison de chaînes.

- strget - Assignation à une variable chaîne de la valeur trouvée dans la table strset à l'index spécifié, ou d'un p-champ chaîne de la partition.

- strlen et strlenk - Retourne la longueur d'une chaîne.

- sprintf - conversion de sortie formatée à la manière de printf, avec mémorisation du résultat dans une variable chaîne.

- sprintfk - conversion de sortie formatée à la manière de printf, avec mémorisation du résultat dans une variable chaîne au taux-k.

- puts - Impression d'une constante ou d'une variable chaîne.

- strindex et strindexk - Retourne la première occurence d'une chaîne dans une autre chaîne.

- strrindex et strrindexk - Retourne la dernière occurence d'une chaîne dans une autre chaîne.

- strsub et strsubk - Retourne une sous-chaîne de la chaîne passée en paramètre.

Précédent | Niveau supérieur | Suivant
Opcodes spectraux basés sur des tableaux | Sommaire | Opcodes de conversion de chaîne