Q
Qubert
OK, I have an algorithm that I created to format a series of numbers
for a column centric FORTRAN routine to use. I don't like what I have
created, although it works, so I would like to ask if anyone here has
a more cleaver way.
Problem: I have a series of numbers that need to be formated as a
FORTRAN program would. That is, FORTRAN cares more about columns than
numbers so I need to fake the output of Ruby to make it look "decimal
justified".
Example, a series of numbers:
3.15, 122.5, 303.123, 55.0
Input for C or Ruby (the space means a new number):
3.15 122.5
303.123 55.0
Input needed for FORTRAN with format (f7.3,f5.1):
3.150122.5
303.123 55.0
My Ruby hack to put spaces at the begining if necessary:
def ff(num,len1,len2)
x = num.to_s.split(".")
numstring = ""
x[0].size.upto(len1 - 1) {|b| numstring << ' '}
numstring << x[0] << "."
numstring << x[1][0..len2]
end
code...
bla ...
printf("%s %s\n", ff(3.150,3,3),ff(122.5,3,1)
printf("%s %s\n", ff(303.123,3,3),ff(55.0,3,1)
I know that this needs improvement so your help would be appreciated.
I have to interface with these types of FORTRAN programs a lot, thus
far I have avoided this.
Thanks,
Chris
for a column centric FORTRAN routine to use. I don't like what I have
created, although it works, so I would like to ask if anyone here has
a more cleaver way.
Problem: I have a series of numbers that need to be formated as a
FORTRAN program would. That is, FORTRAN cares more about columns than
numbers so I need to fake the output of Ruby to make it look "decimal
justified".
Example, a series of numbers:
3.15, 122.5, 303.123, 55.0
Input for C or Ruby (the space means a new number):
3.15 122.5
303.123 55.0
Input needed for FORTRAN with format (f7.3,f5.1):
3.150122.5
303.123 55.0
My Ruby hack to put spaces at the begining if necessary:
def ff(num,len1,len2)
x = num.to_s.split(".")
numstring = ""
x[0].size.upto(len1 - 1) {|b| numstring << ' '}
numstring << x[0] << "."
numstring << x[1][0..len2]
end
code...
bla ...
printf("%s %s\n", ff(3.150,3,3),ff(122.5,3,1)
printf("%s %s\n", ff(303.123,3,3),ff(55.0,3,1)
I know that this needs improvement so your help would be appreciated.
I have to interface with these types of FORTRAN programs a lot, thus
far I have avoided this.
Thanks,
Chris