Strategy for reading a tab delimited file and separating file for array with attr_reader
Trying to take a simple test.txt file and separate the text and integers after its read in for array manipulation. The idea is to be able to use/require the attr_accessor from the separate Person class. So I can use :name, :hair_color, :gender
For example lets says we have in our text file which is all separated by the tab delimiter, for shortness I just used space:
Bob red_hair 38
Joe brown_hair 39
John black_hair 40
My class would read something like:
class Person
attr_accessor :name, :hair_color, :gender
def initialize
@place_holder = 'test'
end
def to_s
@test_string = 'test a string'
end
end
My main file that I'm having strategy issues with so far:
test_my_array = File.readlines('test.txt').each('\t') #having trouble with
I'm pretty sure its easier to manipulate line by line rather then one file. I'm not sure where to go after that. I know I need to separate my data some how for :n开发者_StackOverflowame, :hair_color, :gender. Throw some code up so I can try things out.
If you make your initialize method accept values for name, hair_color and gender, you can do it like this:
my_array = File.readlines('test.txt').map do |line|
Person.new( *line.split("\t") )
end
If you can't modify your initialize method, you'll need to call the writer methods one by one like this:
my_array = File.readlines('test.txt').map do |line|
name, hair_color, gender = line.split("\t")
person = Person.new
person.name = name
person.hair_color = hair_color
person.gender = gender
person
end
The easiest way to make initialize accept the attributes as argument without having to set all the variables yourself, is to use Struct, which shortens your entire code to:
Person = Struct.new(:name, :hair_color, :gender)
my_array = File.readlines('test.txt').map do |line|
Person.new( *line.split("\t") )
end
#=> [ #<struct Person name="Bob", hair_color="red_hair", gender="male\n">,
# #<struct Person name="Joe", hair_color="brown_hair", gender="male\n">,
# #<struct Person name="John", hair_color="black_hair", gender="male\n">,
# #<struct Person name="\n", hair_color=nil, gender=nil>]
加载中,请稍侯......
精彩评论