program find_close
implicit none
integer m,i
integer :: sol , country
integer , allocatable :: site(:)
real , allocatable :: lat(:) , long(:)
open(8,file="soil.sol")
open(10,file="find_close.txt")
!read(8,*)m !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
m=414503 !文件行数
allocate(site(m),lat(m),long(m))
do i = 1,m
if(mod(i-3,9)==0)then
read(8,*) site(i) , country , lat(i) , long(i) , sol
end if
enddo
write(10,*) site(i) , country , lat(i), long(i) , sol
end program find_close
QQ截图20170304164156.png (40.32 KB, 下载次数: 536)
QQ截图20170304171959.png (36.88 KB, 下载次数: 529)
program find_close
implicit none
integer m,i,k
integer :: sol , country
integer , allocatable :: site(:)
real , allocatable :: lat(:) , long(:)
character(len=32) :: c
open(8,file="soil.sol")
open(10,file="find_close.txt")
!read(8,*)m !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
m=414503 !//m 此时的含义为,有多少个数据(而不是有多少行)
allocate(site(m),lat(m),long(m))
O:Do i = 1 , m
do
Read(8,'(a)',iostat=k) c
if ( k/=0 ) exit O
if ( c(1:1) == '*' ) exit
end do
Read(8,*)
read(8,*) site(i) , country , lat(i) , long(i) , sol
write(10,*) site(i) , country , lat(i), long(i) , sol
End Do O
end program find_close
vvt 发表于 2017-3-4 18:23
以下代码,会搜索文件中以 * 开头的行,并且读取它后面的第三行。(而其他无用的行有多少,无关精要)
[mw_ ...
QQ截图20170304202207.png (38.31 KB, 下载次数: 435)
vvt 发表于 2017-3-4 20:18
请上传一段数据文件,以便调试
15.69 KB, 下载次数: 12
vvt 发表于 2017-3-4 20:18
请上传一段数据文件,以便调试
program find_close
implicit none
integer m,i,k
character(len=12) :: country
character(len=30) , allocatable :: site(:)
real , allocatable :: lat(:) , long(:)
character(len=32) :: c
open(8,file="soil.txt")
open(10,file="find_close.txt")
!read(8,*)m !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
m=414503 !//m 此时的含义为,有多少个数据(而不是有多少行)
allocate(site(m),lat(m),long(m))
O:Do i = 1 , m
do
Read(8,'(a)',iostat=k) c
if ( k/=0 ) exit O
if ( c(1:1) == '*' ) exit
end do
Read(8,*)
read(8,*) site(i) , country , lat(i) , long(i)
write(10,*) trim(site(i)) , trim(country) , lat(i), long(i)
End Do O
end program find_close
vvt 发表于 2017-3-4 22:31
是的,的确是因为类型不对。
"CHN003830" 不能直接被转换成 integer
"LO" 也是如此,如果你不需要它,可以 ...
vvt 发表于 2017-3-4 22:31
是的,的确是因为类型不对。
"CHN003830" 不能直接被转换成 integer
"LO" 也是如此,如果你不需要它,可以 ...
QQ截图20170305010259.png (10.06 KB, 下载次数: 514)
QQ截图20170305115617.png (24.6 KB, 下载次数: 354)
li913 发表于 2017-3-5 12:07
如果满足下面的要求,可以多费点功夫做数据前期处理:
1、坐标数据量大,且短时间内不会改变;
2、频繁调用 ...
vvt 发表于 2017-3-5 09:28
这个问题就复杂了。
如果数据量不大,可以用数组存储,然后查找(关于距离,因为有乘方的关系,所以计算速 ...
program near
implicit none
integer m,i,k
character(len=12) :: country
character(len=30) , allocatable :: site(:)
real , allocatable :: array(:,:)
character(len=32) :: c
open(8,file="soil.sol")
open(10,file="find_close.txt")
!read(8,*)m !//m无法再文件中获取,需手动输入或获取文件行数减去3,得到。
m=414503 !//m 此时的含义为,有多少个数据(而不是有多少行)
allocate(array(m,m),site(m))
O:Do i = 1 , m
do
Read(8,'(a)',iostat=k) c
if ( k/=0 ) exit O
if ( c(1:1) == '*' ) exit
end do
Read(8,*)
read(8,*) site(i) , country ,array(i,i)
write(10,*) trim(site(i)) , array(i,i)
End Do O
end program near
QQ截图20170305140026.png (35.69 KB, 下载次数: 389)
li913 发表于 2017-3-5 16:49
array数组太大,600多G,内存不够用。allocate(array(2,m),site(m))
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |