铁杆木虫 (著名写手)
解决问题的方法比遇到的问题多 ![]()
|
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ lisu555: 金币+20, ★★★★★最佳答案, 好,谢谢,我试一试,太感谢了!好人啊!! 2016-12-26 00:24:17
program Obtain_data
implicit none
integer i,j,k,ii,ierr
integer,allocatable::num( : ) !//序号
real*8,allocatable::voltage( : ) !//电压
character( len=64 ) str,file_name
open( 11,file='wenjian.txt' )
open( 12,file='result.txt' )
!******读取文件总共有多少行********
i=0
read( 11,* )
do
read( 11,*,iostat=ierr ) str
if( ierr/=0 ) exit
i=i+1
end do
allocate( num( i ) )
allocate( voltage ( i ) )
rewind( 11 )
!********将序号和电压存储在数组中********
read( 11,* )
do j=1,i
read( 11," ( a64 )" ) str
read( str,* ) num( j ),voltage( j )
end do
!********找连续序号并提取出第一个和最后一个电压值********
ii=1 !//记录连续序号有多少个
do k=1,i
if( ( k+1 )/=i ) then !//序号不是最后一个
if( num( k+1 )==num( k )+1 ) then
ii=ii+1
else
write( 12,"( 2 ( f8.4,2x ) )" ) voltage( k+1-ii ),voltage( k )
ii=1
end if
else !//序号是最后一个的情况
if( num( k+1 )==num( k )+1 ) then
write( 12,"( 2( f8.4,2x ) )" ) voltage( k+1-ii ),voltage( k+1 )
exit
else
write( 12,"( 2 ( f8.4,2x ) )" ) voltage( k+1-ii ),voltage( k )
exit
end if
end if
end do
deallocate( num )
deallocate( voltage )
close( 11 )
close( 12 )
write( *,* ) 'OK'
read( *,* )
end program Obtain_data
这个程序是用Fortran书写的。输入文件叫wenjian.txt,输出文件叫result.txt,不知道你给的格式是什么样的,所以按照你给你自己做的,如有需要请自行修改其形式,包括输入文件样式等等。我自己做的输入文件上传了,不知道做的对不对。亲测在windows和Linux系统下编译都好使。
输入文件为
记录序号 电压/V
244 3.9803
245 3.9602
246 3.9438
2131 3.9648
2132 3.9447
2133 3.9388
4026 3.9590
4027 3.9388
4028 3.9335
5913 3.9565
5914 3.9363
5915 3.9298
7798 3.9537
7799 3.9335
7800 3.9261
9690 3.9534
9691 3.9329
9692 3.9199
11573 3.9534
11574 3.9332
11575 3.9137
13462 3.9524
13463 3.9323
13464 3.9121
13465 3.9081
15350 3.9506
15351 3.9298
15352 3.9097
15353 3.9013
17241 3.9484
17242 3.9283
17243 3.9081
然后你改成wenjian.txt。PS:小木虫今天传东西一直是error。 |
|