Forum: Italian Ruby user group Manipolazione stringhe

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Davide Monfrecola (Guest)
on 2009-03-18 11:54
(Received via mailing list)
Ciao a tutti,
ho un piccolo problema con la manipolazione delle stringhe.
Praticamente io leggo da file e inserisco tutto all'interno di una
variabile:

@buffer = IO.read(file).downcase!

Dopodichè formo un array con tutte le parole contenute in @buffer
usando split

@content = @buffer.split(" ")

A questo punto, a me serve eliminare tutti i caratteri speciali e le
cose piu'
comuni come ad esempio il, lo, per, con ecc e i segni di
punteggiatura. Ho
provato ad eliminare i segni di punteggiatura con il metodo slice, ma il
problema è che mi elimina solo la prima occorrenza nella strings, e se
ce ne
sono altre non le considera.

@content.each { |a| a.slice!(/['.,<>()-?:\/"]/)}

Come posso fare?Invece per le parole che metodi potrei usare?sempre
slice?

Grazie per l'aiuto e buona giornata! :)
Davide
Carlo P. (Guest)
on 2009-03-18 11:57
(Received via mailing list)
Per *eliminare* caratteri (o serie di caratteri) puoi utilizzare
String#tr


Il 18 marzo 2009 10.54, Davide Monfrecola
<removed_email_address@domain.invalid> ha scritto:
> @content = @buffer.split(" ")
> @content.each { |a| a.slice!(/['.,<>()-?:\/"]/)}
>
--
Carlo P.
email: removed_email_address@domain.invalid
twitter: @carlopecchia
Davide Monfrecola (Guest)
on 2009-03-18 12:07
(Received via mailing list)
On 18/mar/09, at 10:56, Carlo P. wrote:

> Per *eliminare* caratteri (o serie di caratteri) puoi utilizzare
> String#tr

Grazie mille! l'avevo già provato, ma l'avevo provato male! :) Ora
sono riuscito a fargli fare quello che volevo! :)
Pietro G. (Guest)
on 2009-03-18 12:13
(Received via mailing list)
Il 18 marzo 2009 10.54, Davide Monfrecola
<removed_email_address@domain.invalid> ha scritto:
> Dopodichè formo un array con tutte le parole contenute in @buffer
> usando split
>
> @content = @buffer.split(" ")
>
> A questo punto, a me serve eliminare tutti i caratteri speciali e le
> cose piu' comuni come ad esempio il, lo, per, con ecc e i segni di
> punteggiatura.

che ne dici di:

@content = @buffer.split /\W+/

così hai un arrai contenente solo parole, e la punteggiatura l'hai già
eliminata...

pietro
Davide Monfrecola (Guest)
on 2009-03-18 12:23
(Received via mailing list)
On 18/mar/09, at 11:12, Pietro G. wrote:

> che ne dici di:
>
> @content = @buffer.split /\W+/
>
> così hai un arrai contenente solo parole, e la punteggiatura l'hai già
> eliminata...
>
> pietro

Penso sia un'ottima idea! Grazie!

Davide
Luigi M. (Guest)
on 2009-03-18 13:11
Domanda:
perché non usare un gsub?
ci sono differenze?


Grazie

Luigi
Pietro G. (Guest)
on 2009-03-18 13:36
(Received via mailing list)
Il 18 marzo 2009 12.11, Luigi M. <removed_email_address@domain.invalid> ha 
scritto:
> Domanda:
> perché non usare un gsub?
> ci sono differenze?

da quello che ha scritto davide, sembra di capire che a lui serve
proprio avere le singole parole, non la stringa intera...
Davide Monfrecola (Guest)
on 2009-03-18 14:03
(Received via mailing list)
On 18/mar/09, at 12:35, Pietro G. wrote:

> da quello che ha scritto davide, sembra di capire che a lui serve
> proprio avere le singole parole, non la stringa intera...

Esatto, mi serve avere un array con tutte le parole perchè poi devo
calcolare l'hash di ogni singola parola.
Luigi M. (Guest)
on 2009-03-18 14:58
Si si d'accordo, intendevo un
gsub(/ #{word_da_eliminare} /," ").split

Non intendevo proporre un metodo alternativo a quello da voi proposto ma
volevo solo capire le differenze tra il gsub (che, se non si è capito,
uso io) e il @buffer.split /\W+/


Grazie mille
Pietro G. (Guest)
on 2009-03-18 15:46
(Received via mailing list)
Il 18 marzo 2009 13.58, Luigi M. <removed_email_address@domain.invalid> ha 
scritto:
> gsub(/ #{word_da_eliminare} /," ").split

@buffer.split /\W+/

è equivalente a

@buffer.gsub(/\W+/, ' ').split

però trovo il primo più leggibile.
This topic is locked and can not be replied to.