2011-11-29 36 views
9

Tôi có danh sách chứa các dòng mới và tôi muốn chuyển đổi nó thành một mảng, ví dụ:Danh sách các dòng mới thành mảng

JAN 

FEB 

MAR 

APR 

MAY 

vào ["JAN", "FEB", "MAR", "APR", "MAY]

Bất kỳ trợ giúp sẽ được đánh giá cao. Cảm ơn

Something như thế này dường như không làm việc (text_file.txt chứa một danh sách các tháng như trên)

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

là liệt kê một tập tin văn bản hoặc một cái gì đó? Nếu đó là bạn có thể đọc từng dòng của tập tin, dải nó và đẩy còn lại trong mảng của bạn. –

+0

Vui lòng không đặt câu hỏi mới cho mỗi dòng của thuật toán bạn đang gặp sự cố. Bạn có thể [sửa] để thêm thông tin, và sau khi chờ đợi bạn có thể thêm tiền thưởng cho câu hỏi này nếu bạn chưa nhận được câu trả lời đủ tốt (theo [faq # bounty]). – Will

+0

Bạn chưa bao giờ chọn câu trả lời. Không hữu ích? –

Trả lời

7

Nếu bạn có ý nghĩa như thế này trong danh sách

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

sau đó bạn có thể chuyển đổi nó thành mảng như thế này

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

UPDAT E: Second try:

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

Không, điều này dường như không hoạt động. Tôi lấy lại cùng một danh sách. – Mark

+0

Biến 'văn bản' chứa kết quả, nếu bạn muốn lưu kết quả vào tệp, bạn nên ghi kết quả vào tệp. – megas

+0

Có, cảm ơn, nó hoạt động ngay bây giờ. – Mark

19

này hoạt động trên 1.9 .. không chắc chắn nếu có sản phẩm nào? có sẵn trong 1,8 dù

%(
JAN 

FEB 

MAR 

APR 

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

+1 Tôi đã thử nghiệm nó, hoạt động mà không gặp sự cố 1,8,7; 1.9.3; 2.0.0 –

+0

Tôi đề xuất một thay đổi nhỏ đối với regex để xử lý các dòng "trống": '/ \ n \ n * /'. –

+0

Bạn cũng có thể sử dụng '/ \ n + /' –

0

Hãy thử để có được mảng khác và đẩy dòng vào đó với ra "\ n" như thế này

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 mà trả về mảng các dòng, bỏ qua bất kỳ dòng trống:

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

tôi thấy michalfs giải pháp một dòng rất hữu ích, mặc dù tôi muốn lưu ý một chi tiết tinh tế (mà sẽ proba bly chỉ thú vị với những người mới nổi như bản thân mình).

Nếu Y của THÁNG là ký tự cuối cùng trong textfile, mảng kết quả sẽ trông như thế này:

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

Tại sao như vậy? Trích dẫn từ String#chop ruby doc:

Chop → new_str Returns một String mới với ký tự cuối cùng loại bỏ. [...] Chuỗi # chomp thường là giải pháp thay thế an toàn hơn, vì nó để lại chuỗi không thay đổi nếu nó không kết thúc bằng dấu phân cách bản ghi.

Do đó chomp vẻ là chính xác hơn trong trường hợp đặc biệt này:

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

(Vâng, tôi chỉ thêm 'm' đến giải pháp michalfs.)

2

Tôi nhận ra câu hỏi này đã nhiều tuổi, nhưng tôi không thể tạo một mảng với các câu trả lời khác. Tôi đã có thể tìm ra bằng cách sử dụng đoạn mã sau. (Danh sách của tôi được phân tách bởi \ r chứ không phải \ n.)

text = [] 

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

Nếu bạn muốn chia trên \ n thay vì:

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

Chỉ cần một lưu ý. Bằng cách này, bạn cũng có thể sắp xếp một chuyển đổi sang mảng:

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

res = text.split(",") 

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

đáp ứng:

JAN 
FEB 
MAR 
APR 
MAY 
true 
Các vấn đề liên quan