как справиться с такого рода заявлениями? - PullRequest
0 голосов
/ 20 октября 2011

У меня есть строковая переменная, которая будет иметь максимум 80 символов.Я объявляю переменную как CHARACTER STRING*80 или CHARACTER*80 STRING Если пользователь вводит менее 80 символов, некоторые специальные символы добавляются в оставшейся позиции.

Не могли бы вы, пожалуйста, дать мне знать, как обрабатывать ??1005 *

Уточнение. Я хотел бы знать, как заполнить оставшееся место в строке другими символами.

Ответы [ 3 ]

2 голосов
/ 20 октября 2011

Я не понимаю, «если пользователь вводит менее 80 символов, некоторые специальные символы добавляются в оставшуюся позицию». - способ Фортрана состоит в добавлении пробелов для заполнения строки при вводе-выводе или назначении. Вы можете увидеть это с помощью следующей тестовой программы. Он также включает в себя метод, показанный haraldkl, для замены конечных пробелов на некоторые другие символы. Проблема заключается в том, что трудно различить «настоящие» конечные пробелы и те, которые заполнены.

module subs

contains

   subroutine write_string (string)

   character (len=10), intent (in) :: string
   integer :: i

   write (*, '(">", A10, "<")' ) string

   do i=1, 10
      write (*, *) i, ichar (string (i:i))
   end do

   return

end subroutine write_string

end module subs


program test_string

use subs

character (len=10) :: string
integer :: i


!  Assignment test

string = "abc"

call  write_string (string)


!  Read test
string = "123456789"

write (*, '("Input string:")' )
read (*, '(A)' ) string

call write_string (string)



!  replacing the trailing blanks:

do i=len_trim (string)+1, 10
   string(i:i) = "+"
end do

call write_string (string)

stop
end program test_string
2 голосов
/ 20 октября 2011

Предварительно определите вашу строку с пустой, чтобы заполнить ее пробелами. А потом используйте триммер, чтобы получить только строку без конечных пробелов. Вы также должны использовать символ (len = 80) в объявлении.

Редактировать, обновить: Вы можете заменить конечные пробелы в строке другим символом, например,

do i=len_trim(string)+1,len(string)
  string(i:i) = 'A'
end do
0 голосов
/ 20 октября 2011

Вы можете определить строку из 80 символов по вашему выбору (скажем, пробелы), а затем получить входной символ за символом, оставляя все элементы без изменений:

[' ', ' ', ' ' ... ' ']

['h', ' ', ' ' ... ' ']

['h', 'e', ' ' ... ' ']

['h', 'e', 'l' ... ' ']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...