Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

Reading from data file fortran

95pdempsey
Beginner
1,449 Views

I have a .txt file containing 1 column and 101 rows. For example the first 4 rows are as follows:
0.00000E+00
6.28215E+15
1.25581E+16
1.88217E+16

I want to read the values in and store them for use in calculations.

How would I tackle this?

Thanks.

0 Kudos
13 Replies
Arjen_Markus
Honored Contributor I
1,437 Views

This is a very basic question. Is it a homework assignment?

Any textbook on Fortran ought to give you the clues for solving this "problem". But here are some clues:  use an array and the open and read statements

0 Kudos
95pdempsey
Beginner
1,430 Views
I’m doing an introductory fortran course.
It’s just an example I’ve been asked to do but can’t figure it out.
I’ve managed to open the file and read it by using:
read (10,*)a,b
but that only reads the first 2 lines. Is there a way to read all lines and assign all values to something without typing out 101 different variables?
0 Kudos
Arjen_Markus
Honored Contributor I
1,419 Views

Ah, that explains it :). Well, certainly there is. There is a wide variety of possibilities actually.

Since you are doing an introductory course, try the following (without giving you a ready-made solution by the way):

  • Declare a real array of size 101, call it, for instance, mydata
  • Use the read statement to read in the entire array
  • If you want to know a single value, you can do so by:
write(*,*) mydata(10)   ! Print the tenth element

This is a straightforward way to read the data, but it assumes:

  • you know the number of data beforehand
  • the file contains the data in the form you specified (one value per line) or as a number of values on a line, as long as there are spaces between the data and no text etc. in between

If these conditions are not met, you will get a run-time error.

If you need to make your program more robust or more flexible, there is more work involved, but the above sketch should get you going.

0 Kudos
95pdempsey
Beginner
1,411 Views

Thanks very much I'll give this a go and see how it goes.

0 Kudos
95pdempsey
Beginner
1,406 Views

My code is as follows:

program list

integer :: err
character(256) :: err_msg
real, dimension(101) :: flux

open(10, file='flux.txt', status='old', iostat=err, iomsg=err_msg)
if(err /= 0) then
write (*,*) 'Error ', trim(err_msg)
stop
endif

read (10,*)

print(*,*) flux(10)

end

but this error message is showing:

print(*,*) flux(10)                                               

           1

Error: Syntax error in PRINT statement at (1)

What am I doing wrong?

0 Kudos
FortranFan
Honored Contributor II
1,399 Views

@95pdempsey ,

Can you please share here just what kind on instructional material (textbook(s) and/or lecture notes and/or blogs or videos?) do you have for this introductory course in Fortran?  Have you gone through such material with a thoroughness the instructor would expect of anyone taking the course?  Because you're asking the most basic questions.  The material you have should show the following is invalid:

print (*,*) !<-- Invalid syntax

Re: each statements in Fortran (or any other learning for that matter), why not adopt the RTFM approach? e.g., consult the information available at your fingertips such as Intel documentation online.  Here it is for PRINT statement:

https://software.intel.com/content/www/us/en/develop/documentation/fortran-compiler-oneapi-dev-guide-and-reference/top/language-reference/a-to-z-reference/o-to-p/print.html

In case you find your instructional material inadequate, you can start with some free stuff online to get  you going immediately like the following from UNLV:

http://www.egr.unlv.edu/~ed/fortran.html

Or, you can look into getting your hands on a formal textbook such as this one:

https://www.amazon.com/Fortran-Scientists-Engineers-Stephen-Chapman-ebook/dp/B06XCTY8KR

0 Kudos
95pdempsey
Beginner
1,360 Views

Due to Covid everything has been online so the teaching hasn't been great. I have been given 5 PowerPoints each with about 10 slides on so haven't been given much information to go off. I haven't been given access to a manual so I'm sure you can see that a RTFM approach could be quite difficult without a manual.

The manual you have given me here seems excellent though so thank you very much for that it will be a great help. I will go through this today and hopefully that will solve the problems I am having.

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,385 Views

Look at your read statement from your first attempt
and compare it to the read statement from your second attempt.

What is missing?
And more important, what is the relationship between the read and what is missing?

Jim Dempsey

0 Kudos
95pdempsey
Beginner
1,359 Views

Thanks for your response. I'm about to start working on my code again now so hopefully I can solve my problem.

0 Kudos
FortranFan
Honored Contributor II
1,352 Views

@95pdempsey ,

As part of your studies, note if you're interested in computing generally and also the upcoming fields in "data sciences" and numerical programming, you can get a book bundle for $12 that includes a good book on "modern Fortran" as well: https://www.humblebundle.com/books/math-for-programmers-manning-publications-books

In terms of readily accessible resources online, do keep in mind the Fortran Wiki site:

http://fortranwiki.org/fortran/show/HomePage

 

0 Kudos
95pdempsey
Beginner
1,348 Views

Ok thanks for this I will make sure to check them out.

The "Introduction to Programming using Fortran 95/2003/2008" pdf you sent me has been brilliant so far I have learnt more from this in the past hour or so than I have across the entire course I am on so thanks a lot for that I would highly recommend it for beginners.

0 Kudos
jimdempseyatthecove
Honored Contributor III
1,339 Views

In addition to the books recommended by FortranFan, Google is your friend.

e.g. Fortran read statement

Jim Dempsey

0 Kudos
JohnNichols
Valued Contributor III
1,288 Views

You can download the Intel Fortran manuals - search for the PDF versions, there are simple examples available to anyone with each reference example in the manual.  These help more than most textbooks.  

You have hit the right place, but to ensure you learn, these guys will make you work for it, but they mean well. 

I learnt lisp alone from the reference manual -- I can remember one line took a week to debug. 

You are in world class company - so good luck -- 

 

0 Kudos
Reply