# Espressioni regolari: filtrare i files

**URL:** <https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146>\
**Category:** IT\
**Created:** [September 21, 2008, 6:37pm UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146 "2008-09-21T18:37:25Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 21, 2008, 6:37pm UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/1 "2008-09-21T18:37:25Z")

</div>

Ciao a tutti,  
ho un piccolo progetto personale, vorrei creare dei file vcf a partire  
da file txt.

Al momento non riesco a passare solamente i file con estensione txt:

require ‘pathname’  
p = Pathname.new(‘c:\Download\’)  
b=[] # crea l’array vuoto  
b = p.entries # passa all’array i valori della  
directory  
puts b.sort # stampa l’array

CosÃ¬, passa tutto il contenuto della directory, ma con

b = b("/pdf\*/")  
puts b.sort

ricevo un errore  
txt\_to\_ics\_2.rb(main):030:0\> b = b("/pdf\*/")  
NoMethodError: undefined method `b’ for main:Object  
from txt\_to\_ics\_2.rb:30

Come dovrei correggere?

Grazie  
Massimo

---

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 21, 2008, 6:58pm UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/2 "2008-09-21T18:58:39Z")

</div>

Ciao Massimo,

On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> b = b(“/pdf\*/”)  
> puts b.sort
> 
> ricevo un errore  
> txt\_to\_ics\_2.rb(main):030:0\> b = b(“/pdf\*/”)  
> NoMethodError: undefined method `b’ for main:Object  
> from txt\_to\_ics\_2.rb:30  
> Come dovrei correggere?

b.select {|entry| entry.to\_s =~ /pdf/ }.sort

Alcune considerazioni:

1. Questo selezionerà tutte le entry che contengono la stringa pdf;
2. L’oggetto b non viene alterato. Se vuoi puoi però assegnare  
l’espressione a b;
3. Non ti serve creare un array vuoto per assegnare p.entries a b. Non  
stai programmando in Java. 🙂

## Ciao, Antonio

[http://antoniocangiano.com](http://antoniocangiano.com) - Zen and the Art of Programming  
[http://belifesavvy.com](http://belifesavvy.com) - Be life savvy: Life’s missing manual  
[http://stacktrace.it](http://stacktrace.it) - Aperiodico di resistenza informatica  
Currently writing “Ruby on Rails for Microsoft Developers” for Wrox.

---

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 21, 2008, 8:48pm UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/3 "2008-09-21T20:48:21Z")

</div>

Antonio C. wrote:

> Ciao Massimo,
> 
> On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > b = b(“/pdf\*/”)  
> > puts b.sort
> > 
> > ricevo un errore  
> > txt\_to\_ics\_2.rb(main):030:0\> b = b(“/pdf\*/”)  
> > NoMethodError: undefined method `b’ for main:Object  
> > from txt\_to\_ics\_2.rb:30  
> > Come dovrei correggere?
> 
> b.select {|entry| entry.to\_s =~ /pdf/ }.sort
> 
> Alcune considerazioni:
> 
> 1. Questo selezionerï¿½ tutte le entry che contengono la stringa pdf;
> 2. L’oggetto b non viene alterato. Se vuoi puoi perï¿½ assegnare  
> l’espressione a b;
> 3. Non ti serve creare un array vuoto per assegnare p.entries a b. Non  
> stai programmando in Java. 🙂

Ciao Antonio,  
un problema mi Ã¨ perÃ² rimasto: come posso passare i risultati all’array?

Grazie  
Massimo

---

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 23, 2008, 10:15am UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/4 "2008-09-23T10:15:03Z")

</div>

Massimo A. wrote:

> Antonio C. wrote:
> 
> > Ciao Massimo,
> > 
> > On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.  
> > [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> > 
> > > b = b(“/pdf\*/”)  
> > > puts b.sort
> > > 
> > > ricevo un errore  
> > > txt\_to\_ics\_2.rb(main):030:0\> b = b(“/pdf\*/”)  
> > > NoMethodError: undefined method `b’ for main:Object  
> > > from txt\_to\_ics\_2.rb:30  
> > > Come dovrei correggere?

Non esiste un metodo b("/pdf\*/) perchÃ© b Ã¨ un Array. Da qui l’errore.

> > b.select {|entry| entry.to\_s =~ /pdf/ }.sort  
> > […]  
> > un problema mi Ã¨ perÃ² rimasto: come posso passare i risultati all’array?

Forse con b = b.select {|entry| entry.to\_s =~ /pdf/ }.sort ?

Riassumendo, questo programma fa quello che mi pare ti serva:

require ‘pathname’

p = Pathname(‘c:\Download\’)  
b = p.entries.select{|entry| entry.to\_s =~ /.pdf$/ }.sort  
b.each do |f|  
puts f.to\_s  
end

L’espressione regolare prende solo i file con suffisso .pdf

Ciao  
Paolo

---

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 28, 2008, 8:38am UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/5 "2008-09-28T08:38:04Z")

</div>

Paolo M. wrote:

> L’espressione regolare prende solo i file con suffisso .pdf
> 
> Ciao  
> Paolo

Perfetto.

Grazie  
Massimo

---

<div class="post-metadata">

**Author:** ![arnaudo](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/7ba0ec/32.png) [@arnaudo](https://www.ruby-forum.com/u/arnaudo)\
**Post date:** [September 21, 2008, 7:16pm UTC](https://www.ruby-forum.com/t/espressioni-regolari-filtrare-i-files/149146/6 "2008-09-21T19:16:42Z")

</div>

Antonio C. wrote:

> Ciao Massimo,
> 
> On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > b = b(“/pdf\*/”)  
> > puts b.sort
> > 
> > ricevo un errore  
> > txt\_to\_ics\_2.rb(main):030:0\> b = b(“/pdf\*/”)  
> > NoMethodError: undefined method `b’ for main:Object  
> > from txt\_to\_ics\_2.rb:30  
> > Come dovrei correggere?
> 
> b.select {|entry| entry.to\_s =~ /pdf/ }.sort
> 
> Alcune considerazioni:
> 
> 1. Questo selezionerï¿½ tutte le entry che contengono la stringa pdf;
> 2. L’oggetto b non viene alterato. Se vuoi puoi perï¿½ assegnare  
> l’espressione a b;
> 3. Non ti serve creare un array vuoto per assegnare p.entries a b. Non  
> stai programmando in Java. 🙂
> 
> Ciao,  
> Antonio

Grazie Antonio.

Massimo
