2013-05-02 2 views
1

У меня очень простая проблема, что я еще не нашел ответа.По-видимому, невозможно добавить строку в другую

Есть ли способ, в котором я могу добавить символ (в частности, пробел) к символу, который уже был инициализирован в Fortran?

Видимо

CHARACTER(2000) :: result 
result = '' 
result = result // ' ' 

не работает.

ответ

3

Чего вы хотите достичь? Конечно, это работает, но это не так много. Попробуйте подход, который вы уже предложили в своем предыдущем вопросе. В частности, имейте в виду, что все строки заполнены пространством после их последнего непространственного характера, это очень важно!

'a'//' ' really produces 'a ' 

но

result = result//' ' 

производит строку 2001 символов, который затем усеченный по заданию, так что result заканчивает тем, что то же самое.

Вы можете

result = trim(result)//' ' 

но и бесполезно, потому что строка заполняется пробелами в любом случае.

Если вы хотите, чтобы переменная больше, вы должны использовать:

character(:),allocatable:: result 
result = '' !now contains ' ' and has length 1 
result = result//' ' !now contains ' ' and has length 2 

Вы должны включить перераспределить на уступки на некоторых процессорах.

+0

Привет, Благодарим вас за ответ. Кажется, что у меня может возникнуть другая проблема, связанная с компилятором, потому что раньше я нашел аналогичный пример, но так же, как и раньше, это результат, когда я пытаюсь инициализировать любую переменную, не задавая ей статический размер: Компиляция исходного кода .. .. $ gfortran demo.f95 -o демо-2> & 1 demo.f95: 5,14: символ (:), размещаемый :: результат ошибка: Синтаксическая ошибка в объявлении CHARACTER в (1) demo.f95 : 48.10: result = '' Ошибка: Результат символа 'at (1) не имеет типа IMPLICIT – taghack

+0

Получите последнюю версию компилятора. Поддерживаются только 4.6.4, 4.7.3 и 4.8.0. Я рекомендую последние 4.8.0 для выделяемых символов. В 4.6 они вообще не работают AFAIK. –

+0

Но вы можете делать много полезных программ даже с обычными символами, просто убедитесь, что они имеют фиксированную длину и дополнены пробелами, и вы можете использовать функцию 'trim'. –