LoriotPro Extended Edition Documentation language LUA

TDM


Fonctions sur les chaînes de caractères LUA

Ce document présente les fonctions de manipulation de chaînes de caractères en LUA. Ces fonctions peuvent être utilisées dans les scripts LUA de LoriotPro.

Voici la liste préliminaire de description des fonctions de Chaînes de caratères

Note: Dans les chaînes de caractères de Lua les index (offset d'un caractère dans la chaîne) commencent à la valeur d'index 1, et non pas la valeur d'index 0 comme en C.

Consultez le chapitre Expressions régulières pour la recherche de caractères dans les chaînes de caractères

Recherche du code ASCII d'un caractère situé dans une chaîne

string.byte(s [, I ])
s:byte([i ])

Renvoie le code numérique ASCII du caractère situé à l'index I de la chaine s en argument.

> = string.byte("ABCDE les") -- aucun index, ainsi index 1 du premier soit le caractère A
65
> = string.byte("ABCDE", 1) -- commencent à 1
65
> = string.byte("ABCDE", 0) -- nous n'employons pas
C
> = string.byte("ABCDE", 100) -- index hors de la gamme, aucune valeur retournée

Création d'une chaîne de caractère à partir des codes ASCII

string.char(i1, i2...)

Création d'une chaîne de caractères à partir des codes ASCII passés comme arguments en i1, i2 ....
Remarque: Les codes ASCII ne sont pas nécessairement compatibles à travers les systèmes d'exploitations.

> = string.char(65,66,67)
ABC
> = string.char() -- chaîne de caractères vide

Enregistre un fonction dans une chaîne de caractères

string.dump(function)

Renvoie une représentation binaire de la fonction donnée, de sorte que loadstring postérieur sur cette chaîne de caractères renvoie une copie de la fonction. La fonction doit être une fonction de Lua sans upvalues.

Recherche une sous chaîne de caractère dans une chaîne

string.find(s, pattern [, init [, plain ] ])

s:find(pattern [, init [, plain ] ])

Recherche la première occurence de la sous chaîne pattern dans la chaînes de caractères s. Si la sous chaîne est trouvé une paire de valeurs représentant le début et l'extrémité de la chaîne de caractères est retournée. Si le modèle ne peut pas être trouvé la valeur nil est retournée.

> = string.find("Hello Lua user ", "Lua")
7 9
> = string.find("Hello Lua user","banana")
nil

Nous pouvons en option indiquer où commencer la recherche avec un troisième argument init. L'argument peut également être négatif pour débuter la recherche dans la chaîne de caractères en partant de l'extrémité droite.

> = string.find("Hello Lua user ", "Lua", 1) -- commencez au premier caractère
7 9
> = string.find("Hello Lua user ", "Lua", 8) -- "Lua" non trouvé après le 8 caractère de la chaîne
nil
> = string.find("Hello Lua user ", "e", -5) -- d'abord "e" 5 caractères de l'extrémité
13 13

L'argument pattern permet également des recherches plus complexes. Voyez le Patterns Tutorial pour plus d'information. Nous pouvons arrêter le dispositif régulier d'expression en employant le quatrième argument facultatif plain. plain prend une valeur booléenne et doit être précédé de init. Par exemple,

> = string.find("Hello Lua user ", "%su") -- trouvez un caractère d'espace suivi de "u"
10 11
> = string.find("Hello Lua user ", "%su", 1, vrai) -- activer les recherches simple, maintenant pas a trouvé
nil

Créer une chaîne de caratères formatée

string.format(formatstring, e1, e2...)

formatstring:format(e1, e2...)

Créez une chaîne de caractères composée et des arguments fournis e1, e2 et respectant le format défini par formatstring. Fonction semblable à printf("format",...) en language C. Une option additionnelle %q permet la création de double guillement autour d'une chaîne de caractères.

c, d, E, e, f, g, G, I, o, u, X, et x tous s'attendent à un nombre comme argument.

q et s attendent une chaîne de caractères.

> = string.format("%s %q", "Hello", "Lua User !") -- chaîne de caractères et chaîne de caractères entre double guillement
Hello "Lua user!"
> = string.format("%c%c%c", 76.117.97) -- Code caratères en ASCII
Lua
> = string.format("%e, %E", math.pi, math.pi) -- exposant
3.141593e+000, 3.141593E+000
> = string.format("%f, %g", math.pi, nombre entier signé, signé, non signé de math.pi) -- virgule flottante
3.141593, 3.14159
> = string.format("%d, %i, %u", -100, -100, -100 compact) -- signé, non signé
-100, -100, 4294967196
> = string.format("%o, %x, %X", -100, -100, -100) -- octal,hexa,hexa
37777777634, ffffff9c, FFFFFF9C

 

 Type Format de la sortie
d ou i entier décimal signé
o entier octal non signé
u entier décimal non signé
x entier hexadécimal non signé
X entier hexadécimal non signé en majuscules
f réel de la forme [-]dddd.ddd
e réel de la forme [-]d.ddd e [+/-]ddd
E comme e mais l'exposant est la lettre E
g format e ou f suivant la précision
G comme g mais l'exposant est la lettre E
c caractère
s affiche les caractères jusqu'au caractère nul '\0'
ou jusqu'à ce que la précision soit atteinte
p pointeur

Recherche d'une sous chaîne par expression régulière

string.gmatch(s, pat)

s:gmatch(pat)

Ceci renvoie un modèle trouvant l'iterator. L'iteration recherchera dans la chaînes de caractères passée la sous chaîne passée pat.

>for word in string.gmatch("Hello Lua user ", "%a+") do print(word) end
Hello
Lua
user

Remplacement des occurences d'une sous chaîne dans une chaîne

string.gsub(s, pattern, remplace [, n ])

s:gsub(pattern, remplacent [,n ])

C'est une fonction très puissante qui peut être employée de différente manières. Utilisé simplement elle peut remplacer tous les occurence d'une sous chaîne pattern dans la chapine s. Une paire de valeurs est retournée, les chaînes de caractères modifiée et le nombre de substitutions faites. Le quatrième argument facultatif n peut être employé pour limiter le nombre de substitutions faites :

> = string.gsub("Hello banana", "banana", "LUA user")
Hello Lua user 1
> = string.gsub("banana", "a", "A", 2) -- substitutions de limite faites 2 à la
bAnAna 2

Si une capture est employée ceci peut être mis en référence dans les chaînes de caractères de rechange en utilisant la notation %capture_index, par exemple,

> = string.gsub("banana", "()", "%1 -") -- capturent tous les occurances "d'" et les remplacent
ban-an-a 2
> = string.gsub("banana", "a(n)", "a(%1)") -- des parenthèses autour des n qui suivent un s
ba(n)a(n)a 2
> = string.gsub("banana", "(a)(n)", "%2%1") -- renversent tous les "an"s
bnanaa 2 d'an"s

Si le remplacement est une fonction et pas une chaîne de caractères, les arguments passés à la fonction sont toutes les captures qui sont faites. Si la fonction renvoie une chaîne de caractères, la valeur retournée est substituée de nouveau dans les chaînes de caractères. Juste comme string.find() nous pouvons employer des expressions régulières pour rechercher dans les chaînes de caractères . Des exemples sont présents dans le Patterns Tutorial.

> = string.gsub("Hello Lua user ", "(%w+)", print) -- imprime tous les mots trouvés
Hello
Lua
user
3
> = string.gsub("Hello Lua user ", "(%w+)", function(w) return string.len(w) end) -- remplacent par les longueurs des sous chaines
5 3 4 3
> = string.gsub("banana", "(a)", string.upper) -- convertie les "a" en majuscule
bAnAnA 3
> = string.gsub("banana", "(a)(n)", function(a, b) return b..a end) -- inverse les lettres a et b
bnanaa 2

L'expression la plus courante pour une sélection serait (.-). Par exemple l'expression {(.-)}" sélectionne tous les caractères entre parenthèse {}. Une autre sélection fréquente est (. *) qui sélectionne tous les caractères entre parenthèse {} en incluant les parenthèses trouvés , deux exemples ici illustrent la différence.

> = string.gsub("The big {brown} fox jumped {over} the lazy {dog}.","{(.-)}", function(a) print(a) end )
brown
over
dog
> = string.gsub("The big {brown} fox jumped {over} the lazy {dog}.","{(.*)}", function(a) print(a) end )
brown} fox jumped {over} the lazy {dog

Retourne la longueur d'un chaîne de caractères

string.len(s)

s:len()

Renvoyez la longueur de les chaînes de caractères passée.

> = string.len("Lua")  
3
> = string.len("")
0
> = string.len("Lua\000user") -- Lua strings are 8 bit pure so \000 does not terminate
8

Convertit les majuscules en minuscules

string.lower(s)

s:lower()

Convertit les lettres majuscules la lettre minuscule.

> = string.lower("Hello, Lua user!")  
hello, lua user!

Convertit les minuscules en majuscules

string.upper(s)

s:upper()

Convertit les lettres les minuscules en lettres majuscules.

> = string.upper("Hello, Lua user!")  
HELLO, LUA USER!

Crée une chaîne par concaténation multiple

string.rep(s, n)

s:rep(n)

Crée une chaîne par concaténation multiple de la chaîne de caractères passée en argument.

> = string.rep("Lua",5)
Lua
Lua
Lua
Lua
Lua
> = string.rep("Lua\n", 3)
Lua
Lua
Lua

inverse une chaîne de caractères

string.reverse(s)

s:reverse(s)

Inverse une chaîne de caractères s

> = string.reverse("lua")
aul

Sélectionne une sous chaîne par index début et fin

string.sub(s, I [, j ])

s:sub(i [,j ])

Renvoie une sous-chaîne de caractères de la chaîne passée en argument. Le début de sous-chaîne est précisé par i. Si le troisième argument j n'est pas donné, la sous-chaîne finira à l'extrémité de les chaînes de caractères. Si le troisième argument est donné, la sous-chaîne finit à et inclut j.

> = string.sub("Hello Lua user", 7)      -- from character 7 until the end  
Lua user
> = string.sub("Hello Lua user", 7, 9) -- from character 7 until and including 9
Lua
> = string.sub("Hello Lua user", -8) -- 8 from the end until the end
Lua user
> = string.sub("Hello Lua user", -8, 9) -- 8 from the end until 9 from the start
Lua
> = string.sub("Hello Lua user", -8, -6) -- 8 from the end until 6 from the end
Lua


www.loriotpro.com