Функция, которую опубликовал Timotei, даст вам длину строки, пока интересующая ее часть содержит только пробелы, которые, если вы присваиваете значения в программе, должны быть истинными, как предполагается для FORTRAN. инициализируйте переменные, чтобы они были пустыми и для символов это означает пробел.
Однако, если вы читаете из файла, вы можете выбрать другие управляющие символы в конце строк (особенно символы возврата каретки и / или перевода строки, \ r и / или \ n в зависимости от вашей ОС). Вы также должны выбросить их в функцию, чтобы получить правильную длину строки. В противном случае вы можете получить несколько забавных выражений для печати, так как эти символы также печатаются.
Вот моя версия функции, которая проверяет наличие альтернативных пробельных символов в конце, кроме пробелов.
function strlen(st)
integer i,strlen
character st*(*)
i = len(st)
do while ((st(i:i).eq.' ').or.(st(i:i).eq.'\r').or.
+ (st(i:i).eq.'\n').or.(st(i:i).eq.'\t'))
i = i - 1
enddo
strlen = i
return
end
Если в разделе «мусор» есть другие символы, это все равно не будет работать полностью.
Предполагая, что он работает для ваших данных, вы можете затем изменить свой оператор записи следующим образом:
write(*,*) matname(matidx)(1:strlen(matname(matidx)))
и он распечатает только фактическую строку.
Относительно того, следует ли использовать другой массив для хранения длин строки, это зависит от вас. функция strlen () - это O (n), тогда как поиск длины в таблице - это O (1). Если вам часто приходится вычислять длины этих статических строк, это может повысить производительность, вычисляя длину один раз, когда они считываются, сохраняя их в массиве и просматривая их, если они вам нужны. Однако, если вы не заметите замедления, я бы об этом не беспокоился.