[COLOR=#a020f0]module[/color] my_temperatures
[COLOR=#2e8b57][b]type[/b][/color] temps
[COLOR=#2e8b57][b]integer[/b][/color] :: dates, hi, lo, av
[COLOR=#2e8b57][b]end type[/b][/color] temps
[COLOR=#a020f0]contains[/color]
[COLOR=#a020f0]subroutine[/color] file2array(fname, array)
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#804040][b]*[/b][/color]), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: fname
[COLOR=#2e8b57][b]type[/b][/color](temps), [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color] [COLOR=#2e8b57][b]out[/b][/color]) :: array
[COLOR=#2e8b57][b]integer[/b][/color] :: i, nr_lines, nr_elements, stat
[COLOR=#2e8b57][b]type[/b][/color](temps) :: dummy
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]"Reading the Data from file '"[/color], fname, [COLOR=#ff00ff]"' :"[/color]
[COLOR=#804040][b]open[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]file[/b][/color][COLOR=#804040][b]=[/b][/color]fname,[COLOR=#804040][b]status[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'old'[/color],[COLOR=#804040][b]iostat[/b][/color][COLOR=#804040][b]=[/b][/color]stat)
[COLOR=#804040][b]if[/b][/color] (stat [COLOR=#804040][b].ne.[/b][/color] [COLOR=#ff00ff]0[/color]) [COLOR=#804040][b]then[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) fname, [COLOR=#ff00ff]' cannot be opened !'[/color]
[COLOR=#804040][b]go to[/b][/color] [COLOR=#ff00ff]20[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#0000ff]! count number of lines in the file[/color]
nr_lines [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]0[/color]
[COLOR=#804040][b]do[/b][/color]
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]end[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]10[/b][/color],[COLOR=#804040][b]err[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]20[/b][/color]) dummy
nr_lines [COLOR=#804040][b]=[/b][/color] nr_lines [COLOR=#804040][b]+[/b][/color] [COLOR=#ff00ff]1[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#0000ff]! rewind back to the beginning of the file for unit=1[/color]
[COLOR=#ff00ff]10[/color] [COLOR=#804040][b]rewind[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#0000ff]! number of array elements = number of data lines in the file[/color]
nr_elements[COLOR=#804040][b]=[/b][/color]nr_lines
[COLOR=#0000ff]! allocate the arrays of given size [/color]
[COLOR=#804040][b]allocate[/b][/color] (array(nr_elements))
[COLOR=#0000ff]! read array elements from the file[/color]
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], nr_elements
[COLOR=#804040][b]read[/b][/color]([COLOR=#ff00ff]1[/color],[COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]err[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#804040][b]20[/b][/color]) array(i)
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#ff00ff]'(a)'[/color],[COLOR=#804040][b]advance[/b][/color][COLOR=#804040][b]=[/b][/color][COLOR=#ff00ff]'no'[/color]) [COLOR=#ff00ff]'.'[/color]
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#0000ff]! next line[/color]
[COLOR=#804040][b]close[/b][/color]([COLOR=#ff00ff]1[/color])
[COLOR=#0000ff]![/color]
[COLOR=#ff00ff]20[/color] [COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'End of Reading Data'[/color]
[COLOR=#a020f0]end subroutine[/color] file2array
[COLOR=#a020f0]subroutine[/color] array2screen(array_name, array)
[COLOR=#2e8b57][b]implicit[/b][/color] [COLOR=#2e8b57][b]none[/b][/color]
[COLOR=#2e8b57][b]integer[/b][/color] :: n, i
[COLOR=#2e8b57][b]type[/b][/color](temps), [COLOR=#2e8b57][b]allocatable[/b][/color], [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]intent[/b][/color]([COLOR=#2e8b57][b]in[/b][/color]) :: array
[COLOR=#2e8b57][b]character[/b][/color]([COLOR=#804040][b]*[/b][/color]) :: array_name
[COLOR=#0000ff]! process only if the array is allocated[/color]
[COLOR=#804040][b]if[/b][/color] ([COLOR=#008080]allocated[/color](array)) [COLOR=#804040][b]then[/b][/color]
n [COLOR=#804040][b]=[/b][/color] [COLOR=#008080]size[/color](array)
[COLOR=#804040][b]do[/b][/color] i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]1[/color], n
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) array_name, [COLOR=#ff00ff]'['[/color], i, [COLOR=#ff00ff]'] = '[/color], array(i)
[COLOR=#804040][b]end do[/b][/color]
[COLOR=#804040][b]else[/b][/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Error: Argument Array not allocated !'[/color]
[COLOR=#804040][b]end if[/b][/color]
[COLOR=#a020f0]end subroutine[/color] array2screen
[COLOR=#a020f0]end module[/color] my_temperatures
[COLOR=#a020f0]program[/color] tdata
[COLOR=#a020f0]use[/color] my_temperatures
[COLOR=#2e8b57][b]type[/b][/color](temps), [COLOR=#2e8b57][b]dimension[/b][/color](:), [COLOR=#2e8b57][b]allocatable[/b][/color] :: temperatures_array
[COLOR=#2e8b57][b]integer[/b][/color] :: i
[COLOR=#0000ff]! read data from the input file into an array[/color]
[COLOR=#a020f0]call[/color] file2array([COLOR=#ff00ff]'tdata.txt'[/color], temperatures_array)
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#0000ff]! next line [/color]
[COLOR=#0000ff]! print array to the screen[/color]
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Array of all temperatures: '[/color]
[COLOR=#a020f0]call[/color] array2screen([COLOR=#ff00ff]'temperature'[/color], temperatures_array)
[COLOR=#804040][b]write[/b][/color]([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color])
[COLOR=#0000ff]! Working with components of an array element[/color]
i [COLOR=#804040][b]=[/b][/color] [COLOR=#ff00ff]3[/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Date : '[/color], temperatures_array(i)%dates
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Temperature : '[/color]
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Hi : '[/color], temperatures_array(i)%hi
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Low : '[/color], temperatures_array(i)%lo
[COLOR=#804040][b]write[/b][/color] ([COLOR=#804040][b]*[/b][/color],[COLOR=#804040][b]*[/b][/color]) [COLOR=#ff00ff]'Average: '[/color], temperatures_array(i)%av
[COLOR=#a020f0]end program[/color] tdata