Forum: Ruby Updating header in file

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
7070c0ca59124b4d96dd27ea52ad359e?d=identicon&s=25 Jeffrey Bowen (Guest)
on 2007-08-03 02:56
(Received via mailing list)
Let me try this in another way.  I have a file
(test.txt) where each line contains comma separated
values and I am using CSV to work though that stored
file.  The first line of the file is a header used by
the CSV program and as hash keys in the program that
creates the file.

What I am looking to do is update test.txt in two way.
 First I add a line at the end of the file with
today's values for each entry in the first line
(header).  Like 1, 20, 300, etc.  Which I can do with

file = File.open("test.tet")
file.puts(x) #x being string with the comma separated
values.

Second I will sometimes find a need to add another
header/hash key to the end of the first line.  That is
replace the first line (header) with a new one.

The only way that I can think of is to create a new
file, enter a new first line and then move line 2
thought the last line from file 1 into file 2 and then
rename file 2 to file 1.

I was hoping there was a way to replace the first line
in a text file.

Thanks Jeff
4299e35bacef054df40583da2d51edea?d=identicon&s=25 James Gray (bbazzarrakk)
on 2007-08-03 04:10
(Received via mailing list)
On Aug 2, 2007, at 7:55 PM, Jeffrey Bowen wrote:

> The only way that I can think of is to create a new
> file, enter a new first line and then move line 2
> thought the last line from file 1 into file 2 and then
> rename file 2 to file 1.

This is the right strategy.  You've just described a solid file
changing idiom we all use regularly.  Code it up and pat yourself on
the back for a job well done.

James Edward Gray II
57a778becb5ea951889fa9f0b4e3bd15?d=identicon&s=25 Michael Linfield (macgoober)
on 2007-08-03 04:18
look into using the .slice(# , #)  method. so long as you know the
length of the first line u can probably just slice it out
E0d864d9677f3c1482a20152b7cac0e2?d=identicon&s=25 Robert Klemme (Guest)
on 2007-08-03 15:00
(Received via mailing list)
2007/8/3, Jon Hawkins <globyy3000@hotmail.com>:
> look into using the .slice(# , #)  method. so long as you know the
> length of the first line u can probably just slice it out

This is a dangerous approach as it will work for the minority of cases
only (i.e. when old and new line have the exact same length). Though
you could make it work for cases where the new line is shorter than
the old line things get messy if you try to cope with the opposite
case.

Ah, and Jeffrey, do yourself a favor and use the block form of
File.open (btw, your sample does not work anyway since
File.open(file_name) will open for reading only).

File.open(foo, "a") {|fi| fi.puts x}

Kind regards

robert
96931bfe0c2948f47a98e15ae52e5637?d=identicon&s=25 Chris Carter (cdcarter)
on 2007-08-03 17:18
(Received via mailing list)
On 8/2/07, Jeffrey Bowen <ja_bowen@yahoo.com> wrote:
> (header).  Like 1, 20, 300, etc.  Which I can do with
> file, enter a new first line and then move line 2
> thought the last line from file 1 into file 2 and then
> rename file 2 to file 1.
>
> I was hoping there was a way to replace the first line
> in a text file.
>
> Thanks Jeff
>
>
>

http://rubyreports.org/.  Ruport will let you parse in the file, do
all sorts of data manipulation (including everything you described)
and write it back out as csv.
This topic is locked and can not be replied to.