2010-03-22 3 views
0

J'ai un fichier txt qui contient des données dans le format suivant:listes de lecture à partir d'un fichier Ruby

X1 Y1

X2 Y2

etc ..

Je veux lire les données de ce fichier et créer deux listes dans ruby ​​(X contenant X1, X2 et Y contenant Y1, Y2). Comment puis-je faire cela dans Ruby?

Merci.

Répondre

2

Je préfère utiliser la méthode readlines pour des choses comme celle-ci.

x = [] 
y = [] 
File.readlines(filename).each do |line| 
    x << line.split[0] 
    y << line.split[1] 
end 

Mladen (des commentaires de cette réponse) suggère, je partage deux fois ce qui est probablement plus lent que d'assigner à une variable et le référencement que. Il mentionne également que l'utilisation foreach est meilleure que readlines, et je suis d'accord. Grâce à leur avis, c'est la façon dont nous les deux vont à le faire:

x = [] 
y = [] 
File.foreach(filename).each do |line| 
    line = line.split 
    x << line[0] 
    y << line[1] 
end 
+0

+1 - Très propre – RubyDubee

+1

Vous pouvez utiliser 'File.foreach (nom de fichier) 'au lieu de' File.readlines (filename) .each' et éviter de charger le fichier entier en mémoire. Vous faites aussi deux fois split(), ce qui n'est pas nécessaire. –

+0

Très vrai Mladen, vous pouvez également affecter la scission à une variable et l'utiliser. –

0

Quelque chose comme ça si vous avez exactement deux colonnes:

one = Array.new 
two = Array.new 

File.open("filename") do |file| 
    while line = file.gets 
    one << line.split[0] 
    two << line.split[1] 
    end 
end 
3

pseudocode

File.new("source.txt", "r").each_line do |line| 
    x, y = line.split 
    xs << x 
    ys << y 
end 

Vous pouvez extraira le rdoc pour API détail.

8

Un vrai one-liner:

x, y = File.foreach("filename").collect {|line| line.split}.transpose 
Questions connexes