主题:一个有关输出的小问题
NMRD
[专家分:40] 发布于 2012-01-16 19:06:00
数据为单列:
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 楼
NMRD [专家分:40] 发布于 2012-01-18 18:45:00
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 楼
NMRD [专家分:40] 发布于 2012-01-18 18:48:00
部分结果是这样:
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 楼
臭石头雪球 [专家分:23030] 发布于 2012-01-18 18:58:00
看起来符合要求了,是这样么?
14 楼
NMRD [专家分:40] 发布于 2012-01-18 18:58:00
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 楼
NMRD [专家分:40] 发布于 2012-01-18 18:59:00
就统计来说是没有错,但无论如何我必须依照时间坐标来plot,所以不能缺少该有的0,因为它具有时间上的含义。
16 楼
NMRD [专家分:40] 发布于 2012-01-18 19:00:00
我已经测试了两千个左右的文件,发现这样的问题时有发生。
17 楼
NMRD [专家分:40] 发布于 2012-01-18 19:04:00
我比较了十几个这样的‘偶尔’以后,发现
1 有的是数据后缺少一个0,只给出‘出现过’的个数。比如
1
(缺少0)
3
(缺少0)
4
2 还有的是0的个数不够
2
0
0
(这里个数不够)
2
0
4
18 楼
NMRD [专家分:40] 发布于 2012-01-18 19:16:00
反复看了程序,觉得问题似乎出在这里
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 楼
臭石头雪球 [专家分:23030] 发布于 2012-01-18 21:20:00
按照我的逻辑来说,我发现不了问题。
建议你结合自己的数据,自己先分析一下问题所在。
如果你自己无法分析,起码提供给我产生问题的数据,否则我也无能为力。
20 楼
NMRD [专家分:40] 发布于 2012-01-18 21:43:00
我尝试好多次都提示无法贴附件,只好这样贴出来:
文件名是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
我来回复