Fortran Coder

查看: 34251|回复: 14
打印 上一主题 下一主题

[文件读写] 关于读取指定行

[复制链接]

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
楼主
发表于 2017-3-4 18:23:09 | 显示全部楼层
以下代码,会搜索文件中以 * 开头的行,并且读取它后面的第三行。(而其他无用的行有多少,无关精要)
[Fortran] 纯文本查看 复制代码
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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2017-3-4 20:18:23 | 显示全部楼层
请上传一段数据文件,以便调试

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
板凳
发表于 2017-3-4 22:31:56 | 显示全部楼层
是的,的确是因为类型不对。
"CHN003830" 不能直接被转换成 integer
"LO" 也是如此,如果你不需要它,可以不读它。

[Fortran] 纯文本查看 复制代码
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

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
地板
发表于 2017-3-5 09:28:19 | 显示全部楼层
这个问题就复杂了。
如果数据量不大,可以用数组存储,然后查找(关于距离,因为有乘方的关系,所以计算速度比较慢,可以只计算 X 的差和 Y 的差。效果也差不多)
如果数据量大,可以先对数组进行一次排序,然后二分法查找。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-5-16 02:33

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表