meta données pour cette page
Approfondissement du langage (Ruby)
Filtrage des données
- Par ordre décroissant au dépend des valeurs :
puts tableau_hash.sort { | a,b | b[1]<=>a[1] }
Les blocs
- Les blocs sont des ensembles d'instructions formant un tout :
mon_block { puts "enterieur du block" }
- Une méthode peut invoquer le bloc qui lui a été associé, une ou plusieurs fois, au moyen de l’instruction yield :
def deux_fois puts "Début" yield yield puts "Fin" end deux_fois { puts "Hello" }
Nous obtenons :
Début Hello Hello Fin
- Il est possible de passer des paramètres à l’instruction yield
def deux_fois puts 'debut' yield("appel",1) yield("maison",2) puts 'fin' end deux_fois { |a,b| puts "ello #{a} puis #{b}" }
Nous obtenons :
debut ello appel puis 1 ello maison puis 2 fin
- L'objet Proc permet de sauvegarder et d’exécuter par la suite des blocs
p = Proc.new{ |x , y| x + y } p.call(12 , 4)
Accès aux fichiers
- Lecture :
# Lors d'un nouveau fichier #File.new('test.txt', 'r') do |ligne| # Lorsqu'il est déjà existant File.open('test.txt', 'r') do |ligne| puts ligne end
- Écriture d'un fichier
# Lors d'un nouveau fichier #File.new('test.txt', 'w') do |ligne| # Lorsqu'il est déjà existant File.open('test.txt', 'w') do |ligne| ligne << "une ligne" end
- Accès en lecture ligne par ligne :
IO.readlines('test.txt').each do |ligne| puts ligne end
- Placer le contenu d'un fichier dans une variable :
# De type chaine contenu = IO.read('fichier.txt') # De type tableau contenu = IO.readlines('fichier.txt')
- Est-ce que le fichier est vide ?
puts File.zero?("fichier.txt")
Manipuler les dates
- Différencier les dates :
puts File.mtime(fichier) < Time.mktime (annee,mois,jours)
- Définir une date et la formater :
t = Time.mktime(annee,mois,jour,heure,minutes,secondes,microsecondes) # Convertir la date dans un autre format : t.strftime('%H:%M:%S,%L')
Documentation sur la classe Time
Les classes
- Déclarer une classe :
class Livre # Constructeur d'une classe : def initialize ( titre , auteur , nbpages ) @titre = titre @auteur = auteur @nbpages = nbpages end # Accessibilité des membres : def fonc1 ... end def fonc2 ... end def fonc3 ... end # par défaut les méthodes sont publiques : public :fonc1, :fonc2 # Les méthodes peuvent être utilisé que par la classe elle-même et celles dérivées protected :fonc3 end
Expression régulière
On peut s'aider du site Regex101 pour créer les patterns.
- Vérifier la présence d'un élément :
Vérifions qu'il y a bien un prénom dans la phrase ci-dessous.
phrase = "je m'appel Bruno et j'ai 22 ans." if phrasee =~ /[A-Z][a-z]+/ then puts "vraie" end
vraie
- Filtrer les données d'un élément :
phrase = "je m'appel Bruno et j'ai 22 ans." if phrase =~ /([A-Z][a-z]+).* ([0-9]+)/ then prenom = $1 age = $2 end
- Par substitution :
# Récupérer des valeurs dans une chaîne : filtre = ligne.sub(/^([^ ]+) [^"]+"[^ ]+ ([^ ]+)/, "\\1,\\2,\\3") filtre = filtre.split(',') # Remplacer des caractères dans une chaîne : s = 'Bonjour' s1 = s.sub(/[aeiouy]/ , '*') #> 'B*njour' s2 = s.gsub(/[aeiouy]/ , '*') #> 'B*nj**r'
On notera qu'il existe des méta-caractères qui devront être précedé d'un “\” pour être lu :
. | ( ) [ ] { } \ ˆ $ * + /
Séquence | Utilité |
---|---|
\d | Numériques |
\D | Non numériques |
\w | Tous les caractères |
\W | Aucun caractères |
\s | Caractères séparateur |
\S | Sans caractères séparateur |
[:alnum:] | Caractères alphanumériques |
[:alpha:] | Lettres minuscules et majuscules |
[:blank:] | Espace et tabulation |
[:lower:] | Minuscules |
[:upper:] | Majuscules |
[:punct:] | sauf espace et alphanumériques |
[:space:] | Espaces |
[:xdigit:] | Caractères des nombres hexadécimaux |
Installer des modules
Pour personnaliser d'avantages son code, il faut parfois faire appel à des modules externe à ruby. Ce site permettra sans doute de répondre au bonheur de chacun.
Voici comment les importer :
gem install <module>
Interagir avec une page web
require "open-uri" open("http://bruno-tatu.com") do |i| puts i.read.scan(/<img .* src=\"(.*)\"/) end