Created
October 11, 2012 18:46
-
-
Save libricoleur/3874653 to your computer and use it in GitHub Desktop.
Premier script AWK : la base de données musicale
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Conclusion de l'exercice : on peut aussi écrire des trucs crades en AWK. | |
# Fonctions | |
## Affiche la liste des albums de l'artiste depuis la variable globale 'artist_albums' | |
function print_artist_albums(){ | |
for (album in artist_albums){ | |
print " <album name=\""artist_albums[album]["name"]"\">" | |
for (support in artist_albums[album]["supports"]){ | |
print " <support id=\""artist_albums[album]["supports"][support]["id"]\ | |
"\" type=\""artist_albums[album]["supports"][support]["type"]\ | |
"\" prix=\""artist_albums[album]["supports"][support]["prix"]"\"/>" | |
} | |
print " </album>" | |
} | |
} | |
## Termine une balise <style>, et une <groupe> si nécessaire | |
function end_style(){ | |
if (opened["groupe"]) { | |
print_artist_albums() | |
print " </groupe>" | |
opened["groupe"]=0 | |
} | |
if (opened["style"]) print "</style>" | |
} | |
# | |
BEGIN { | |
FS=": " | |
print "<xml>" | |
} | |
END { | |
# Il faut fermer le dernier <style> à la fin du fichier | |
end_style() | |
print "</xml>" | |
} | |
/^*$/ { | |
# On se sert des lignes "*" pour comprendre qu'on a fini un <style>. | |
# Ça aurait aussi pu aller dans le bloc /^STYLE/, avec un if | |
# (opened["style"]). | |
end_style() | |
opened["style"]=0 | |
} | |
/^STYLE/ { | |
print "<style name=\""$2"\">" | |
opened["style"]=1 | |
} | |
/^GROUPE/ { | |
# Dès qu'on passe à un nouveau groupe, on affiche les albums du précédent | |
if (opened["groupe"]){ | |
print_artist_albums() | |
print " </groupe>" | |
#(inutile) opened["groupe"] = 0 | |
} | |
print " <groupe name=\""$2"\">" | |
opened["groupe"]=1 | |
# On vide la liste des albums du groupe précédent | |
delete artist_albums | |
} | |
/^ALBUM/ { | |
for (n=2; n<=NF; n++) { | |
# On stocke le nom de chaque album | |
artist_albums[n-2]["name"]=$n | |
} | |
} | |
/^SUPPORT/ { | |
# Pour chaque album | |
for (n=2; n<=NF; n++) { | |
split($n, sups, "; ") | |
supn=0 | |
# et pour chaque support de l'album | |
for (sup in sups) { | |
# on stocke le type du support et le chiffre qui va avec (ID ?) | |
split(sups[sup], sup_obj, "=") | |
artist_albums[n-2]["supports"][supn]["type"]=sup_obj[1] | |
artist_albums[n-2]["supports"][supn]["id"]=sup_obj[2] | |
supn++ | |
} | |
} | |
} | |
/^PRIX/ { | |
# Même principe que pour /^SUPPORT/. | |
for (n=2; n<=NF; n++) { | |
split($n, prix, "; ") | |
supn=0 | |
for (pri in prix) { | |
artist_albums[n-2]["supports"][supn]["prix"]=prix[pri] | |
supn++ | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment