Parsing an text file

  • Thread starter Johnathan Wagner
  • Start date
J

Johnathan Wagner

Hi,
I cannot find a way to easily parse a text file. I am just starting to
learn ruby so please bear with me.

My text file looks like this:

0 8 2 9 3 0 0 4
9 2 8 3 9 3 0 2
2 3 4 9 8 8 9 0

Basically just numbers and spaces.

So far, I know how to read the file and put each line into an array.

def readfile(file)
arr = IO.readlines(file)
parsing(arr)
end

def parsing(arr)
string1 = arr[0].to_s
string2 = arr[1].to_s
string3 = arr[2].to_s
ans.each_byte {|b|p b.chr}
end

What I wanted to do is, for example, want to find all 8's and change it
to 5's.
I am stuck on how I can use the string and search each char's to find
the 8's and then change it. Also I would like to know if there is a for
loop or something to go through each array and store it into a new
string because there might be more than 3 lines. I have search through
documentations and trying to find examples but there doesn't seem to be
much help.

Any help, especially examples, would be appreciate. Thanks in advance.
 
D

Drew Olson

Johnathan said:
What I wanted to do is, for example, want to find all 8's and change it
to 5's.
I am stuck on how I can use the string and search each char's to find
the 8's and then change it. Also I would like to know if there is a for
loop or something to go through each array and store it into a new
string because there might be more than 3 lines. I have search through
documentations and trying to find examples but there doesn't seem to be
much help.

Any help, especially examples, would be appreciate. Thanks in advance.

The code below reads through your file, replaces 8's with 5's and then
writes out the lines to a new file:

File.open("newfile,txt","w") do |out|
File.open("myfile.txt").each do |line|
out << line.gsub("8","5")
end
end
 
J

Johnathan Wagner

Thanks for your fast answer.

One last question, if you can help me.

How can I compare each characters in a string?
 
D

Drew Olson

Johnathan said:
Thanks for your fast answer.

One last question, if you can help me.

How can I compare each characters in a string?

You can compare each character individually by using the each_byte
method, however that gives you the ASCII representation of the
character. In your case I would split each line by spaces to get each
number as a substring like so:

File.open("myfile.txt").each do |line|
line.split(" ").each do |num|
# do your work here
end
end
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,226
Members
46,815
Latest member
treekmostly22

Latest Threads

Top