Binary file operations in Fortran allow you to read from and write to files in binary format. This is particularly useful for handling non-text data, such as images, audio files, or any other data that is not easily represented as text. In this section, we will cover the basics of binary file operations, including opening files, reading from files, writing to files, and closing files.
Key Concepts
-
Binary Files vs. Text Files:
- Text Files: Store data in a human-readable format using characters.
- Binary Files: Store data in a binary format, which is not human-readable but more efficient for certain types of data.
-
File Handling Statements:
OPEN: Opens a file for reading or writing.READ: Reads data from a file.WRITE: Writes data to a file.CLOSE: Closes an open file.
-
File Access Modes:
FORM='BINARY': Specifies that the file is a binary file.ACCESS='STREAM': Allows for unformatted, direct access to the file.
Practical Examples
Opening a Binary File
To open a binary file for reading or writing, you use the OPEN statement with the appropriate parameters.
PROGRAM OpenBinaryFile
INTEGER :: unit_number
CHARACTER(LEN=20) :: filename
unit_number = 10
filename = 'data.bin'
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='REPLACE')
! The file is now open for binary operations
CLOSE(UNIT=unit_number)
END PROGRAM OpenBinaryFileWriting to a Binary File
To write data to a binary file, you use the WRITE statement.
PROGRAM WriteBinaryFile
INTEGER :: unit_number
CHARACTER(LEN=20) :: filename
INTEGER :: data(5) = [1, 2, 3, 4, 5]
unit_number = 10
filename = 'data.bin'
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='REPLACE')
WRITE(UNIT=unit_number) data
CLOSE(UNIT=unit_number)
END PROGRAM WriteBinaryFileReading from a Binary File
To read data from a binary file, you use the READ statement.
PROGRAM ReadBinaryFile
INTEGER :: unit_number
CHARACTER(LEN=20) :: filename
INTEGER :: data(5)
unit_number = 10
filename = 'data.bin'
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='OLD')
READ(UNIT=unit_number) data
CLOSE(UNIT=unit_number)
PRINT *, 'Data read from file:', data
END PROGRAM ReadBinaryFileClosing a Binary File
Always ensure to close the file after completing the read or write operations to free up system resources.
Practical Exercises
Exercise 1: Write and Read an Array
Task: Write a program that writes an array of real numbers to a binary file and then reads the array back from the file.
Solution:
PROGRAM WriteReadArray
INTEGER :: unit_number
CHARACTER(LEN=20) :: filename
REAL :: data_write(5) = [1.1, 2.2, 3.3, 4.4, 5.5]
REAL :: data_read(5)
unit_number = 10
filename = 'real_data.bin'
! Write data to binary file
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='REPLACE')
WRITE(UNIT=unit_number) data_write
CLOSE(UNIT=unit_number)
! Read data from binary file
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='OLD')
READ(UNIT=unit_number) data_read
CLOSE(UNIT=unit_number)
PRINT *, 'Data read from file:', data_read
END PROGRAM WriteReadArrayExercise 2: Binary File with Mixed Data Types
Task: Write a program that writes an integer, a real number, and a character to a binary file and then reads them back.
Solution:
PROGRAM WriteReadMixedData
INTEGER :: unit_number
CHARACTER(LEN=20) :: filename
INTEGER :: int_data = 42
REAL :: real_data = 3.14
CHARACTER(LEN=1) :: char_data = 'A'
INTEGER :: int_read
REAL :: real_read
CHARACTER(LEN=1) :: char_read
unit_number = 10
filename = 'mixed_data.bin'
! Write data to binary file
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='REPLACE')
WRITE(UNIT=unit_number) int_data, real_data, char_data
CLOSE(UNIT=unit_number)
! Read data from binary file
OPEN(UNIT=unit_number, FILE=filename, FORM='BINARY', ACCESS='STREAM', STATUS='OLD')
READ(UNIT=unit_number) int_read, real_read, char_read
CLOSE(UNIT=unit_number)
PRINT *, 'Integer read from file:', int_read
PRINT *, 'Real number read from file:', real_read
PRINT *, 'Character read from file:', char_read
END PROGRAM WriteReadMixedDataCommon Mistakes and Tips
- Forgetting to Close Files: Always close files after operations to avoid resource leaks.
- Incorrect File Access Mode: Ensure you use
FORM='BINARY'andACCESS='STREAM'for binary files. - Data Type Mismatch: Ensure the data types used in
WRITEandREADstatements match the data being written and read.
Conclusion
In this section, you learned how to perform binary file operations in Fortran, including opening, reading, writing, and closing binary files. These skills are essential for handling non-text data efficiently. Practice the exercises provided to reinforce your understanding and prepare for more advanced file handling techniques.
Fortran Programming Course
Module 1: Introduction to Fortran
- Introduction to Fortran
- Setting Up the Development Environment
- Basic Syntax and Structure
- Writing Your First Fortran Program
Module 2: Basic Concepts
- Variables and Data Types
- Operators and Expressions
- Input and Output
- Control Structures: If Statements
- Control Structures: Loops
Module 3: Arrays and Strings
Module 4: Procedures and Functions
Module 5: Advanced Data Structures
Module 6: File Handling
Module 7: Advanced Topics
Module 8: Best Practices and Optimization
- Code Optimization Techniques
- Debugging and Profiling
- Writing Maintainable Code
- Fortran Standards and Portability
