#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)
@HighPerformanceMark3. Я думаю, что оценка высокой производительности верна, и ошибка находится во входном файле, если только это не какой-то символ, который был потерян при копировании кода сюда. Статус можно найти в любом руководстве и во многих вопросах здесь. В нем говорится, что открываемый файл уже должен существовать.
4. Код точно такой же, и, чтобы показать вам все, я прикрепил изображение. Возможно, что-то не так с
Table.prn
файлом. @VladimirF5. Но вы получаете ошибку, касающуюся файла! Вы действительно должны показать нам файл. Я уверен, что это несовместимо с вашим кодом. Я бы добавил
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
или aTab
?2. Лучше всего использовать пробел. Запятая тоже будет работать. Прочитайте о формате, ориентированном на списки , в вашем любимом учебнике, руководстве или найдите на этом сайте.
3. Спасибо, чувак. Наконец-то это сработало 🙂 Но без текстовой строки, как я могу прочитать файл с 8000
rows
и 4 точками данных в каждой строке? Моя реальная идея заключается в получении входных данных, сравнении их с данными первого столбца и извлечении данных из столбца 2 или 3 соответствующей строки (с полученными входными данными), например. @Vladimir F4. Сначала вам следует подробнее изучить чтение файлов в Fortran и использование дескрипторов формата. Серьезно, это слишком сложно для простого ответа. Иногда нужно открыть учебник и чему-то научиться.