Calcolo del codice fiscale

Ebbene si, mi affido al calcolo del caro codice fiscale :smiley:
L’ho fatto tante volte a scuola, mi sembrava giusto farla anche adesso.
Apro questa discussione per segnalarvi eventuali dubbi che non riesco a
risolvere, e il primo è arrivato praticamente subito.

Devo togliere le vocali dal cognome, e ho pensato di usare il metodo
split, ma da solo mi rendo conto che la soluzione da me provata è una
baggianata:

puts "Inserisci il tuo cognome: "
cognome = gets.chomp.downcase

cognome = cognome.split(“a”,“e”,“i”,“o”,“u”);

Ovviamente mi da problemi con gli argomenti del metodo.
Ho usato split per dividere la data, e li nessun problema :frowning:

puts “Data di nascita: (GG/MM/AAAA)”
data = gets.chomp
data = data.split("/")
giorno = data[0]
mese = data[1]
anno = data[2]

Il metodo split serve per splittare una stringa in un array, composto da
pezzi delimitati dal separatore che gli passi.

Per togliere le vocali da una stringa, userei qualche variazione di
gsub,
tipo:

stringa.gsub(/[aeiou]/i, ‘’)

Nota per che in questo modo non elimini i vari caratteri accentati,
quindi
c’ ancora un po’ di lavoro da fare :wink:

Ciao,

Ju

–*
*M.Sc. Ju Liu
Card: http://zerp.ly/ju-liu

Societ Cooperativa weLaika - Impresa Sociale
Corso Vigevano 14/B, 10154 Torino (TO), Italy
http://welaika.com - [email protected]

2013/1/24 ilgu G. [email protected]

Il giorno 24/gen/2013, alle ore 16:21, ilgu G. [email protected] ha
scritto:

cognome = cognome.split(“a”,“e”,“i”,“o”,“u”);

usa #gsub, Luke:

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub


cognome = cognome.gsub(/[aeiou]/,’’)

documentazione per #split:

http://www.ruby-doc.org/core-1.9.3/String.html#method-i-split


http://andreapavoni.com

cognome = cognome.gsub(/[aeiou]/,’’)

Per il codice fiscale, y viene considerato una vocale?


David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/

Sapevo fosse una semiconsonante, ma onestamente non saprei come viene
collocata, devo informarmi :slight_smile:

Vi ringrazio! Per ora evito i vari controlli su accentate, doppi cognomi
o altro, magari li implemento alla fine quando riesco ad ottenere già
qualcosa di tangibile :slight_smile:

si, ci sono inoltre delle altre regole (che non ricordo), per esempio se
un tizio si chiamasse: Pio Pope si applicano regole diverse perch non ci
sono sufficienti consonanti :slight_smile:

A.

Il giorno 24/gen/2013, alle ore 16:36, ilgu G. [email protected] ha
scritto:

Sapevo fosse una semiconsonante, ma onestamente non saprei come viene
collocata, devo informarmi :slight_smile:


Posted via http://www.ruby-forum.com/.


Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml


http://andreapavoni.com

