Data update
This commit is contained in:
parent
4bb20c9b71
commit
cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions
54
Task/FASTA-format/Fortran/fasta-format.f
Normal file
54
Task/FASTA-format/Fortran/fasta-format.f
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
! FASTA format
|
||||
! tested with Intel ifx (IFX) 2025.2.1 20250806 on Kubuntu 25.10
|
||||
! GNU Fortran (Ubuntu 15.2.0-4ubuntu4) 15.2.0 on Kubuntu 25.10
|
||||
! VSI Fortran x86-64 V8.6-001 on OpenVMS x86_64 V9.2-3
|
||||
! No Non-standard features used, should compile on any fairly recent Fortran.
|
||||
! U.B., January 2026
|
||||
!==============================================================================
|
||||
program fasta
|
||||
|
||||
integer, parameter :: maxlineLength=200 ! Assume no input line is longer than this.
|
||||
! Wikipedia article on FASTA: typically no more than 80
|
||||
character (len=maxlineLength) :: inLine ! Line to read
|
||||
integer :: l ! Length of read line
|
||||
logical :: first=.true.
|
||||
|
||||
! going to read from a text file named "fasta.txt", located in the current working directory.
|
||||
open(unit=10, file='fasta.txt', status='old', action='read', iostat=io_stat)
|
||||
if (io_stat /= 0) then
|
||||
print *, "Error opening file"
|
||||
stop
|
||||
end if
|
||||
|
||||
!-- Start the main I/O loop.
|
||||
!-- For simplicity, handle only lines starting with ">" as these introduce new sequences.
|
||||
!-- Any other lines are simply written to output without interpretation or checks.
|
||||
!
|
||||
do ! Loop ends at ERROR or EOF
|
||||
read (10,'(A)', iostat=io_stat) inLine ! not Q format, so its ok for both intel and GNU
|
||||
l = len_trim (inLine) ! use this instead of Q format
|
||||
if (io_stat < 0) exit ! EOF: Normal end of this loop
|
||||
if (io_stat > 0) then
|
||||
print *, "Read error" ! ERROR: never seen this error condition
|
||||
exit
|
||||
end if
|
||||
if (inLine (1:1) .eq. '>') then ! New sequence begins here
|
||||
if (first) then ! First sequence: DO not terminate previous output, there is none.
|
||||
first = .false.
|
||||
write (*,'(1x,A, ": ")', advance='no') inLine (:l) ! Without terminating previous line
|
||||
else ! Second or later: terminate previous output line
|
||||
write (*,'(/,1x,A, ": ")', advance='no')inLine (:l)
|
||||
endif
|
||||
else if (first) then
|
||||
! It is required that the 1st character of the very first line is a '>', anything else
|
||||
! would be an error here.
|
||||
print *, 'ERROR: 1st char is not >'
|
||||
stop
|
||||
else
|
||||
! Within the sequence: Append to current line
|
||||
write (*,'(A)', advance='no') inLine (:l)
|
||||
end if
|
||||
end do
|
||||
|
||||
write (*,*) ! Terminate last line
|
||||
end program fasta
|
||||
Loading…
Add table
Add a link
Reference in a new issue