A basic question: how to extract several consecutive lines of numbers in a text file (example below) and assign them to some GSL::Matrix in Ruby?
text file:
some lines of text ...
....
more text
below is the data to extract
1 2 3
4 5 6
7 8 9
23 7.3e-8 3.4
some more text
from which i would like to create three vectors, a=[1, 4, 7, 23], b= [2, 5, 8, 7.33-8], c=[3, 6, 9, 3.4]. The line numbers could be used for indexing if that can help.
A basic question: how to extract several consecutive lines of numbers
in a text file (example below) and assign them to some GSL::Matrix in
Ruby?
text file:
> some lines of text ...
> ....
> more text
> below is the data to extract
>
> 1 2 3
> 4 5 6
> 7 8 9
> 23 7.3e-8 3.4
>
>
> some more text
from which i would like to create three vectors, a=[1, 4, 7, 23], b=
[2, 5, 8, 7.33-8], c=[3, 6, 9, 3.4]. The line numbers could be used
for indexing if that can help.
which produces a nice matrix as suggested, but I can't figure how to read that data from an external file rather than below this "__END__" thing ; nor can I see how to deal with the extra text lines above and below the data. This is actually the main problem, as I would otherwise go for
require("rbgsl")
a, b, c = GSL::Vector.filescan(filename)
Thanks again,
baptiste
···
On 25 Nov 2007, at 00:01, Robert Dober wrote:
On Nov 24, 2007 11:13 PM, baptiste Auguié <ba208@exeter.ac.uk> wrote:
Hi,
A basic question: how to extract several consecutive lines of numbers
in a text file (example below) and assign them to some GSL::Matrix in
Ruby?
text file:
some lines of text ...
....
more text
below is the data to extract
1 2 3
4 5 6
7 8 9
23 7.3e-8 3.4
some more text
from which i would like to create three vectors, a=[1, 4, 7, 23], b=
[2, 5, 8, 7.33-8], c=[3, 6, 9, 3.4]. The line numbers could be used
for indexing if that can help.
def input_matrix(file)
File.open(file) { |f|
f.readlines.collect { |line|
line = line.chomp
if line.empty?
then nil
else line.split
end
}.compact.transpose
}
end
p input_matrix(ARGV[0])
^ Composes matrix from first file given on command line, ignoring
blank lines in file.
Thanks, this didn't work either (the data file contains lines of text before and after the data).
I've eventually figured a way playing with different bits of code I found:
# extract space separated numbers from lines 5 to 9 in 'data.txt',
# ignoring header and footer text lines
current =
File.foreach('data.txt') do |line|
if ($. == 5) .. ($. == 9)
current << line.scan(/\S+/).map! {|x| x.to_f}
end
p current
Best wishes,
baptiste
···
On 25 Nov 2007, at 12:15, MonkeeSage wrote:
def input_matrix(file)
File.open(file) { |f|
f.readlines.collect { |line|
line = line.chomp
if line.empty?
then nil
else line.split
end
}.compact.transpose
}
end
p input_matrix(ARGV[0])
^ Composes matrix from first file given on command line, ignoring
blank lines in file.
Regards,
Jordan
_____________________________
Baptiste Auguié
Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK
Thanks, this is exactly what i was looking for: I just never find my
way in these regular expressions, not to mention how to adapt it in
Ruby code!
>> Thanks, this didn't work either (the data file contains lines of text
>> before and after the data).
>
> grep is your friend
>
> 508/8 > cat data.txt && cat detect.rb && ruby detect.rb data.txt
> 1 2 3
> Some text
> 4 5 6
> more text
> 7 8 9
> .42 42 42
> 23 7.3e-8 3.4
> #!/usr/local/bin/ruby
> # vim: sw=2 ts=2 ft=ruby expandtab tw=0 nu syn:
>
> p ARGF.readlines.grep(/^\s*[\.\d]/).map{ |line|
> line.chomp.split }.transpose
>
> [["1", "4", "7", ".42", "23"], ["2", "5", "8", "42", "7.3e-8"], ["3",
> "6", "9", "42", "3.4"]]
>
> BTW don't forget to tell us the mark you got
>
do you get a mark for a PhD? I can only tell you the imaginary part
is gonna be negative, in terms of propagation constant.
Well in that case you just state the sources just kidding, I am
aware that Ruby is only doing some "low" stuff, but still glad you use
it as a tool, and concerning your PhD
"bonne chance".
R.
···
On Nov 25, 2007 3:53 PM, baptiste Auguié <ba208@exeter.ac.uk> wrote:
On 25 Nov 2007, at 14:22, Robert Dober wrote:
> On Nov 25, 2007 2:24 PM, baptiste Auguié <ba208@exeter.ac.uk> wrote:
_____________________________
Baptiste Auguié
Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK