If you know how many header lines, I'll assume 3, just read them first =20=
before you start the loop:
headers =3D []
rows =3D []
File.open("your_filename", 'r') do |file|
3.times { headers << file.gets }
file.each do |line|
rows << line.split(' ') # or ',' or /,\s*/ depending
# on how "columns" are formed
end
end # the block given to File.open will automatically close the file
# for the value in 3rd column, 4th row (counting from ZERO)
rows[3][2]
# do your calculations, then open the same or a new file for writing:
File.open("your_output", 'w') do |file|
file.puts headers
rows.each do |row|
file.puts row.join(' ') # or however you separate columns
end
end
-Rob
Rob Biedenharn
http://agileconsultingllc.com
On Mar 13, 2009, at 2:30 PM, Luc Traonmilin wrote:
> Well [] only initializes the array as empty, if you want to =20
> initialize it
> with variables it is [var1, var2...]. Alternatively, you can use a =20
> Hash:
> @column1 =3D {"var1" =3D> value, ...}
> and then access the values with @column1["var1"] if that is what you =20=
> want to
> do.
>
> I don't know what your header looks like so it is difficult to say =20
> how to
> skip it. Maybe it is possible for you to match the line against the =20=
> pattern
> of your columns if you just want to skip the header. Or if you have =20=
> a fixed
> number of lines, you can use a counter.
>
>
>
> On Fri, Mar 13, 2009 at 7:02 PM, Yaj Bhattacharya =20
> <>wrote:
>
>> Thanks very much Luc, here are a few follow up questions (complete
>> noob)
>>
>> # here's the columns as arrays
>> @column1 =3D [] # should this be @column1=3D[variable1] or just the
>> empty square brackets?
>> <rest_of_columns>
>> # open file in read mode (r)
>> file =3D File.new("<your_filename", "r")
>> # read each line one after another and process it
>> file.each_line do |line| # where do I specify how the header is to
>> be skipped, how many lines to
>> #be skipped or otherwise processed?
>> # process as header if necessary
>> # or
>> # extract your variables in the line into an array
>> array =3D line.split("<your_column_separator>") # I am guessing =
that
>> a space column separator
>> #would be " ", does it work with arbit number of multiple spaces
>> between the columns i.e. if the
>> #column width is variable but between two
>> # columns there are one or several spaces?
>> # assign variable to column
>> @column1 << array[0]
>> # if @column1=3D[variable1] comment in the second line of the above =20=
>> code
>> was not correct, then
>> #where do the variables get their names?
>> # ... process other columns
>> end
>>
>>
>> On Mar 13, 1:23 pm, Luc Traonmilin <luc.traonmi...@gmail.com> wrote:
>>> Yaj Bhattacharya a =E9crit :
>>>
>>>
>>>
>>>> Hello,
>>>
>>>> As a noob to Ruby, I need to read a data file with the first few =20=
>>>> lines
>>>> as header, then the rest of the file as columns of different =20
>>>> variables
>>>> as arrays (in this case, 5 columns).
>>>> After reading in the variables, I want to calculate some operations
>>>> with each unique data field address (e.g. column3, row4), then =20
>>>> write
>>>> out the file with headers and data in columns.
>>>
>>>> Could someone help with a few lines of basic code?
>>>
>>>> Thanks in advance
>>>> Yaj
>>>
>>> You could start with this basic piece of code (replace <tags> with =20=
>>> your
>>> code):
>>> # here's the columns as arrays
>>> @column1 =3D []
>>> <rest_of_columns>
>>> # open file in read mode (r)
>>> file =3D File.new("<your_filename", "r")
>>> # read each line one after another and process it
>>> file.each_line do |line|
>>> # process as header if necessary
>>> # or
>>> # extract your variables in the line into an array
>>> array =3D line.split("<your_column_separator>")
>>> # assign variable to column
>>> @column1 << array[0]
>>> # ... process other columns
>>> end
>>>
>>> Additionnally you can google "ruby array" and "ruby file", the API =20=
>>> docs
>>> are well documented.
>>>
>>> Luc- Hide quoted text -
>>>
>>> - Show quoted text -
>>
> --=20
> Luc Traonmilin