Discussion:
[ruby-fr:1411] A propos de String et Array !
man in the hill
2006-08-24 01:20:46 UTC
Permalink
Bonjour à tous !

Voilà , j'ai un nom de fichier , par ex : foo-1.0.1.tar.bz2 et j'aimerais
récupérer le nom ds une variable qque soit sa longueur et l'extension ds une
autre variable ...


Merci de m'aider ,


@ Bientôt.
--
View this message in context: http://www.nabble.com/A-propos-de-String--et-Array-%21-tf2155968.html#a5955931
Sent from the ruby French forum at Nabble.com.
Guillaume "Zifro" DESRAT
2006-08-24 07:18:11 UTC
Permalink
Il y a de multiple solutions, comme par exemple un split ou
l'utilisation d'une regexp.
Regarde de ce côté là ; il n'y a que toi qui puisse t'aider car toi
seul connait le format des noms de fichiers et ce que tu veux
récupérer précisément.
En l'occurrence, considères-tu que l'extension est bz2 ou tar.bz2 ? Y
aura-t-il des points dans le nom du fichier, en dehors du séparateur
nom/extension ?

On ne peut te donner que quelques pistes.
--
Gui
Thibaut Barrère
2006-08-24 08:17:17 UTC
Permalink
Bonjour à tous
Post by Guillaume "Zifro" DESRAT
En l'occurrence, considères-tu que l'extension est bz2 ou tar.bz2 ? Y
aura-t-il des points dans le nom du fichier, en dehors du séparateur
nom/extension ?
si on considère que l'extension de 'toto.tar.bz2' est '.bz2', alors on peut
s'appuyer sur les méthodes disponibles dans la classe File pour faire le
travail elle-même:

irb(main):001:0> name = 'foo-1.0.1.tar.bz2'
=> "foo-1.0.1.tar.bz2"
irb(main):002:0> extension = File::extname(name)
=> ".bz2"
irb(main):003:0> name_without_extension = File::basename(name,extension)
=> "foo-1.0.1.tar"
irb(main):004:0>

a+!

Thibaut
--
[blog] http://www.dotnetguru2.org/tbarrere
man in the hill
2006-08-24 10:58:09 UTC
Permalink
Post by man in the hill
Bonjour à tous
Post by Guillaume "Zifro" DESRAT
En l'occurrence, considères-tu que l'extension est bz2 ou tar.bz2 ? Y
aura-t-il des points dans le nom du fichier, en dehors du séparateur
nom/extension ?
si on considère que l'extension de 'toto.tar.bz2' est '.bz2', alors on peut
s'appuyer sur les méthodes disponibles dans la classe File pour faire le
irb(main):001:0> name = 'foo-1.0.1.tar.bz2'
=> "foo-1.0.1.tar.bz2"
irb(main):002:0> extension = File::extname(name)
=> ".bz2"
irb(main):003:0> name_without_extension = File::basename(name,extension)
=> "foo-1.0.1.tar"
irb(main):004:0>
a+!
Thibaut
--
[blog] http://www.dotnetguru2.org/tbarrere
Merci Thibaut ! Ruby c'est quand même extraordinaire avec toutes ces
methodes qui te font le boulot avec simplicité ! J'ai encore beaucoup de
choses à apprendre !!!!


Merci à tous de m'avoir répondu !

@ Bientôt.
--
View this message in context: http://www.nabble.com/A-propos-de-String--et-Array-%21-tf2155968.html#a5961696
Sent from the ruby French forum at Nabble.com.
man in the hill
2006-08-24 15:02:42 UTC
Permalink
Post by man in the hill
Bonjour à tous
Post by Guillaume "Zifro" DESRAT
En l'occurrence, considères-tu que l'extension est bz2 ou tar.bz2 ? Y
aura-t-il des points dans le nom du fichier, en dehors du séparateur
nom/extension ?
si on considère que l'extension de 'toto.tar.bz2' est '.bz2', alors on peut
s'appuyer sur les méthodes disponibles dans la classe File pour faire le
irb(main):001:0> name = 'foo-1.0.1.tar.bz2'
=> "foo-1.0.1.tar.bz2"
irb(main):002:0> extension = File::extname(name)
=> ".bz2"
irb(main):003:0> name_without_extension = File::basename(name,extension)
=> "foo-1.0.1.tar"
irb(main):004:0>
a+!
Thibaut
--
[blog] http://www.dotnetguru2.org/tbarrere
salut Thibaut,

