2011-11-29 16 views
9

Ho una lista contenente nuove righe e mi piace convertirle in un array, ad es.Le nuove righe vengono elencate nell'array

JAN 

FEB 

MAR 

APR 

MAY 

in ["JAN", "FEB", "MAR", "APR", "MAY]

Qualsiasi aiuto sarà apprezzato. Grazie

Qualcosa come questo non sembra funzionare (text_file.txt contiene un elenco di mesi come sopra)

file = File.new("text_file.txt", "r") 
while (line = file.gets) 
    line.chomp 
    list = line.split(/\n/) 
    puts "#{list}" 
end 
+0

è elencare un file di testo o qualcosa del genere? Se è possibile leggere ciascuna riga di file, eliminarla e spingere rimanente nell'array. –

+0

Si prega di non fare una nuova domanda per ogni riga di un algoritmo con cui si hanno problemi. Puoi [modificare] per aggiungere più informazioni, e dopo l'attesa richiesta puoi aggiungere una taglia a questa domanda se non hai ottenuto una risposta abbastanza buona (per [faq # bounty]). – Will

+0

Non hai mai selezionato una risposta. Non sono stati utili? –

risposta

7

Se vuoi dire questo tipo di lista

text = "JAN\nFEB\nMAR\nAPR\nMAY" 

allora si può convertirlo in allineamento simili

text.split(/\n/) => ["JAN", "FEB", "MAR", "APR", "MAY"] 

UPDAT E: secondo tentativo:

text = [] 
File.read("text_file.txt").each_line do |line| 
    text << line.chop 
end 
puts text => ["JAN", "FEB", "MAR", "APR", "MAY"] 
+0

No, anche questo non sembra funzionare. Torno la stessa lista – Mark

+0

La variabile 'testo' contiene il risultato, se si desidera memorizzare il risultato su file, è necessario scrivere il risultato su file. – megas

+0

Sì grazie, ora funziona. – Mark

19

Questo funziona su 1.9 .. non è sicuro se vuoto? è disponibile in 1,8 se

%(
JAN 

FEB 

MAR 

APR 

MAY 
).split(/\n/).reject(&:empty?) 
+0

+1 L'ho provato, lavorando senza problemi su 1.8.7; 1.9.3; 2.0.0 –

+0

Suggerisco una piccola modifica alla regex per gestire le righe "vuote": '/ \ n \ n * /'. –

+0

Puoi anche usare '/ \ n + /' –

0

Prova a ottenere un altro array e spingere le linee in quella con fuori "\ n" come questo

def read 
     a=[] 
     i=0 
      File.open('text_file.txt', 'r') do |f1| 
       while line = f1.gets 
        line.chomp 
        ppp= line.split(/\n/) 
        a[i] =ppp[0] 
        i=i+1 
       end 
       puts "#{a}" 
      end 
     end 
0

One-liner che restituisce la serie di linee, ignorando qualsiasi righe vuote:

File.readlines("text_file.txt").map{ |l| l.chop }.reject{ |l| l == '' } 
3

ho trovato michalfs soluzione one-linea molto utile, anche se mi piacerebbe notare una sottile dettaglio (che proba essere solo interessante per rubino-neofiti come me).

Se il Y di maggio è l'ultimo carattere nel file di testo, l'array risultante sarà simile a questa:

["JAN", "FEB", "MAR", "APR", "MA"] 

Perché così? Citando dal String#chop ruby doc:

chop → new_str Restituisce una nuova stringa con l'ultimo carattere rimosso. [...] La stringa # chomp è spesso un'alternativa più sicura, in quanto lascia la stringa invariata se non finisce in un separatore di record.

Pertanto chomp sembra essere più precisi, in questo caso particolare:

File.readlines("text_file.txt").map{ |l| l.chomp }.reject{ |l| l == '' } 

(Sì, ho solo aggiunto le 'M' alla soluzione michalfs.)

2

mi rendo conto questa domanda ha diversi anni, ma non sono riuscito a creare un array con le altre risposte. Sono stato in grado di capirlo usando il seguente codice. (La mia lista era separata da \ r e non \ n.)

text = [] 

input = File.read("x_values.txt") 
    text = input.split("\r") 
puts text.to_s 

Se si desidera dividere il \ n invece:

text = [] 
input = File.read("x_values.txt") 
    text = input.split("\n") 
puts text.to_s 
0

Solo una nota. In questo modo, si può anche organizzare una conversione a matrice:

text = "JAN,FEB,MAR,APR,MAY" 

res = text.split(",") 

res.each { |x| puts x } 
puts res.kind_of?(Array) 

Risposta:

JAN 
FEB 
MAR 
APR 
MAY 
true 
Problemi correlati