“riccardo”.split(//).each {|char| puts char if “aieou”.include?(char)}

2013/1/24 ilgu G. [email protected]:

cognome = gets.chomp.downcase

cognome = cognome.split(“a”,“e”,“i”,“o”,“u”);

Ovviamente mi da problemi con gli argomenti del metodo.
Ho usato split per dividere la data, e li nessun problema :frowning:

aggiungo una cosa a quel che ti hanno scritto gli altri,
Qua l’errore che ti dava , immagino, perch split prende un argomento
solo, il separatore.
Ma puoi comunque usarlo, passandogli come separatore la regexp per le
vocali, cio

>> "gabriele".split(/[aeiou]/)
=> ["g", "br", "", "l"]

che per ti da un risultato che comunque poco utile e ti conviene
usare #gsub :slight_smile:


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com

gabriele renzi wrote in post #1093547:

2013/1/24 ilgu G. [email protected]:

cognome = gets.chomp.downcase

cognome = cognome.split(“a”,“e”,“i”,“o”,“u”);

Ovviamente mi da problemi con gli argomenti del metodo.
Ho usato split per dividere la data, e li nessun problema :frowning:

aggiungo una cosa a quel che ti hanno scritto gli altri,
Qua l’errore che ti dava , immagino, perch split prende un argomento
solo, il separatore.
Ma puoi comunque usarlo, passandogli come separatore la regexp per le
vocali, cio

>> "gabriele".split(/[aeiou]/)
=> ["g", "br", "", "l"]

che per ti da un risultato che comunque poco utile e ti conviene
usare #gsub :slight_smile:


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com

Thanks! :slight_smile:

Si, per l’algoritmo sto guardando su wikipedia :smiley:
Ero partito bello sparato, ma mi conviene farmi pezzo per pezzo, perchè
ogni componente ha le sue regole

2013/1/24 ilgu G. [email protected]

cognome = gets.chomp.downcase
cognome = cognome.split(“a”,“e”,“i”,“o”,“u”)

Il modo idiomatico per splittare una stringa in Ruby sulla base di un
pattern qualunque il metodo scan della standard library. Ad esempio:

“stringa”.scan(/[^aeiou]{1}/)

Ciao
Stefano

2013/1/24 Stefano P. [email protected]:

2013/1/24 ilgu G. [email protected]

cognome = gets.chomp.downcase
cognome = cognome.split(“a”,“e”,“i”,“o”,“u”)

Il modo idiomatico per splittare una stringa in Ruby sulla base di un
pattern qualunque il metodo scan della standard library. Ad esempio:

“stringa”.scan(/[^aeiou]{1}/)

perch {1} ?
Sar che non son tanto sveglio, ma penso non serva.


twitter: @riffraff
blog (en, it): www.riffraff.info riffraff.blogsome.com
work: circleme.com

2013/1/24 gabriele renzi [email protected]

2013/1/24 Stefano P. [email protected]:
perch {1} ?
Sar che non son tanto sveglio, ma penso non serva.

Sei sveglissimo, ho fatto di corsa :slight_smile: {1} superfluo per produrre
raggruppamenti di un solo carattere. E’ invece carino per produrre
gruppi
di n caratteri con {n}.

Cerco di destreggiarmi tra le risposte, anche se non è facile riuscire a
capire tutto al volo :smiley:

Per il cognome ho fatto così, troppo articolato?

puts "Inserisci il tuo cognome: "
cognome = gets.chomp.downcase
cognome = cognome.gsub(/ /,’’)
cognome_vocali = cognome.gsub(/[bcdfghyjlmnpqrstvwz]/,’’)
cognome_consonanti = cognome.gsub(/[aeiou]/,’’)
puts cognome_vocali
puts cognome_consonanti

if cognome.length<3
cognome_ok = cognome_consonanti + cognome_vocali + “xx”
cognome_ok = cognome_ok.slice!(0…2)

else
if cognome_consonanti.length < 3
cognome_ok = cognome_consonanti + cognome_vocali
cognome_ok = cognome_ok.slice!(0…2)

  else if
         cognome_ok = cognome_consonanti.slice!(0..2)
       end
end

end

puts cognome_ok
gets

Magari la risposta e` questa :slight_smile:

https://rubygems.org/gems/codice-fiscale


David N. Welton

http://www.welton.it/davidw/

http://www.dedasys.com/

Devo sviluppare la giusta mentalità giusta, sono più abituato a fare
giri assurdi piuttosto che a “semplificarmi” la vita :frowning:

Il giorno 24 gennaio 2013 17:41, ilgu G. [email protected] ha scritto:

puts cognome_vocali

Non ho controllato la logica.

Comunque un piccolo consiglio :slight_smile:

Per uno script al volo imparando ruby va bene.
Ma per fare un vero programma --> pensalo ad oggetti

Practical Object Oriented Design in Ruby http://goo.gl/RLa7P
Design Patterns in Ruby http://goo.gl/bCuLP

Meno if e pi class :slight_smile:
http://matteo.vaccari.name/blog/archives/127

S.

Sto recuperando un “plugin” che avevo fatto un paio d’anni fa per il
calcolo del codice fiscale con Rails. Gli do una pulita e lo carico su
github. Dubito che sia compatibile con la 3.2, ma a fini didattici pu
essere interessante.

-f

Ti consiglio di studiare: http://pragprog.com/book/achbd/the-rspec-book
Ti spiega un modo “sano” di lavorare.

Ciao,

Matteo

Il giorno 24 gennaio 2013 17:24, ilgu G. [email protected] ha scritto:

2013/1/25 Sergio B. [email protected]

Ti consiglio di studiare: http://pragprog.com/book/achbd/the-rspec-book
Ti spiega un modo “sano” di lavorare.

+1

+1

Aggiungo
http://www.growing-object-oriented-software.com/

Questo libro, anche se Java, mi sento di stra-consigliarlo: mi ha
aperto
gli occhi sul TDD e sul come scrivere “buoni” test.

Andrea

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs