Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
40
Task/FASTA-format/OCaml/fasta-format.ocaml
Normal file
40
Task/FASTA-format/OCaml/fasta-format.ocaml
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
(* This program reads from the standard input and writes to standard output.
|
||||
* Examples of use:
|
||||
* $ ocaml fasta.ml < fasta_file.txt
|
||||
* $ ocaml fasta.ml < fasta_file.txt > my_result.txt
|
||||
*
|
||||
* The FASTA file is assumed to have a specific format, where the first line
|
||||
* contains a label in the form of '>blablabla', i.e. with a '>' as the first
|
||||
* character.
|
||||
*)
|
||||
|
||||
let labelstart = '>'
|
||||
|
||||
let is_label s = s.[0] = labelstart
|
||||
let get_label s = String.sub s 1 (String.length s - 1)
|
||||
|
||||
let read_in channel = input_line channel |> String.trim
|
||||
|
||||
let print_fasta chan =
|
||||
let rec doloop currlabel line =
|
||||
if is_label line then begin
|
||||
if currlabel <> "" then print_newline ();
|
||||
let newlabel = get_label line in
|
||||
print_string (newlabel ^ ": ");
|
||||
doloop newlabel (read_in chan)
|
||||
end
|
||||
else begin
|
||||
print_string line;
|
||||
doloop currlabel (read_in chan)
|
||||
end
|
||||
in
|
||||
try
|
||||
match read_in chan with
|
||||
| line when is_label line -> doloop "" line
|
||||
| _ -> failwith "Badly formatted FASTA file?"
|
||||
with
|
||||
End_of_file -> print_newline ()
|
||||
|
||||
|
||||
let () =
|
||||
print_fasta stdin
|
||||
Loading…
Add table
Add a link
Reference in a new issue