50 lines
		
	
	
		
			721 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			721 B
		
	
	
	
		
			Prolog
		
	
	
	
	
	
| %
 | |
| % Preliminary support for FASTA format.
 | |
| % Just convert sequence into string of atoms.
 | |
| %
 | |
| % support for a single sequence.
 | |
| %
 | |
| 
 | |
| :- module(fasta,
 | |
| 		[fa2atoms/2,
 | |
| 		 fa2atoms/3
 | |
| 		]).
 | |
| 
 | |
| fa2atoms(F, L) :-
 | |
| 	fa2atoms(F, L, []).
 | |
| 
 | |
| fa2atoms(F,L,L0) :-
 | |
| 	open(F,read,S),
 | |
| 	get0(S,C0),
 | |
| 	skip_header(C0,S),
 | |
| 	get0(S,C),
 | |
| 	read_chars(C, S, L, L0),
 | |
| 	close(S).
 | |
| 
 | |
| read_chars(-1,_) --> [].
 | |
| read_chars(10,S) --> !,
 | |
| 	{ get0(S,MC) },
 | |
| 	read_chars(MC,S).
 | |
| read_chars(C,S) -->
 | |
| 	[AC],
 | |
| 	{
 | |
| 	  cvt_c(C,AC),
 | |
| 	  get0(S,MC)
 | |
| 	},
 | |
| 	read_chars(MC, S).
 | |
| 
 | |
| cvt_c(C,A) :-
 | |
| 	C >= 0'A, C =< 0'Z, !,
 | |
| 	AC is C-(0'A-0'a),
 | |
| 	atom_codes(A,[AC]).
 | |
| cvt_c(C,A) :-
 | |
| 	C >= 0'a, C =< 0'z,
 | |
| 	atom_codes(A,[C]).
 | |
| 
 | |
| skip_header(10,_) :- !.
 | |
| skip_header(_,S) :-
 | |
| 	get0(S,C),
 | |
| 	skip_header(C,S).
 | |
| 
 | |
| 
 |