J'ai vu que tu as rajouté :: entre la classe et la methode , peut-on faire
de même avec les objets et les méthodes ... Sinon cela fonctionne vraiment
bien ce que tu as posté ci-dessus !!!!


@ Bientôt.
--
View this message in context: http://www.nabble.com/A-propos-de-String--et-Array-%21-tf2155968.html#a5965736
Sent from the ruby French forum at Nabble.com.
Guillaume "Zifro" DESRAT
2006-08-24 15:07:54 UTC
Permalink
Post by man in the hill
J'ai vu que tu as rajouté :: entre la classe et la methode , peut-on faire
de même avec les objets et les méthodes ...
Oui, la preuve :

irb(main):001:0> class A
irb(main):002:1> def say
irb(main):003:2> "coucou !"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> a = A::new
=> #<A:0x2c215c0>
irb(main):007:0> a.say
=> "coucou !"
irb(main):008:0> a::say
=> "coucou !"
irb(main):009:0>
--
Guillaume "Zifro" DESRAT
раздира
man in the hill
2006-08-24 16:07:31 UTC
Permalink
Post by Guillaume "Zifro" DESRAT
Post by man in the hill
J'ai vu que tu as rajouté :: entre la classe et la methode , peut-on faire
de même avec les objets et les méthodes ...
irb(main):001:0> class A
irb(main):002:1> def say
irb(main):003:2> "coucou !"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0> a = A::new
=> #<A:0x2c215c0>
irb(main):007:0> a.say
=> "coucou !"
irb(main):008:0> a::say
=> "coucou !"
irb(main):009:0>
--
Guillaume "Zifro" DESRAT
раздираш отчаяно !
Merci Zifro , très didactique l'exemple !


@ +
--
View this message in context: http://www.nabble.com/A-propos-de-String--et-Array-%21-tf2155968.html#a5967093
Sent from the ruby French forum at Nabble.com.
Simon Arnaud
2006-08-25 00:54:54 UTC
Permalink
Je voudrais juste préciser une ou deux petites choses.

Dans le cas de Filename::basename, nous avons une méthode de classe, et
dans l'exemple de Zifro (a::say), nous avons une méthode d'instance.

Pour le '.' et '::', de ce que je sais, partout où le '.' est utilisé
pour accéder à une méthode, il peut être remplacer par "::".

De ce que j'ai vu dans des codes ruby, ils sont souvent utilisés de la
façon suivante :

Module::méthode

Classe::méthode

Objet.méthode

Il faut aussi noter que "::" permet d'accéder à des constantes d'un
module, et que le '.' ne peut pas y être utilisé.

Module::Constante

Module::MaClasse

Mais pas :

Module.Constante

Module.MaClasse
Module Test
Constante = "Coucou"
end
puts Test::Constante
puts Test.Constante
Coucou
undefined method `Constante' for Test:Module (NoMethodError)

Simon Arnaud
aka Maz
Guillaume "Zifro" DESRAT
2006-08-25 08:07:15 UTC
Permalink
Merci pour ces précisions Maz.
On dit aussi que "::" sert à accéder à un espace de nommage,
typiquement un module que l'on a requis (require "YAIB") sans inclure
(include YAIB).
Pourquoi ?
Parce que les modules sont des instances de la classe Module, et ne
définissent pas, par défaut, des accesseurs pour les constantes.
Mais on peut très bien faire <module>.<méthode>...

Donc, dans le cas où l'on lit YAIB::connect, on ne peut savoir si l'on
accède à la méthode connect de la classe YAIB ou bien du module YAIB.
Attention donc...
--
Guillaume "Zifro"
Alexis Bernard
2006-08-25 08:19:23 UTC
Permalink
J'ajoute mon grain de sel sur l'opérateur de résolution portée pr
résoudre les conflits de nom ;-)

CONSTANTE = 'Hello'

module Test1
CONSTANTE = ' World'

def self.print
puts ::CONSTANTE + CONSTANTE
end
end

Test1::print
Post by Guillaume "Zifro" DESRAT
Merci pour ces précisions Maz.
On dit aussi que "::" sert à accéder à un espace de nommage,
typiquement un module que l'on a requis (require "YAIB") sans inclure
(include YAIB).
Pourquoi ?
Parce que les modules sont des instances de la classe Module, et ne
définissent pas, par défaut, des accesseurs pour les constantes.
Mais on peut très bien faire <module>.<méthode>...
Donc, dans le cas où l'on lit YAIB::connect, on ne peut savoir si l'on
accède à la méthode connect de la classe YAIB ou bien du module YAIB.
Attention donc...
--
Guillaume "Zifro" D
man in the hill
2006-08-25 13:40:17 UTC
Permalink
Post by Simon Arnaud
Je voudrais juste préciser une ou deux petites choses.
Dans le cas de Filename::basename, nous avons une méthode de classe, et
dans l'exemple de Zifro (a::say), nous avons une méthode d'instance.
Pour le '.' et '::', de ce que je sais, partout où le '.' est utilisé
pour accéder à une méthode, il peut être remplacer par "::".
De ce que j'ai vu dans des codes ruby, ils sont souvent utilisés de la
Module::méthode
Classe::méthode
Objet.méthode
Il faut aussi noter que "::" permet d'accéder à des constantes d'un
module, et que le '.' ne peut pas y être utilisé.
Module::Constante
Module::MaClasse
Module.Constante
Module.MaClasse
Module Test
Constante = "Coucou"
end
puts Test::Constante
puts Test.Constante
Coucou
undefined method `Constante' for Test:Module (NoMethodError)
Simon Arnaud
aka Maz
Bonjour,

j'avoue que c'est loin d'être aussi claire dans mon esprit et que cette
petite discussion est plûtot enrichissante !


Merci à tous !


@ Bientôt.
--
View this message in context: http://www.nabble.com/A-propos-de-String--et-Array-%21-tf2155968.html#a5983670
Sent from the ruby French forum at Nabble.com.
Guillaume "Zifro" DESRAT
2006-08-25 13:52:38 UTC
Permalink
C'est enrichissant Ruby.
Regarde DHH avec Rails, il gagne de l'argent !

Quoiqu'il en soit, euh... non, je ne vois rien à ajouter.

(désolé, Vendredi, fatigué, tout ça...)
--
Guillaume "Zifro" DESRAT
раздираш от
Mathieu Bouchard
2006-08-25 20:01:51 UTC
Permalink
Post by Simon Arnaud
Module.Constante
Module.MaClasse
ça se corrige...

class Module
def method_missing(sel,*args)
if "A".."Z"===sel.to_s[0] then const_get(sel) else super end
end
end

avec ça on peut utiliser le . pour séparer des constantes.

_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
| Freelance Digital Arts Engineer, Montréal QC Canada

Marc Chantreux
2006-08-24 07:46:36 UTC
Permalink
Bonjour,

un débutant tente de répondre à un débutant avec des réponses qui doivent être
fortement empreintes de mon passif perl. Il doit y avoir des solucs plus
conformes a l'esprit ruby.

'nom.plein.de.points'.scan(/(.*?)\.([^.]+$)/)
puts "#{$1} : #{$2}"

'nom.plein.de.points'.scan(/[^.]+$/)
puts "#{$`} : #{$&}"

puts /[^.]+$/.match('nom.plein.de.points').pre_match



le 23/08/2006,
Post by man in the hill
Bonjour à tous !
Voilà , j'ai un nom de fichier , par ex : foo-1.0.1.tar.bz2 et j'aimerais
récupérer le nom ds une variable qque soit sa longueur et l'extension ds une
autre variable ...
--
téléphone : 03.90.24.00.19
courriel : marc.chantreux-CWm3pdcF5huVIqup+1z1IUZa+***@public.gmane.org
---------------------------------------
Loading...