【问题标题】:how to remove empty spaces between '=' and values in fortran如何删除'='和fortran中的值之间的空格
【发布时间】:2018-09-16 09:37:07
【问题描述】:

我从文件中读取数据并解析它们以存储在一些变量中。数据在文件中写入如下,

INT_VALUE           =                   17 # Valid Integer
INT_VALUE1                              23
INT_VALUE2          =                   00012
INT_VALUE3                             -2
INT_VALUE4                             -33

有些地方有空格,有些地方有“=”。在阅读时,我得到了带有 '=' 的 stream%val,我的值是 ' = 17',我需要删除其中的 = 以及 '=' 符号和第一个数字之间的空格并存储为有效数字。

在某些其他情况下,数字之间可能会有空格,这应该是错误的。

无效值将是任何带有特殊字符的非整数/实数值。例如,

INT_VALUE13                            34=5434
INT_VALUE14                            -23 45-33
INT_VALUE15         =                  23-45*665Rtre
INT_VALUE16                            -23.4
INT_VALUE17                            1.4E9r23
INT_VALUE18                            -5.D-3.3
INT_VALUE19                            233 ddf
INT_VALUE20                            -87 dfsdf
INT_VALUE21         =                  rtmr,t23./

如何去除 fortran 中的空格?

我的功能是,

character(60) function sweep_blanks(in_str)
    character(*), intent(in) :: in_str
    character(60) :: out_str
    character :: ch
    integer :: j
    out_str = " "
    do j=1, len_trim(in_str)
        ch = in_str(j:j)
        if (ch .ne. " ") then
            out_str = trim(out_str) // ch
        endif
        sweep_blanks = out_str
    end do
end function sweep_blanks

这会删除所有空白,无论是在中间还是在结尾或开头,这都无济于事。

【问题讨论】:

标签: fortran gfortran


【解决方案1】:

您可以使用indexadjustl 这两个函数来做到这一点。

  • index 查找字符串中子字符串的位置;
  • adjustl 使前导空格尾随空格。

    整数 idx idx = INDEX(instring, '=')+1 outstring = ADJUSTL(instring(idx:))

所以,给定输入字符串

instring = ' =        17'

index 结果将是2,给出idx3instring(3:) 具有 ' 17' 的值,adjustl' 从该值返回 '17 '

给定输入字符串

instring = '                    -33'

没有'=',index 结果将是0

【讨论】:

  • 谢谢@francescalus,它可以工作,但我仍然遇到一些问题。如果我的值是 INT_VALUE5 = -33ang=344 INT_VALUE6 -34=174 在这两种情况下它都应该是无效的,但我在 '=' 之后将值 344 和 174 作为有效值
  • 您的评论相当含糊。您能否解释更多或将其添加为问题的一部分以使其更清楚?在您的工作中,什么被明确定义为无效?两个数字是用空格隔开的,是单个数字误隔开吗?
  • @DeenadayalanS,看起来这个问题与拆分不同,更多的是解析字符串的最后部分。如果是这样,那么也许您可以将其作为一个不同的问题提出(如有必要,请链接到该问题以获取上下文)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-17
  • 2017-02-23
  • 2015-05-30
相关资源
最近更新 更多