Espressioni regolari: filtrare i files

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

Ciao Massimo,

On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.
[email protected] 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. :slight_smile:

Ciao,
Antonio

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

Antonio C. wrote:

Ciao Massimo,

On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.
[email protected] 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. :slight_smile:

Ciao Antonio,
un problema mi è però rimasto: come posso passare i risultati all’array?

Grazie
Massimo

Massimo A. wrote:

Antonio C. wrote:

Ciao Massimo,

On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.
[email protected] 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

Paolo M. wrote:

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

Ciao
Paolo

Perfetto.

Grazie
Massimo

Antonio C. wrote:

Ciao Massimo,

On Sun, Sep 21, 2008 at 12:37 PM, Massimo A.
[email protected] 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. :slight_smile:

Ciao,
Antonio

Grazie Antonio.

Massimo