[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

File Question

Yannick Grams

3/3/2007 6:23:00 AM

Hello to all!

This is a rather strange request, but here goes. I'm writing a program which
will store output in a .txt file. There are seventeen (17) lines of output,
and each one must be placed under one another. However, when the output gets
too long (about 10200 characters), it messes up the formatting. My question
is whether or not there is a way to make it so that the lines will go on
infinitely. If I haven't explained this very well, forgive me, and let me
know.

Thanks in advance.

_________________________________________________________________
Advertisement: Fresh jobs daily. Stop waiting for the newspaper. Search Now!
www.seek.com.au
http://a.ninemsn.com.au/b.aspx?URL=http%3A%2F%2Fninemsn%2Eseek%2Ecom%2Eau&_t=757263760&_r=Hotmail_EndText_Dec06&...


7 Answers

Harry

3/3/2007 7:26:00 AM

0

>
> This is a rather strange request, but here goes. I'm writing a program which
> will store output in a .txt file. There are seventeen (17) lines of output,
> and each one must be placed under one another. However, when the output gets
> too long (about 10200 characters), it messes up the formatting. My question
> is whether or not there is a way to make it so that the lines will go on
> infinitely. If I haven't explained this very well, forgive me, and let me
> know.
>

Can you show some code?
It will make it easier to understand what you mean and where the problem is.

Harry

--
http://www.kakueki.com/ruby...
Japanese Ruby List Subjects in English

Yannick Grams

3/3/2007 8:53:00 AM

0

Harry wrote:
>>
>> This is a rather strange request, but here goes. I'm writing a program which
>> will store output in a .txt file. There are seventeen (17) lines of output,
>> and each one must be placed under one another. However, when the output gets
>> too long (about 10200 characters), it messes up the formatting. My question
>> is whether or not there is a way to make it so that the lines will go on
>> infinitely. If I haven't explained this very well, forgive me, and let me
>> know.
>>
>
> Can you show some code?
> It will make it easier to understand what you mean and where the problem
> is.
>
> Harry

First, a small explanation. Some of you may have heard of ASCII art. It
involves using symbols such as @ and # in Notepad to create words or
images. My program will take input from the user, and then turn this
into ASCII. Here is an excerpt:

line1 = []
line2 = []
line3 = []
line4 = []
line5 = []
line6 = []
line7 = []
line8 = []
line9 = []
line10 = []
line11 = []
line12 = []
line13 = []
line14 = []
line15 = []
line16 = []
line17 = []
a1 = "...@@@...."
a2 = ".@@@@@@@.."
a3 = "@@@...@@@."
a4 = "@@@...@@@."
a5 = "@@@...@@@."
a6 = "@@@...@@@."
a7 = "@@@...@@@."
a8 = "@@@...@@@."
a9 = "@@@...@@@."
a10 = "@@@...@@@."
a11 = "@@@@@@@@@."
a12 = "@@@@@@@@@."
a13 = "@@@...@@@."
a14 = "@@@...@@@."
a15 = "@@@...@@@."
a16 = "@@@...@@@."
a17 = "@@@...@@@."
puts "INPUT TEST"
input = gets.chomp.to_s.downcase
input.each_byte do |x|
x = x.chr
if x == "a"
line1.push(a1)
line2.push(a2)
line3.push(a3)
line4.push(a4)
line5.push(a5)
line6.push(a6)
line7.push(a7)
line8.push(a8)
line9.push(a9)
line10.push(a10)
line11.push(a11)
line12.push(a12)
line13.push(a13)
line14.push(a14)
line15.push(a15)
line16.push(a16)
line17.push(a17)
else
#other letters
end
end
$File = File.open("test.txt", "w")
$File.puts(line1.join, line2.join, line3.join, line4.join, line5.join,
line6.join, line7.join, line8.join, line9.join, line10.join,
line11.join, line12.join, line13.join, line14.join, line15.join,
line16.join, line17.join)
$File.close

I know it isn't very good, as I'm only a beginner programmer. This
excerpt will work for the letter "a" alone. Try it out: it will only
store a maximum of 102 A's until the format goes all crazy in the
Notepad file. If you know of any way to fix this, I'd be grateful for
your help.

--
Posted via http://www.ruby-....

Chad Perrin

3/3/2007 8:56:00 AM

0

On Sat, Mar 03, 2007 at 05:52:46PM +0900, Yannick Grams wrote:
>
> I know it isn't very good, as I'm only a beginner programmer. This
> excerpt will work for the letter "a" alone. Try it out: it will only
> store a maximum of 102 A's until the format goes all crazy in the
> Notepad file. If you know of any way to fix this, I'd be grateful for
> your help.

That's a limitation of Notepad.

--
CCD CopyWrite Chad Perrin [ http://ccd.ap... ]
"It's just incredible that a trillion-synapse computer could actually
spend Saturday afternoon watching a football game." - Marvin Minsky

Yannick Grams

3/3/2007 8:56:00 AM

0

P.S. Sorry for the double post, but I forgot to mention that in order to
view the Notepad file properly, you need to go to Format > Font... and
set the font to Lucida Console, Regular, Size 1.

--
Posted via http://www.ruby-....

Yannick Grams

3/3/2007 9:04:00 AM

0

Chad Perrin wrote:
> That's a limitation of Notepad.

Do you have any suggestions?


--
Posted via http://www.ruby-....

Chad Perrin

3/3/2007 9:31:00 AM

0

On Sat, Mar 03, 2007 at 06:04:00PM +0900, Yannick Grams wrote:
> Chad Perrin wrote:
> > That's a limitation of Notepad.
>
> Do you have any suggestions?

In my personal experience, SciTE is excellent. Even WordPad doesn't
have that limitation (though last I checked it still has a memory leak
that was present in the Write program from which it evolved, back in the
Windows 3.x days -- not my favorite tool for reading text files).

Others may offer other suggestions.

I haven't checked in depth on what exactly limits Notepad -- whether
it suffers hardcoded limitations or the limits have something to do with
system RAM. I just know that significant filesizes and line lengths
tend to cause it to "puke", as 'twere, when other text editing
applications don't have that problem.

--
CCD CopyWrite Chad Perrin [ http://ccd.ap... ]
Brian K. Reid: "In computer science, we stand on each other's feet."

Robert Klemme

3/3/2007 9:54:00 AM

0

On 03.03.2007 09:52, Yannick Grams wrote:
> Harry wrote:
>>> This is a rather strange request, but here goes. I'm writing a program which
>>> will store output in a .txt file. There are seventeen (17) lines of output,
>>> and each one must be placed under one another. However, when the output gets
>>> too long (about 10200 characters), it messes up the formatting. My question
>>> is whether or not there is a way to make it so that the lines will go on
>>> infinitely. If I haven't explained this very well, forgive me, and let me
>>> know.
>>>
>> Can you show some code?
>> It will make it easier to understand what you mean and where the problem
>> is.
>>
>> Harry
>
> First, a small explanation. Some of you may have heard of ASCII art. It
> involves using symbols such as @ and # in Notepad to create words or
> images. My program will take input from the user, and then turn this
> into ASCII. Here is an excerpt:
>
> line1 = []
> line2 = []
> line3 = []
> line4 = []
> line5 = []
> line6 = []
> line7 = []
> line8 = []
> line9 = []
> line10 = []
> line11 = []
> line12 = []
> line13 = []
> line14 = []
> line15 = []
> line16 = []
> line17 = []
> a1 = "...@@@...."
> a2 = ".@@@@@@@.."
> a3 = "@@@...@@@."
> a4 = "@@@...@@@."
> a5 = "@@@...@@@."
> a6 = "@@@...@@@."
> a7 = "@@@...@@@."
> a8 = "@@@...@@@."
> a9 = "@@@...@@@."
> a10 = "@@@...@@@."
> a11 = "@@@@@@@@@."
> a12 = "@@@@@@@@@."
> a13 = "@@@...@@@."
> a14 = "@@@...@@@."
> a15 = "@@@...@@@."
> a16 = "@@@...@@@."
> a17 = "@@@...@@@."
> puts "INPUT TEST"
> input = gets.chomp.to_s.downcase
> input.each_byte do |x|
> x = x.chr
> if x == "a"
> line1.push(a1)
> line2.push(a2)
> line3.push(a3)
> line4.push(a4)
> line5.push(a5)
> line6.push(a6)
> line7.push(a7)
> line8.push(a8)
> line9.push(a9)
> line10.push(a10)
> line11.push(a11)
> line12.push(a12)
> line13.push(a13)
> line14.push(a14)
> line15.push(a15)
> line16.push(a16)
> line17.push(a17)
> else
> #other letters
> end
> end
> $File = File.open("test.txt", "w")
> $File.puts(line1.join, line2.join, line3.join, line4.join, line5.join,
> line6.join, line7.join, line8.join, line9.join, line10.join,
> line11.join, line12.join, line13.join, line14.join, line15.join,
> line16.join, line17.join)
> $File.close
>
> I know it isn't very good, as I'm only a beginner programmer. This
> excerpt will work for the letter "a" alone. Try it out: it will only
> store a maximum of 102 A's until the format goes all crazy in the
> Notepad file. If you know of any way to fix this, I'd be grateful for
> your help.

** SPOILER **

Don't read on if you want to try further for yourself.


Some suggestions for improvement: use arrays and indexing to hold your
lines and also your character items. Use the block form of File.open as
it is safer.

# const definitions
CHARACTERS = {
?a = [
"...@@@....",
".@@@@@@@..",
# etc.
],
?b = [
],
# etc.
}

# get input
input = "aa"

# create output
lines = Array.new(17) { "" }

input.each_byte do |b|
char = CHARACTERS[b]

lines.each_with_index do |line, idx|
line << char[idx]
end
end

# write output
File.open("out.txt", "w") do |io|
lines.each do |line|
io.puts line
end
end

Even more efficient would be to proceed line wise and not create the
result in memory at all but write directly to the file.

Kind regards

robert