So you want an array of entities, each of which comprises an integer and a string?
One way to do it would be to have an integer array and a string array.
You do not say whether the string value is always the same number of characters, or whether the strings are of five characters each, e.g. test4 or 7 characters like "test4" including the quotes. We can make the elements of the string array as long as the maximum length string you anticipate. How about 32?
Also you need to dimension the array for the maximum file size, if more than 5 lines. How about 1000?
So the code would then be
INTEGER NUMBER(1000)
CHARACTER*32 STRING(1000)
OPEN(11,FILE="filname",ACCESS="SEQUENTIAL", STATUS="OLD")
N=0
99 READ(11,*,END=999)NUMBER(N+1),STRING(N+1)
N=N+1
GO TO 99
999 .....
C NOW YOU KNOW YOU READ IN N INTEGERS AND N ASSOCIATED STRINGS.
C IF A READ-IN STRING IS LESS THAN 32 CHARACTERS, IT IS PADDED OUT WITH TRAILING BLANKS.
C THERE SHOULD BE INTRINSIC STRING FUNCTIONS IN THE FORTRAN THAT ALLOW YOU
C TO REMOVE TRAILING BLANKS WHEN YOU ARE PROCESSING EACH STRING
If your FORTRAN allows derived types you can define a derived type e.g. FILE_LINE
to be a structure comprising an integer and a fixed-length (e.g. 32) string.
Then you can define an array of such entities of the type FILE-LINE
However, it is as well to know the advantages and disadvantages of using derived types.
The advantage is that it reduces the length of argument lists when passing structures into a subsroutines.
The disadvantage is that is obscures what is really going on by moving up a level in abstraction.