Дословный ответ конкатенации, используя оператор //
, дается в другой ответ. Обратите внимание, в частности, что вы, вероятно, хотите, чтобы первый аргумент TRIM
.
Но есть еще одна интересная концепция, которую поднимает ваш вопрос, и это формат reversion.
В формате (A)
у нас есть один элемент формата. В выходном списке str1, str2
у нас есть два выходных элемента. В общем выводе мы применяем каждый элемент формата (с повторными подсчетами) к соответствующему элементу вывода. Итак, str1
обрабатывается с первым элементом формата A
, и появляется строка.
Приходите ко второму выходному элементу str2
, мы уже использовали элемент одного формата, дойдя до конца списка элементов формата. В результате мы видим эту реверсию формата: то есть мы возвращаемся к первому элементу в списке. После, в решающей степени, мы начинаем новую линию.
Так что, если мы просто хотим, чтобы напечатать эти два элемента в одной строке (без пробела или пустой строки между ними) мы могли бы использовать (без учета подрезки для ясности)
print "(A)", str1//str2
или мы могли бы использовать формат которая не имеет этого реверсии
print "(2A)", str1, str2
print "(A, A)", str1, str2
первые сцепляет две переменные символов, чтобы дать один, больше, который затем печатается в виде отдельного элемента вывода. Второй печатает как по отдельности.
Далее в вашем конкретном примере
character(12), parameter :: str1="Hello" ! Intentionally longer - trailing blanks
character(12), parameter :: str2=" World!"
print "(2A)", TRIM(str1), TRIM(str2)
end
будет иметь выход как
Hello World!
с этим средним пространством, потому что TRIM
не удалит ведущих пространство от str2
. Более широко, хотя у нас не будет ведущего места для нас, и мы хотим добавить его в выход.
Естественно, конкатенация до сих пор работает (я обратно, не предполагающие-подрезка)
character(*), parameter :: str1="Hello" ! No trailing blank
character(*), parameter :: str2="World!"
print "(A)", str1//" "//str2
end
, но мы можем выбрать наш формат, используя X
редактирования дескриптора, чтобы добавить пробел
print "(2(A,1X))", str1, str2
print "(A,1X,A)", str1, str2
print "(2(A,:,1X))", str1, str2
, где этот последний имеет полезный дескриптор двоеточия (вне сферы действия этого ответа).
Спасибо, теперь он печатает на одной строке, но между строками есть большое пространство. Я хочу обрезать все пробелы, за исключением 1. – Prince
Благодарим за помощь. – Prince