Skip to content

writing to a fixed format (fortran) file

4 messages · Duncan Golicher, Jean Eid, Sean O'Riordain +1 more

#
Could anyone help with what should be a simple task? I have data as a 
fixed format (fortran) table. I  have no trouble getting it into R using 
read.table. Each column is separated by a space, including the first 
column that begins with a space, and aligned. It reads into R as if 
separated by tabs. However I want to manipulate two columns of data then 
write the results out into exactly the same fortran format for use in 
another program.  It should be simple, but I've tried a variety of 
experiments with print, cat and format, none of which have come close.

Here is a sample of the data.

  1  1    1  19.5  2.42 0.02   5.81   9.7   0.4 102.  4.8  320.   4.8
  2  1    1   0.0  0.00 0.00   0.00   4.7  -4.0 178.  5.4  301.   0.2
  3  1    1   8.2  1.64 0.08   6.93   6.9  -3.6 275.  2.7   84. -11.1
  4  1    1   0.0  0.00 0.00   0.00  20.6  -4.8 221.  5.6  327. -10.4
  5  1    1   0.0  0.00 0.00   0.00  11.6   8.2 168.  4.3  269.   6.8
  6  1    1   0.0  0.00 0.00   0.00  18.7  16.9 155.  5.6  287.   8.2
  7  1    1   0.0  0.00 0.00   0.00   7.0   2.1 195.  2.7   22.   0.1
  8  1    1   0.0  0.00 0.00   0.00  17.6   6.5 281.  2.0  146.   1.5
  9  1    1  41.2  1.54 0.82   6.96  12.2   7.8 268.  5.5  356.   4.5
 10  1    1   0.0  0.00 0.00   0.00  14.6  -1.4 250.  3.6  344.   6.4
 11  1    1   0.0  0.00 0.00   0.00  14.5  -3.7 300.  0.0    0. -16.9
 12  1    1   0.0  0.00 0.00   0.00   8.8  -2.6 308.  0.0    0.   2.9
 13  1    1   0.0  0.00 0.00   0.00   6.4   1.6 226.  3.3  335.   3.8
#
why not write.table with sep="\t"
On Sat, 27 Aug 2005, Duncan Golicher wrote:

            
#
?sprintf

more C than fortran, but you get the idea :-)

cheers!
Sean
On 27/08/05, Duncan Golicher <dgoliche at sclc.ecosur.mx> wrote:
#
One way of creating fixed width output is to use 'sprintf' to create
the string and write the resulting data out.  I used your input and
just selected columns 7-11 as an example.  You will have to supply
whatever field width you want.  I create a matrix and null out the row
and column names and then write the matrix out without quotes.

HTH
V1 V2 V3   V4   V5   V6   V7   V8   V9 V10 V11 V12   V13
1   1  1  1 19.5 2.42 0.02 5.81  9.7  0.4 102 4.8 320   4.8
2   2  1  1  0.0 0.00 0.00 0.00  4.7 -4.0 178 5.4 301   0.2
3   3  1  1  8.2 1.64 0.08 6.93  6.9 -3.6 275 2.7  84 -11.1
4   4  1  1  0.0 0.00 0.00 0.00 20.6 -4.8 221 5.6 327 -10.4
5   5  1  1  0.0 0.00 0.00 0.00 11.6  8.2 168 4.3 269   6.8
6   6  1  1  0.0 0.00 0.00 0.00 18.7 16.9 155 5.6 287   8.2
7   7  1  1  0.0 0.00 0.00 0.00  7.0  2.1 195 2.7  22   0.1
8   8  1  1  0.0 0.00 0.00 0.00 17.6  6.5 281 2.0 146   1.5
9   9  1  1 41.2 1.54 0.82 6.96 12.2  7.8 268 5.5 356   4.5
10 10  1  1  0.0 0.00 0.00 0.00 14.6 -1.4 250 3.6 344   6.4
11 11  1  1  0.0 0.00 0.00 0.00 14.5 -3.7 300 0.0   0 -16.9
12 12  1  1  0.0 0.00 0.00 0.00  8.8 -2.6 308 0.0   0   2.9
13 13  1  1  0.0 0.00 0.00 0.00  6.4  1.6 226 3.3 335   3.8
# field widths are 6,6,8,5,7.  You also control the number of decimals
that appear
+     x.1[,10], x.1[,11])
5.81   9.7     0.4  102    4.8
   0.00   4.7    -4.0  178    5.4
   6.93   6.9    -3.6  275    2.7
   0.00  20.6    -4.8  221    5.6
   0.00  11.6     8.2  168    4.3
   0.00  18.7    16.9  155    5.6
   0.00   7.0     2.1  195    2.7
   0.00  17.6     6.5  281    2.0
   6.96  12.2     7.8  268    5.5
   0.00  14.6    -1.4  250    3.6
   0.00  14.5    -3.7  300    0.0
   0.00   8.8    -2.6  308    0.0
   0.00   6.4     1.6  226    3.3

        
On 8/27/05, Jean Eid <jeaneid at chass.utoronto.ca> wrote: