Bonjour,
je cherche à parser un fichier texte qui a la format ci-dessous.
un collègue me vante Ruby avec lequel il a réussi à le faire en " oneline" .
le but est de transformer en hash tous les objets (tableau de hash dans sa façon de faire ) afin de les utiliser dans le reste du script.
Code : Sélectionner tout - Visualiser dans une fenêtre à part File.readlines("/home/compte/objet_zone.don").reject{|l|}.map{|l|lf=l.strip;(lf.size> 0 && lf[0..1]!="--") ? lf : nil}.compact.inject([]){|ary,l|ary.last << l if (l=~/^[^=]+=>\s*debut/ && ary<<[])..(l=~/^[^=]+=>\s*fin/);ary}.map{|ary|ary[1..-2].map{|e|e.split('=>').map{|f|f.strip.gsub('"','')}}.to_h}
il m'apprend que l'intervalle qu'il utilise est issu de Perl mais je n'arrive pas à en faire la traduction...
pourriez-vous m'aider à lui démontrer que Perl est tout aussi efficace que son Ruby ? (même si ce n'est pas en "oneline")
Code : Sélectionner tout - Visualiser dans une fenêtre à part if (l=~/^[^=]+=>\s*debut/ && ary<<[])..(l=~/^[^=]+=>\s*fin/)
Merci d'avance
exemple de fichier TXT
objet => debut
index => 1
a => "premiere valeur"
...
z => "dernier mot"
objet => fin
...
objet => debut
index => 77
a => "autre valeur"
...
z => "aurai-je le dernier mot ?"
objet => fin
Partager