OVH Cloud OVH Cloud

ruby regexp paramétrée

7 réponses
Avatar
yvon.thoravalNO-SPAM
je ne trouve pas la syntaxe pour paramétrer l'expression suivante :

if line =~ /^(.*)\s+Bourgogne\s+(.*)/


je voudrais pouvoir remplacer "Bourgogne" par l'ARGV[2].to_s

(NB : tjs pas reçu le bouquin...)
--
yt

7 réponses

Avatar
yvon.thoravalNO-SPAM
Yvon Thoraval wrote:

je voudrais pouvoir remplacer "Bourgogne" par l'ARGV[2].to_s


Bon j'ai essayé, sans succès, ce script :

#! /usr/bin/ruby
# script /Users/yvon/bin/findInLine

if ARGV.length != 3
print "Usage :n"
print "findInLine inFileName outFileName needlen"
exit 1
end
fichierIn = ARGV[0].to_s
fichierOut = ARGV[1].to_s
needle = ARGV[2].to_s
rex = Regexp.new('^(.*)s+#{needle}s+(.*)')
out = File.open( fichierOut, "a+")
File.open( fichierIn, "r") do |file|
for line in file
if line =~ rex
out.print line
end
end
end

out.close
exit 0


--
yt

Avatar
lucsky
Yvon Thoraval wrote:

Bon j'ai essayé, sans succès, ce script :

#! /usr/bin/ruby
# script /Users/yvon/bin/findInLine

if ARGV.length != 3
print "Usage :n"
print "findInLine inFileName outFileName needlen"
exit 1
end
fichierIn = ARGV[0].to_s
fichierOut = ARGV[1].to_s
needle = ARGV[2].to_s
rex = Regexp.new('^(.*)s+#{needle}s+(.*)')
out = File.open( fichierOut, "a+")
File.open( fichierIn, "r") do |file|
for line in file
if line =~ rex
out.print line
end
end
end

out.close
exit 0


Pourquoi faire simple quand on peut faire compliqué hein ? :))

ruby -p -e "gsub( /needle/, 'replacement' )" inFileName

Le résultat est envoyé vers stdout, donc tu peux utiliser une
redirection vers un fichier. Par exemple:

ruby -p -e "gsub( /Bourgogne/, 'Pepsi' )" pinards.txt > soda.txt

(NB : tjs pas reçu le bouquin...)


Moi non plus, mais j'ai le PDF depuis vendredi.

--
Luc Heinrich -

Avatar
yvon.thoravalNO-SPAM
Luc Heinrich wrote:

Pourquoi faire simple quand on peut faire compliqué hein ? :))
je ne connaissais pas gsub, mais c'est que j'ai tendance à faire simple

))
ruby -p -e "gsub( /needle/, 'replacement' )" inFileName

Le résultat est envoyé vers stdout, donc tu peux utiliser une
redirection vers un fichier. Par exemple:

ruby -p -e "gsub( /Bourgogne/, 'Pepsi' )" pinards.txt > soda.txt
???

je cherche à garder les lignes contenant Bourgogne (par ex) avec au
moins un blanc devant.
(NB : tjs pas reçu le bouquin...)


Moi non plus, mais j'ai le PDF depuis vendredi.


Chronopost est passé vendredi en mon absence...
--
yt


Avatar
lucsky
Yvon Thoraval wrote:

je cherche à garder les lignes contenant Bourgogne (par ex) avec au
moins un blanc devant.


Ok, j'avais pas compris l'énoncé de départ, désolé.

Comme ça ?:

ruby -e "print ARGF.grep(/^s+Bourgogne/)" inFile > outFile

Chronopost est passé vendredi en mon absence...


Rien ici, queud', nada, wallou. Si ces connards de la poste sont encore
passé sans laisser d'avis de passage (ça ferait que la cinquième fois
cette année, sachant qu'en plus je bosse chez moi et que donc je suis là
toute la journée), ça va chier dans le ventilo. Grave.

--
Luc Heinrich -

Avatar
yvon.thoravalNO-SPAM
Luc Heinrich wrote:

ruby -e "print ARGF.grep(/^s+Bourgogne/)" inFile > outFile


Idéalment ce que je cherche à faire est un dcript qui :
à partir d'un inFile + argument (ici Bourgogne) me sorte un fichier où
il n'y a que les lignes contenant " Bourgogne" et les mette dans un
fichier de nom inFile_Bourgogne dans mon exemple (je fais des tris pour
entrer ça dans une base de donnée (Appellations...)

Chronopost est passé vendredi en mon absence...


Rien ici, queud', nada, wallou. Si ces connards de la poste sont encore
passé sans laisser d'avis de passage (ça ferait que la cinquième fois
cette année, sachant qu'en plus je bosse chez moi et que donc je suis là
toute la journée), ça va chier dans le ventilo. Grave.


Pas d'avis de passage pour moi, ils ont fait pire il y a un an : ils
m'ont livré un APN contre-remboursement mais ne saient que faire de mon
chèque )))

Qu'ils ont finalement perdu...

J'ai commandé aussi qqc à AppleStore, livraison TNT (jolie
l'appellation???), ils ne savaient qu'il fallait un code d'entrée (je
suis sur Paris... ils ont retourné le colis chez Apple...


--
yt


Avatar
lucsky
Yvon Thoraval wrote:

Idéalment ce que je cherche à faire est un dcript qui :
à partir d'un inFile + argument (ici Bourgogne) me sorte un fichier où
il n'y a que les lignes contenant " Bourgogne" et les mette dans un
fichier de nom inFile_Bourgogne dans mon exemple (je fais des tris pour
entrer ça dans une base de donnée (Appellations...)


---[ findInLine ] --------

#!/bin/sh
ruby -e "print ARGF.grep(/^s+$2/)" $1 > $1_$2

-----------------------------

Exemple: findInLine pinards Bourgogne

Comme ça ? Note bien sur que ce n'est qu'un exemple parmi les milliers
de possibilités de faire ce que tu veux :)

PS: et je constate que comp.lang.ruby n'a pas non plus compris du
premier coup ta question :p

--
Luc Heinrich -

Avatar
yvon.thoravalNO-SPAM
Luc Heinrich wrote:

PS: et je constate que comp.lang.ruby n'a pas non plus compris du
premier coup ta question :p


ben oui, c'est pas évident de poser une question en patois )))
mais bon, merci, ça marche impec maintenant.
je n'ose + sortir (attente de chronopost) et me précipite à la porte dès
que qq'1 arrive sur le pallier...
--
yt