Parsing an text file


#1

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.


#2

Johnathan Wagner wrote:

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


#3

Thanks for your fast answer.

One last question, if you can help me.

How can I compare each characters in a string?

Drew O. wrote:

Johnathan Wagner wrote:

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


#4

Johnathan Wagner wrote:

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