回 帖 发 新 帖 刷新版面

主题:一个有关输出的小问题

数据为单列:
   1
   1
   1
  13
  13
  13
  15
  15
  15
  17
  17
  17
  23
  23
  23
  25
  25
  25
  ...

我只需要读一下数,现在每一个都重复了三次,所以想重新输出成三列,然后只读第一列, 也就是

   1
  13
  15
  17
  23
  25
  ...

这样。

我写的源程序是:

      program main

      character(160) :: filename,tmp
    integer m,n
    integer i,line,a

      filename='A_1_'
      print*, 'Please enter the number of files:'
      read*,n
          do m=1,n
        write(tmp,*)m      
        
      open(10,status='old', file=trim(filename)//trim(adjustl(tmp))
    1//'.dat')

    line=1000
      do i = 1,line
      read(10,111,iostat=ios) a
    if (ios /=0) then
    exit
    endif

      open(11,status='unknown',file=trim('B_1_')//trim(adjustl(tmp))
    1//'.dat')
      write(11,112) a

    enddo
      enddo

111   format (3I4)
112   format (I4,2x,2x)
      close(10)
      close(11)

    end

这里的file=trim(filename)//trim(adjustl(tmp)),是说我有许多这一类数据,希望进行批处理。不知道format哪里不对,现在的问题是输出和原数据一样,也是单列然后每个重复三次。请问如何解决?

另外想问一下,输出的时候,能否在同一个文件输出很多列? 比如每个文件二十列(读二十个原文件,然后将结果输出到同一个dat文件里,像下面的举例那样)。这样读起来会更方便。请问这个想法是否可行,以及最多可以有多少列在同一个文件中?

eg:

   1   1   ...
  13   12  ...
  15   13  ...
  17   15  ...
  23   16  ...
  25   19  ...
  ...  ... ...

回复列表 (共24个回复)

11 楼

sample.dat里的数据为
   1
  13
  15
  17
  23
  25
  29
  35
  43
  49
  53
  59
  75
  79
  85
  89
  91
  95
 101
 107
 117
 129
 131
 139
 141
 149
 151
 161
 163
 165
 173
 177
 183
 185
 191
 195
 215
 239
 245
 247
 261
 269
 283
 289
 321
 323
 345
 349
 353
 359
 363
 365
 395
 407
 409
 421
 433
 437
 439
 443
 449
 473
 489
 521
 525
 537
 541
 543
 547
 549
 559
 565
 571

12 楼

部分结果是这样:

 No:    1   Read:   1
          10
 No:    2   Read:  13
          10
 No:    3   Read:  15
          10
 No:    4   Read:  17
          10
 No:    5   Read:  23
          10
 No:    6   Read:  25
          10
 No:    7   Read:  29
          10
 No:    8   Read:  35
          10
 No:    9   Read:  43
          10
 No:   10   Read:  49
          10
 No:   11   Read:  53
          10
 No:   12   Read:  59
          10
 No:   13   Read:  75
           2
           0
           1
           4
 No:   14   Read:  79
          10
 No:   15   Read:  85
           5
           0
           0
           0
           0
 No:   16   Read:  89
          10
 No:   17   Read:  91
           1
           6
           0
 No:   18   Read:  95
          10
 No:   19   Read: 101
          10
 No:   20   Read: 107
           3
           0
           0
           0
           0
           0
           0

13 楼

看起来符合要求了,是这样么?

14 楼

No:   13   Read:  75
           2
           0
           1
           4
 No:   14   Read:  79
          10
 No:   15   Read:  85
           5
           0
           0
           0
           0

像数据75和85这样,总和不是10的结果偶有出现。实际上对于数据75,应为

2
0
0
1
0
4

15 楼

就统计来说是没有错,但无论如何我必须依照时间坐标来plot,所以不能缺少该有的0,因为它具有时间上的含义。

16 楼

我已经测试了两千个左右的文件,发现这样的问题时有发生。

17 楼

我比较了十几个这样的‘偶尔’以后,发现

1 有的是数据后缺少一个0,只给出‘出现过’的个数。比如

1
(缺少0)
3
(缺少0)
4

2 还有的是0的个数不够

2
0
0
(这里个数不够)
2
0
4

18 楼

反复看了程序,觉得问题似乎出在这里

      If ( any( stAllData(j)%rData(:) == iCompare ) ) then
        iCount = iCount + 1        
      Else
        write( 13 , * ) iCount
        iCount = 0
      End If
      End Do
      If ( iCount /= 0 ) write( 13 , * ) iCount

在改成iCount = 111 (心想胡乱设定一下会怎么样)之后,发现result变成

 No:   20   Read: 107
           3
         111
         111
         111
         111
         111
         111
         111

有一些结果不再缺少‘个数’(虽然不是0),但也有的变成了

No:   13   Read:  75
           2
         111
         112
         115

这样奇怪的。

19 楼

按照我的逻辑来说,我发现不了问题。

建议你结合自己的数据,自己先分析一下问题所在。

如果你自己无法分析,起码提供给我产生问题的数据,否则我也无能为力。

20 楼

我尝试好多次都提示无法贴附件,只好这样贴出来:

文件名是A_1_1.dat,最后的_1部分是从1到10。

(1)
   1
  13
  15
  17
  23
  25
  29
  35
  43
  49
  53
  59
  75
  79
  85
  89
  91
  95
 101
 107
 117
 129
 131
 139
 141
 149
 151
 161
 163
 165
 173
 177
 183
 185
 191
 195
 215
 239
 245
 247
 261
 269
 283
 289
 321
 323
 345
 349
 353
 359
 363
 365
 395
 407
 409
 421
 433
 437
 439
 443
 449
 473
 489
 521
 525
 537
 541
 543
 547
 549
 559
 565
 571

(2)

   1
  13
  15
  17
  19
  23
  25
  29
  35
  43
  49
  53
  59
  75
  79
  85
  89
  95
 101
 107
 117
 129
 131
 141
 149
 151
 165
 173
 177
 183
 185
 195
 215
 239
 245
 247
 269
 321
 323
 337
 345
 349
 353
 363
 365
 377
 407
 409
 421
 423
 433
 437
 439
 443
 449
 455
 473
 489
 495
 497
 521
 537
 541
 547
 557
 559
 565
 571

(3)

   1
  13
  15
  17
  23
  25
  29
  35
  43
  49
  53
  57
  59
  79
  85
  89
  91
  95
 101
 107
 129
 131
 139
 141
 149
 151
 161
 165
 173
 177
 181
 183
 185
 195
 197
 205
 215
 239
 245
 247
 269
 289
 321
 323
 345
 349
 353
 363
 365
 377
 407
 409
 421
 433
 437
 439
 443
 455
 473
 489
 497
 511
 515
 521
 525
 537
 541
 543
 547
 557
 559
 571

我来回复

您尚未登录,请登录后再回复。点此登录或注册