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 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.
Many thanks,
baptiste
On Nov 24, 2007 11:13 PM, baptiste Auguié [email protected] wrote:
…
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.
p DATA.readlines.map{ |line| line.chomp.split }.transpose
END
1 2 3
4 5 6
7 8 9
23 7.3e-8 3.4
Many thanks,
baptiste
HTH
Robert
Hi,
Thanks for the hints, however it doesn’t quite work for me yet. I tried,
p DATA.readlines.map{ |line| line.chomp.split }.transpose
END
1 2 3
4 5 6
7 8 9
23 7.3e-8 3.4
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 D. wrote:
some lines of text …
some more text
7 8 9
–
what do I think about Ruby?
http://ruby-smalltalk.blogspot.com/
Baptiste Auguié
Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK
Phone: +44 1392 264187
http://newton.ex.ac.uk/research/emag
http://projects.ex.ac.uk/atto
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
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
end
p current
Best wishes,
baptiste
On 25 Nov 2007, at 12:15, MonkeeSage wrote:
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
Phone: +44 1392 264187
http://newton.ex.ac.uk/research/emag
http://projects.ex.ac.uk/atto
On Nov 25, 2007 2:24 PM, baptiste Auguié [email protected] wrote:
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
R.
On Nov 25, 8:22 am, Robert D. [email protected] wrote:
vim: sw=2 ts=2 ft=ruby expandtab tw=0 nu syn:
Happiness! Another vim user.
Regards,
Jordan
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!
On 25 Nov 2007, at 14:22, Robert D. wrote:
On Nov 25, 2007 2:24 PM, baptiste Auguié [email protected] wrote:
Thanks, this didn’t work either (the data file contains lines of text
before and after the data).
grep is your friend
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.
Baptiste Auguié
Physics Department
University of Exeter
Stocker Road,
Exeter, Devon,
EX4 4QL, UK
Phone: +44 1392 264187
http://newton.ex.ac.uk/research/emag
http://projects.ex.ac.uk/atto
On Nov 25, 2007 3:53 PM, baptiste Auguié [email protected] wrote:
grep is your friend
#!/usr/local/bin/ruby
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.