JohnCampbell
Joined: 16 Feb 2006 Posts: 2625 Location: Sydney
|
Posted: Tue Oct 16, 2012 6:49 am Post subject: |
|
|
Norm,
If it still does not work, you could read and write the character string to a file, using a "large buffer library", by opening the file as access=transparent.
You might only need:
open_big (unit, file_name)
close_big (unit)
read_big_string (unit, string)
write_big_string (unit, string)
something like ...
| Code: |
subroutine write_big_string (unit, string)
integer*4 unit, i, iostat
character string*(*)
!
! Write string to transparent file
do i = 1,len_trim(string)
write (unit=unit, iostat=iostat) string(i:i)
end do
!
! Terminate string with <CR> <LF>
write (unit=unit, iostat=iostat) char(13)
write (unit=unit, iostat=iostat) char(10)
write (*,*) i-1,' character string written'
end
subroutine read_big_string (unit, string)
integer*4 unit, i, iostat, bad
character string*(*)
!
! Read string from transparent file
string = ' '
! Expect that string terminated with <CR> <LF>
bad = 0
do i = 1,len(string)
read (unit=unit, iostat=iostat) string(i:i)
if (iostat /= 0) then
bad = bad + 1
exit
end if
if (ichar(string(i:i)) >= 32) cycle
bad = bad + 1
if (ichar(string(i:i)) == 10) exit
string(i:i) = ' '
end do
write (*,*) i-bad,' character string read'
!
end
subroutine open_big_string (unit, file_name)
integer*4 unit, iostat
character file_name*(*)
!
open (unit = unit, &
file = file_name, &
status = 'OLD', &
form = 'UNFORMATTED', &
access = 'TRANSPARENT', &
iostat = iostat)
write (*,2000) 'Opening file ',trim(file_name),' iostat = ',iostat
2000 format (a,a,a,i0)
end
subroutine close_big_string (unit)
integer*4 unit, iostat
!
close (unit = unit, &
iostat = iostat)
write (*,2000) 'Closing file : iostat = ',iostat
2000 format (a,i0)
end |
|
|