# Question: formatting strings from array for text files

**URL:** <https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373>\
**Category:** Ruby\
**Created:** [July 6, 2006, 5:53pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373 "2006-07-06T17:53:46Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 5:53pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/1 "2006-07-06T17:53:46Z")

</div>

I’m not sure who to have an array format correctly when written to a  
text file.  
Doing something like myarray = [‘five’,‘four’,‘three’,‘two’,‘one’]  
works almost correctly but  
myarray = [’…/./\*.docs’] seems to write them out without linebreaks.

So while I can figure out how to print them nicely using some iterator  
to the screen  
Using,  
File.open filename, ‘w’ do |doc|  
doc.write myarray  
end  
I can’t seem to figure out a way to format the strings correctly.

Stuart

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 5:56pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/2 "2006-07-06T17:56:55Z")

</div>

2006/7/6, Dark A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> I’m not sure who to have an array format correctly when written to a text file.

What does “correctly” mean?

> Doing something like myarray = [‘five’,‘four’,‘three’,‘two’,‘one’]  
> works almost correctly but  
> myarray = [‘…/./\*.docs’] seems to write them out without linebreaks.

This is not a print statement. What did you do to actually print it?

> So while I can figure out how to print them nicely using some iterator  
> to the screen  
> Using,  
> File.open filename, ‘w’ do |doc|  
> doc.write myarray  
> end  
> I can’t seem to figure out a way to format the strings correctly.

Try this:

doc.write myarray.join ", "

Depends on what you mean by “proper output”.

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 6:19pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/3 "2006-07-06T18:19:33Z")

</div>

I must have not explained myself well.  
Right now my file looks like this:

c:/dir1/doc1.docc;/dir1/doc3.docc:/dir1/doc4.docc:/dir1/doc5.doc  
…i.e. no line breaks

I want it took look like this:  
c:/dir1/doc1.doc  
c;/dir1/doc3.doc  
c:/dir1/doc4.doc  
c:/dir1/doc5.doc  
…

Stuart

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 6:26pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/4 "2006-07-06T18:26:33Z")

</div>

Dark A. wrote:

> c:/dir1/doc5.doc
> 
> > > ```
> > > doc.write myarray
> > > 
> > > ```
> > 
> > robert
> > 
> > –  
> > Have a look: [Robert K. | Flickr](http://www.flickr.com/photos/fussel-foto/)

Try using ‘doc.puts’ instead of ‘doc.write’. ‘puts’ will automatically  
add line breaks, whereas ‘write’ will not.

-Justin

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 6:46pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/5 "2006-07-06T18:46:28Z")

</div>

Thank you that was a huge improvement, still battling a few more format  
issues:  
when I open the file:  
It has the 3 hypens as the first line and a hyphen before every file  
name. Can’t I get rid of those ?

* * *

- c:/dir1/doc1.doc
- c:/dir1/doc2.doc
- c:/dir1/doc3.doc
- c:/dir1/doc4.doc
- c:/dir1/doc5.doc
- c:/dir1/doc6.doc

Stuart

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 7:43pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/6 "2006-07-06T19:43:17Z")

</div>

I’d think there has to be a way.

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 8:00pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/7 "2006-07-06T20:00:06Z")

</div>

Okay, I made some changes to my code. I was using .to\_yaml, without  
it, the extra characters are now gone.

However, I’m writing this file successfully yet Ruby is returning false.  
So, perhaps someone would know why ? (btw, went from .docs to .mp3’s)

songs = Dir[‘c:/mp3/\*.mp3’]  
filename = ‘songs.m3u’

File.open filename, ‘w’ do |f|  
f.puts songs  
end

readlist = File.read filename

puts(readlist == songs)

Stuart

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 8:12pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/8 "2006-07-06T20:12:52Z")

</div>

Dark A. wrote:

> f.puts songs
> 
> > > - c:/dir1/doc3.doc
> > > 
> > > > > Stuart  
> > > > > [‘five’,‘four’,‘three’,‘two’,‘one’]
> > > 
> > > > > > > Using,  
> > > > > > > Depends on what you mean by “proper output”.  
> > > > > > > Try using ‘doc.puts’ instead of ‘doc.write’. ‘puts’ will

You are comparing a string to an array. File.read returns a string. Try  
something like:

readlist = File.readlines(filename).map { |line| line.chomp}

File.readlines will return an array with an element for each line. But  
they will then have the end-of-line character attached (added when we  
wrote the file), so we have to remove those with chomp.

-Justin

---

<div class="post-metadata">

**Author:** ![zanoni](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/e99b99/32.png) [@zanoni](https://www.ruby-forum.com/u/zanoni)\
**Post date:** [July 6, 2006, 7:56pm UTC](https://www.ruby-forum.com/t/question-formatting-strings-from-array-for-text-files/97373/9 "2006-07-06T19:56:45Z")

</div>

Dark A. wrote:

> > - c:/dir1/doc1.doc
> > - c:/dir1/doc2.doc
> > - c:/dir1/doc3.doc
> > - c:/dir1/doc4.doc
> > - c:/dir1/doc5.doc
> > - c:/dir1/doc6.doc

How are you building the array? What you are seeing as output must be  
what’s in the array, unless you are adding those hyphens at some point.  
Maybe do a

p myarray

to see exactly what is in the array.

Of course, you could just do some string parsing and remove the hyphens.

-Justin
