Извлечение данных из файла Excel в Fortran

#excel #fortran

#excel #fortran

Вопрос:

У меня есть лист Excel с 8000 точками данных (столбец A). Каждая строка от 0 до 8000 имеет разные соответствующие значения в столбцах B, C и т.д.

Мне нужно написать код на Fortran, который должен воспринимать входные данные, сравнивать его со столбцом A и должен выдавать выходные данные из столбца B той же строки.

Я экспортировал файл Excel в формат PRN и, просто чтобы получить представление, тестирую следующий пример кода и получаю ошибку en:

 Error 52, invalid character in field at line 10_
  

(Смотрите прикрепленную фотографию, сообщение об ошибке). Есть предложения, какой символ недопустим? Я пишу в Plato IDE

 !FTN95 application...

program FreeFormat

real*4, dimension(5) :: Open, High, Low, Close, DayAverage
real*4 :: average

open(unit=1, file='C:UsersMUHAMMADARSLANDesktopFortran TestTable.prn',   status='old')
do i=1,5
read(1,*)Open(i), High(i), Low(i), Close(i), DayAverage(i)
enddo
average = sum(DayAverage)/5
write(*,'("Average is",f5.2)')average

end program FreeFormat
  

Текст внутри Table.prn файла:

Открыть 70,
высокий 50,
Низкий 10,
Закрыть 5,
Среднее значение за день 100,
Все значения отделены Tab от имен переменных.

Комментарии:

1. Добро пожаловать обратно. есть предложения, какой символ недопустим? Ну, один из символов в 10-й строке входного файла. Я предлагаю вам вырезать и вставить первые 12 строк из вашего входного файла и добавить их в вопрос. Без этого мы бы просто гадали. Я предполагаю, что 10-я строка содержит что-то, что не является цифрой, не . и не пробелом.

2. Ошибка не во входном файле, а в 10-й строке FORTRAN приложения. 10-я строка начинается с read ; read(1,*)Open(i), High(i), Low(i), Close(i), DayAverage(i) @HighPerformanceMark

3. Я думаю, что оценка высокой производительности верна, и ошибка находится во входном файле, если только это не какой-то символ, который был потерян при копировании кода сюда. Статус можно найти в любом руководстве и во многих вопросах здесь. В нем говорится, что открываемый файл уже должен существовать.

4. Код точно такой же, и, чтобы показать вам все, я прикрепил изображение. Возможно, что-то не так с Table.prn файлом. @VladimirF

5. Но вы получаете ошибку, касающуюся файла! Вы действительно должны показать нам файл. Я уверен, что это несовместимо с вашим кодом. Я бы добавил iostat= спецификатор к инструкции read.

Ответ №1:

Ваш файл полностью несовместим с тем, как вы его читаете.

Команда

 do i=1,5
  read(1,*)Open(i), High(i), Low(i), Close(i), DayAverage(i)
enddo
  

ожидается 5 строк и 5 чисел в каждой строке. Там не должно быть текстовых строк. Числа могут располагаться в большем количестве строк, но определенно всего должно быть 25 чисел и никакого текста между ними.

В зависимости от того, что является основным, вам нужно изменить код или входной файл.

Комментарии:

1. Что мне нужно записать между 5 числами в одной строке; komma , fullstop или a Tab ?

2. Лучше всего использовать пробел. Запятая тоже будет работать. Прочитайте о формате, ориентированном на списки , в вашем любимом учебнике, руководстве или найдите на этом сайте.

3. Спасибо, чувак. Наконец-то это сработало 🙂 Но без текстовой строки, как я могу прочитать файл с 8000 rows и 4 точками данных в каждой строке? Моя реальная идея заключается в получении входных данных, сравнении их с данными первого столбца и извлечении данных из столбца 2 или 3 соответствующей строки (с полученными входными данными), например. @Vladimir F

4. Сначала вам следует подробнее изучить чтение файлов в Fortran и использование дескрипторов формата. Серьезно, это слишком сложно для простого ответа. Иногда нужно открыть учебник и чему-то научиться.