2012-07-03 2 views
1

Я столкнулся со следующей проблемой с Fortran: что при чтении массива символов, например, или в любом списке на самом деле из файла данных с помощью fmt = *, оба пробела без пробелов и запятые являются изначально рассматриваемые как разделители для элементов в массиве/списке. Тот факт, что запятые действуют как разделители, для меня большая проблема.Разделители запятой в Fortran

Вопрос: знаете ли вы какую-либо семантическую опцию или директиву компиляции в Фортране, которая позволяет рассматривать запятые в входных файлах как символы, а не как разделители, с единственными разделителями, являющимися пробелами? В качестве конкретного примера, я хотел бы, что при чтении записи, как:

x,y,z 

с:

read (7,*) adummy 

приведет adummy (скалярной переменной символьного) получение значения x,y,z не x.

Любая помощь была бы наиболее желанной.

ответ

3

Решение указать форматирование, чтобы соответствовать вашей записи данных, то есть использование символов дескриптора данных при определении формата:

read(7,fmt='(A)')adummy 

приведет к adummy имеющих значение x,y,z, предполагая, что она является переменной достаточной длины.

Однако этот метод не будет обрабатывать пробелы как разделители, поэтому, если вы хотите читать запятые как символьные строки, но иметь пробелы в качестве разделителя, общий способ достижения этого - прочитать всю запись в символьной переменной и выполнить затем разделяясь на отдельные переменные.

+0

Спасибо IRO-бот. Отформатированное чтение действительно работает для простого случая, который я привел в качестве примера, но поскольку вы указали, что он не работает, например, для чтения записи: x, y, z – bunbury

+0

@ user1499420 Я не уверен, что вы имеете в виду - пожалуйста, уточните в своем вопросе? Что именно не работает? – milancurcic

+0

(Полный комментарий) Спасибо IRO-bot. Отформатированное чтение действительно работает для простого случая, который я привел в качестве примера, но поскольку вы указали, что он не работает, например, для чтения записи: x, y, zu, v, w в addomy, если это символ aray формы (/ 2 /), что больше похоже на мою реальную проблему. Кроме того, функция fmt = * считывания массива через разные записи во входных файлах будет потеряна. В моих проблемах данные иногда могут быть все в одной записи/строке или в последовательных. Я пытаюсь избежать написания правильной процедуры разбора, но вместо этого используйте funtionality fmt = * – bunbury

Смежные вопросы