[LA-discussions] script avec sed

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


Bonjour,

J'ai besoin (pour faire des tablatures d'accordéon diatonique avec lilypond 
qui ne possède pas cette fonctionnalité) de faire des remplacements de texte 
assez élaborés dans un fichier. J'ai pensé à sed (que je ne connais que très 
peu) mais avant d'aller plus loin j'aimerais savoir si le pseudo-code que 
j'ai écrit est réalisable avec sed ou non. Et éventuellement je veux bien un 
petit coup de main, sachant que le code sera reversé à la communauté sous 
licence gpl of course...

(Si vous voulez voir à quoi ressemble ce que je fais avec lilypond allez voir 
sur http://www.cartron.org/spip.php?article39.)

executer lilypond fichier.ly > fichier.display.ly
variable clavier = 1
variable tonalite = ""
variable diato = ""
ouvrir le fichier fichier.ly
chercher le texte "kbd = "
s'il existe
	sélectionner le texte qui suit jusqu'au prochain séparateur (espace ou saut 
de ligne)
	stocker ce texte dans la variable diato
	chercher le texte "\key "
	sélectionner le texte qui suit jusqu'au prochain séparateur (espace ou saut 
de ligne)
	stocker ce texte dans la variable tonalite
	si diato = tonalite
		clavier = 1
		sinon
		clavier = 2
ouvrir le fichier fichier.display.ly
remplacer les 5 premières lignes par Tablature = {
remplacer "^ " par ""
remplacer "_ " par ""
remplacer les deux dernières ligne par }
tant qu'on trouve un  {
et tant qu'on n'a pas atteint un }
	variable hauteur = ""
	variable note = ""
	variable duree = ""
	prendre le premier groupe de caractères (séparateur espace ou retour ligne)
	le stocker dans la variable groupe
	si le 2e caractère à partir de la droite est \
		splitter le groupe au niveau du \ sans garder le \
		stocker la partie de droite (1 ou 2 sinon message d'erreur) dans la variable 
clavier
		sinon la variable clavier ne change pas
		stocker la partie de gauche dans la variable note
	sinon stocker le groupe dans la variable note
	si la variable note contient un ou plusieurs chiffre suivis éventuellement 
d'un ou plusieurs  points (.)
		splitter après le dernier chiffre ou le dernier .
		stocker la partie droite (chiffres et .) dans la variable duree
		stocker la partie gauche (lettres et , et ') dans la variable hauteur
	sinon stocker le groupe dans la variable hauteur
	la variable noteclavier est égale à "hauteur" + "\" + "clavier"
	la variable boutonclavier est égale à la correspondance de noteclavier dans 
le tableau
	splitter la variable boutonclavier en 2 au \
	stocker la partie de droite dans la variable corde
	stocker la partie de gauche dans la variable case
	la variable bouton est égale à "case" + "duree" + "\" + "corde"
	remplacer groupe par bouton
	aller au groupe de caractères suivant
aller au { suivant
dans fichier.ly remplacer Tablature = {  } par le contenu de 
fichier.display.ly
sauvegarder fichier.ly
effacer fichier.display.ly
executer lilypond fichier.ly

tableau de correspondance
code	noteclavier	boutonclavier
101	sol\1	sol\1
102	la\1	la\2
103	si\1	sold\1
104	do'\1	lad\2
105	re'\1	la\1
106	mi'\1	si\2
107	fad'\1	do'\2
108	sol'\1	lad\1
109	la'\1	dod'\2
110	si'\1	si\1
111	do''\1	re'\2
112	re''\1	do'\1
113	mi''\1	red'\2
114	fad''\1	mi'\2
115	sol''\1	dod'\1
116	la''\1	fa'\2
117	si''\1	re'\1
118	re'''\1	red'\1
201	do'\2	do'\3
202	re'\2	re'\4
203	mi'\2	dod'\3
204	fa'\2	red'\4
205	sol'\2	re'\3
206	la'\2	mi'\4
207	si'\2	fa'\4
208	do''\2	red'\3
209	re''\2	fad'\4
210	mi''\2	mi'\3
211	fa''\2	sol'\4
212	sol''\2	fa'\3
213	la''\2	sold'\4
214	si''\2	la'\4
215	do'''\2	fad'\3
216	mi'''\2	sol'\3


-- 
Cordialement, Daniel Cartron
« Shakespeare n'a jamais existé. Toutes ses pièces ont été écrites par un 
inconnu qui portait le même nom que lui. »
Alphonse Allais


---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/