Fortran中数字转字符及字符转数字方法

在Fortran中,若想要将整型或实型数据转换为字符,则应用内部文件write和read即可实现。

 

示例代码:
!=====================================
!        整型或实型转换生字符,借助Fortran内部文件完成,
!        即将一个字符串变量当作一个内部文件看待;反之依然
!=====================================
    program main

   implicit none
   character(len=20) :: aa="2007",bb,cc='2007.00',dd
   integer(kind=4) :: a=2007,b
    real(kind=8) :: c=2007.00,d


!...数字转换成字符串

 

   !...整型转字符

   write(bb,"(I4)") a     !...a -> bb

   write(*,*) bb,a

 

   !...实型转字符

    write(dd,"(f10.4)") c    !...c -> dd

   write(*,*) dd,c

 

!...字符转换数字

 

   !...字符转整型

   read(aa,'(I4)') b       !...aa -> b

   write(*,*) aa,b

 

   !...字符转实型

   read(cc,'(F10.4)') d     !...cc -> d        

   write(*,*) cc,d

 

   stop

   end program main

 

 

 

!program main
!!=====================================
!!        整型或实型转换生字符,借助Fortran内部文件完成,
!!        即将一个字符串变量当作一个内部文件看待;反之依然
!!=====================================
!    implicit none
!   character(len=20) :: Ctemp
!   integer(kind=4) :: k
!!   
!!...trim和adjustl是Fortran内部标准函数;adjustl作用是将字符串内容左对齐,
!!...空格置于右端;trim作用是将字符串末尾(即右端)空格删掉;符号“//”是字符串
!!...连接操作符,作用是将字符串连接起来
!!
!    do k=1,20,1
!       write(Ctemp,"(I2)") k
!       open(unit=3,file='myfile'//trim(adjustl(Ctemp))//'.dat',status='new')
!       close(3)
!    end do
!   
!    stop
!end program main

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fortran,可以使用内置的字符串处理函数和文件读取函数来分割读取字符数字混合文本行。下面是一个示例程序,演示了如何实现这一操作: ```fortran program read_mixed_text implicit none character(len=100) :: line character(len=20) :: str_num integer :: i, n open(unit=10, file='mixed_text.txt', status='old') do i = 1, 10 ! 假设文件有10行文本 read(10, '(a)') line ! 读取一行文本 n = 0 do while (len(line) > 0) read(line, '(a20)', iostat=n) str_num ! 从行读取一个字符串或数字 if (n /= 0) then ! 如果读到了非法字符,则退出循环 exit end if if (is_integer(str_num)) then ! 判断是否是整数 write(*, '(i5)') int(str_num) else ! 否则,就是字符串 write(*, '(a)') trim(str_num) end if line = adjustl(line(len_trim(str_num)+1:)) ! 去掉已经读取的部分 end do end do close(10) contains logical function is_integer(str) character(len=*), intent(in) :: str integer :: i, n read(str, *, iostat=n) i ! 尝试将字符换为整数 is_integer = (n == 0) ! 如果能换成功,则是整数 end function is_integer end program read_mixed_text ``` 在这个示例程序,我们假设文件有10行文本,每行包含若干个字符串和数字,它们可能以任意顺序混合在一起。我们首先使用`read`函数读取一行文本,然后使用一个`do while`循环逐个读取其字符串和数字。在每次读取时,我们使用`iostat`参数判断是否读取成功,如果读取失败,则说明当前位置不是一个字符串或数字,我们就退出循环。如果读取成功,则可以通过判断是否能将字符换为整数来区分字符串和数字。最后,我们使用`adjustl`函数去掉已经读取的部分,然后继续读取剩余的部分,直到这一行的所有内容都被读取完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值