-
Notifications
You must be signed in to change notification settings - Fork 0
/
ReadCSV.f95
85 lines (63 loc) · 2.86 KB
/
ReadCSV.f95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
! Read CSV File Practice
! Date: 2024.05.04
! This program reads data from a CSV file containing information about girl groups.
! It splits each line of the CSV file into two columns and stores the data into an array.
! The first row of the CSV file is assumed to contain column headers.
! The maximum number of rows and columns is specified by MaxRows and MaxCols parameters.
! MaxColumnLength parameter sets the maximum length of each column.
PROGRAM ReadCSVFile
IMPLICIT NONE
! Constants
INTEGER, PARAMETER :: MaxRows = 1000, MaxCols = 10 ! Maximum number of rows and columns
INTEGER, PARAMETER :: MaxColumnLength = 16 ! Maximum length of each column
INTEGER, PARAMETER :: HeaderRow = 1 ! Row number containing column headers
! Variables
CHARACTER(MaxColumnLength) :: DataArray(MaxRows, 2) ! Array to store data
CHARACTER(80) :: FileName ! File name
INTEGER :: NumRows, i, FileUnit ! Number of rows and file unit
CHARACTER(80) :: Line ! Line read from the file
! Get the file name
FileName = 'GirlGroups.csv'
! Open the data file
OPEN(UNIT=FileUnit, FILE=FileName, STATUS='OLD', ACTION='READ')
! Initialize the number of rows
NumRows = 0
! Read the data from the file
DO
READ(FileUnit, '(A)', END=999) Line
NumRows = NumRows + 1
! Split the line into columns
CALL SplitLine(Line, DataArray(NumRows, 1), DataArray(NumRows, 2))
END DO
999 CONTINUE
! Close the data file
CLOSE(UNIT=FileUnit)
! Print the data array
DO i = 1, NumRows
WRITE(*, '(A, A)') DataArray(i, 1), DataArray(i, 2)
! Print the line separator
IF (i == HeaderRow) THEN
WRITE(*, '(A)') REPEAT('-', MaxColumnLength*2)
END IF
END DO
CONTAINS
! Subroutine to split a line into two columns
SUBROUTINE SplitLine(Line, Column1, Column2)
IMPLICIT NONE
CHARACTER(80), INTENT(IN) :: Line ! Input line
CHARACTER(MaxColumnLength) :: Column1, Column2 ! Output columns
CHARACTER(80) :: TempLine ! Temporary line storage
INTEGER :: Start, End ! Start and end positions
TempLine = TRIM(Line)
Start = 1
! Read the first column until a comma is encountered
DO WHILE (Start <= LEN(TempLine) .AND. TempLine(Start:Start) /= ',')
Start = Start + 1
END DO
End = MIN(Start+MaxColumnLength-1, LEN(TempLine))
Column1 = TempLine(1:Start-1)
! Read the second column from the comma to the end of the line
Start = Start + 1
Column2 = TempLine(Start:LEN(TempLine))
END SUBROUTINE SplitLine
END PROGRAM ReadCSVFile