Updating header in file


#1

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


#2

On Aug 2, 2007, at 7:55 PM, Jeffrey B. 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 G. II


#3

look into using the .slice(# , #) method. so long as you know the
length of the first line u can probably just slice it out


#4

2007/8/3, Jon H. removed_email_address@domain.invalid:

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


#5

On 8/2/07, Jeffrey B. removed_email_address@domain.invalid 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.