2011-11-29 12 views
9

Tengo una lista que contiene nuevas líneas y me gusta convertirla en una matriz, p.Lista de nuevas líneas en la matriz

JAN 

FEB 

MAR 

APR 

MAY 

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

Cualquier ayuda será apreciada. Gracias

no parece

Algo como esto funcione (text_file.txt contiene una lista de meses que el anterior)

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

es una lista de un archivo de texto o algo? Si es así, puede leer cada línea de archivo, eliminarla y presionar para permanecer en su matriz. –

+0

Por favor, no haga una nueva pregunta para cada línea de un algoritmo con el que tenga problemas. Puede [editar] para agregar más información, y después de la espera requerida puede agregar una recompensa a esta pregunta si no ha obtenido una respuesta lo suficientemente buena (según el [faq # bounty]). – Will

+0

Nunca seleccionó una respuesta. ¿No fueron útiles? –

Respuesta

7

Si usted se refiere a este tipo de lista

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

entonces puede convertirlo en conjunto como este

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

updat E: Segundo intento:

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

No, esto tampoco parece funcionar. Obtengo la misma lista. – Mark

+0

La variable 'text' contiene el resultado; si desea almacenar el resultado en un archivo, debe escribir el resultado en el archivo. – megas

+0

Sí, gracias, funciona ahora. – Mark

19

Esto funciona en 1.9 .. no está seguro de si está vacío? está disponible en 1,8 embargo

%(
JAN 

FEB 

MAR 

APR 

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

+1 Lo probé, trabajando sin problemas en 1.8.7; 1.9.3; 2.0.0 –

+0

Sugiero un pequeño cambio en la expresión regular para tratar con líneas "vacías": '/ \ n \ n * /'. –

+0

También puede usar '/ \ n + /' –

0

Intentar obtener otra matriz y empuje líneas en que con fuera "\ n" como esto

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

de una sola línea que devuelve el conjunto de líneas, haciendo caso omiso de cualquier líneas vacías:

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

he encontrado michalfs solución de una línea muy útil, aunque me gustaría señalar un detalle sutil (que Proba bly solo será interesante para los novatos de rubí como yo).

Si el Y de mayo es el último carácter en el archivo de texto, la matriz resultante tendrá este aspecto:

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

¿Por qué? Citando el String#chop ruby doc:

chop → new_str devuelve una nueva cadena con el último carácter eliminado. [...] String # chomp suele ser una alternativa más segura, ya que no modifica la cadena si no termina en un separador de registros.

Por lo tanto chomp parece ser más preciso en este caso particular:

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

(Sí, sólo añadí los 'M' a la solución michalfs.)

2

que dan cuenta de esta pregunta tiene varios años, pero no pude crear una matriz con las otras respuestas. Pude averiguarlo usando el siguiente código. (Mi lista estaba separada por \ r y no \ n.)

text = [] 

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

Si desea dividir el \ n en su lugar:

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

Sólo una nota. De esta manera, también se puede organizar una conversión de matriz:

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

res = text.split(",") 

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

Respuesta:

JAN 
FEB 
MAR 
APR 
MAY 
true 
Cuestiones relacionadas