как убрать пустые пробелы между '=' и значениями в фортране - PullRequest
0 голосов
/ 16 сентября 2018

Я читаю данные из файла и анализирую их для хранения в некоторых переменных. Данные записываются в файл, как показано ниже,

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

В некоторых местах есть пробелы и '=' в некоторых других местах. При чтении я получаю свой поток% 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./

Как убрать пробелы в фортране?

Моя функция,

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

Это удаляет все пробелы, независимо от того, в середине или в конце или в начале, что не помогает.

1 Ответ

0 голосов
/ 16 сентября 2018

Вы можете сделать это, используя две функции index и adjustl.

  • index находит расположение подстроки в строке;
  • adjustl делает ведущие заготовки конечными пробелами.

    целое число idx idx = INDEX (instring, '=') + 1 outstring = ADJUSTL (instring (idx:))

Итак, с учетом входной строки

instring = ' =        17'

результат index будет 2, давая idx значение 3. instring(3:) имеет значение ' 17', из которого adjustl 'возвращает '17 '

С учетом входной строки

instring = '                    -33'

без '= 'результат index будет 0.

...