Introduction au Lua/Fonctions Texte
Un module Lua-Scribunto pour Mediawiki, est une page de l'espace de nom "Module" qui utilise une table comme variable locale pour stocker ses fonctions et variables mais aussi pour renvoyer la réponse à la fin du processus[1].
Le chapitre bibliothèques Lua, étudie les fonctions intégrées au langage et communément regroupées en librairies ou bibliothèques. Cette leçon vous apprendra comment utiliser les fonctions de la librairie de manipulation de chaînes Lua, dans vos scripts.
Prérequis
Cette leçon suppose que vous ayez assimilé la leçon Tables.
Utiliser les fonctions de manipulation de chaines de caractères
- Accéder au Module:Sandbox.
- Supprimer le code existant.
- Ajouter le code suivant et enregistrer la page:
local p = {}
function p.byte()
return ';byte\n:string.byte(\'A\') is ' .. string.byte('A') .. '\n'
end
function p.char()
return ';char\n:string.char(65) is ' .. string.char(65) .. '\n'
end
function p.find()
return ';find\n:string.find(\'that\', \'at\') is ' .. string.find('that', 'at') .. '\n'
end
function p.format()
return ';format\n:string.format(\'%.2f\', 0) is ' .. string.format('%.2f', 0) .. '\n'
end
function p.gmatch()
result = ''
for each in string.gmatch('this is a test', 't%a+') do
result = result .. each .. ', '
end
return ';gmatch\n:string.gmatch(\'this is a test\', \'t%a+\') is ' .. result .. '\n'
end
function p.gsub()
return ';gsub\n:string.gsub(\'This is a test\', \'%s\', \'-\') is ' .. string.gsub('This is a test', '%s', '-') .. '\n'
end
function p.len()
return ';len\n:string.len(\'len\') is ' .. string.len('len') .. '\n'
end
function p.lower()
return ';lower\n:string.lower(\'LOWER\') is ' .. string.lower('LOWER') .. '\n'
end
function p.match()
return ';match\n:string.match(\'This is a test!\', \'.\', -1) is ' .. string.match('This is a test!', '.', -1) .. '\n'
end
function p.rep()
return ';rep\n:string.rep(\'*\', 5) is ' .. string.rep('*', 5) .. '\n'
end
function p.reverse()
return ';reverse\n:string.reverse(\'reverse\') is ' .. string.reverse('reverse') .. '\n'
end
function p.sub()
return ';sub\n:string.sub(\'that\', 2, 3) is ' .. string.sub('that', 2, 3) .. '\n'
end
function p.upper()
return ';upper\n:string.upper(\'upper\') is ' .. string.upper('upper') .. '\n'
end
return p
Tester votre nouveau script
- Rendez-vous sur "votre page de test".
- Ajouter le code suivant et enregistrer la page:
{{#invoke:Sandbox|byte}} {{#invoke:Sandbox|char}} {{#invoke:Sandbox|find}} {{#invoke:Sandbox|format}} {{#invoke:Sandbox|gmatch}} {{#invoke:Sandbox|gsub}} {{#invoke:Sandbox|len}} {{#invoke:Sandbox|lower}} {{#invoke:Sandbox|match}} {{#invoke:Sandbox|rep}} {{#invoke:Sandbox|reverse}} {{#invoke:Sandbox|sub}} {{#invoke:Sandbox|upper}}
Le résultat doit correspondre à ceci
- byte
- string.byte('A') is 65
- char
- string.char(65) is A
- find
- string.find('that', 'at') is 3
- format
- string.format('%.2f', 0) is 0.00
- gmatch
- string.gmatch('this is a test', 't%a+') is this, test,
- gsub
- string.gsub('This is a test', '%s', '-') is This-is-a-test
- len
- string.len('len') is 3
- lower
- string.lower('LOWER') is lower
- match
- string.match('This is a test!', 'test') is test
- rep
- string.rep('*', 5) is *****
- reverse
- string.reverse('reverse') is esrever
- sub
- string.sub('that', 2, 3) is ha
- upper
- string.upper('upper') is UPPER
Comprendre votre nouveau script
string.byte('A')
retourne le code numérique de la valeur ASCII du(es) caractère(s) dans la chaine.string.char(65)
retourne le caractère correspondant à la valeur numérique ASCII donnée.string.find('that', 'at')
retourne la position en valeur numérique de la seconde chaine à l’intérieur de la première, retournenil
si la seconde chaine est absente.string.format('%.2f', 0)
retourne le second argument formaté selon le premier argument.- Voir fprintf pour les spécifications de formatage.
for each in string.gmatch('This is a test', 't%a+') do
cherche les occurrences du texte indiqué au second paramètre dans la chaine indiquée au premier paramètre. Dans notre exemple l'expression régulière 't%a+' désigne n'importe quel occurrence commençant par un "t" suivi par un nombre quelconque de caractère alphabétique "%a+".- Voir Motifs dans le manuel de référence Scribunto pour la prise en charge des expressions régulières.
string.gsub('This is a test', '%s', '-')
retourne la chaine de caractère indiquée au premier argument en remplaçant chaque occurrence indiquée au second argument par la chaine indiquée en troisième argument. Notre exemple utilise une expression régulière où '%s' représente un espace, que nous remplaçons par un tiret '-'.- Voir Motifs dans le manuel de référence Scribunto pour la prise en charge des expressions régulières.
string.len('len')
retourne la longueur (la taille) de la chaine en nombre de caractères.string.lower('LOWER')
retourne la chaine convertie en caractère minuscule.string.match('This is a test!', 'test')
cherche la première occurrence de la chaine indiquée en second paramètre dans la chaine indiquée au premier paramètre ; Retourne la chaine quand le résultat de la recherche est positif ou "nil" si le résultat de la recherche est négatif. Le seconde paramètre permet d'utiliser des expressions régulières, le troisième paramètre permet d'indiquer le point départ de la recherche.- Voir Motifs dans le manuel de référence Scribunto pour la prise en charge des expressions régulières.
string.rep('*', 5)
retourne la chaine indiquée au premier paramètre, et répète l'opération le nombre de fois indiqué au second paramètre.string.reverse('reverse')
retourne la chaine inversée.string.sub('that', 2, 3)
retourne la "sous-chaine" contenue dans la chaine indiquée au premier paramètre ; commençant au second paramètre et terminant au troisième paramètre.string.upper('upper')
retourne la chaine convertie en caractère minuscule .
Conclusion
Félicitation! Vous êtes capable de créer, tester et comprendre un script Lua qui contient des fonctions de manipulation de chaines de caractères. Continuez en choisissant l'étude d'une nouvelle bibliothèque de fonctions.
Voir aussi
Références