Line | |
---|
1 | #include "muscle.h" |
---|
2 | #include <stdio.h> |
---|
3 | #include <ctype.h> |
---|
4 | #include "msa.h" |
---|
5 | #include "textfile.h" |
---|
6 | |
---|
7 | const unsigned FASTA_BLOCK = 60; |
---|
8 | |
---|
9 | void MSA::FromFASTAFile(TextFile &File) |
---|
10 | { |
---|
11 | Clear(); |
---|
12 | |
---|
13 | FILE *f = File.GetStdioFile(); |
---|
14 | |
---|
15 | unsigned uSeqCount = 0; |
---|
16 | unsigned uColCount = uInsane; |
---|
17 | for (;;) |
---|
18 | { |
---|
19 | char *Label; |
---|
20 | unsigned uSeqLength; |
---|
21 | char *SeqData = GetFastaSeq(f, &uSeqLength, &Label, false); |
---|
22 | if (0 == SeqData) |
---|
23 | break; |
---|
24 | AppendSeq(SeqData, uSeqLength, Label); |
---|
25 | } |
---|
26 | } |
---|
27 | |
---|
28 | void MSA::ToFASTAFile(TextFile &File) const |
---|
29 | { |
---|
30 | const unsigned uColCount = GetColCount(); |
---|
31 | assert(uColCount > 0); |
---|
32 | const unsigned uLinesPerSeq = (GetColCount() - 1)/FASTA_BLOCK + 1; |
---|
33 | const unsigned uSeqCount = GetSeqCount(); |
---|
34 | |
---|
35 | for (unsigned uSeqIndex = 0; uSeqIndex < uSeqCount; ++uSeqIndex) |
---|
36 | { |
---|
37 | File.PutString(">"); |
---|
38 | File.PutString(GetSeqName(uSeqIndex)); |
---|
39 | File.PutString("\n"); |
---|
40 | |
---|
41 | unsigned n = 0; |
---|
42 | for (unsigned uLine = 0; uLine < uLinesPerSeq; ++uLine) |
---|
43 | { |
---|
44 | unsigned uLetters = uColCount - uLine*FASTA_BLOCK; |
---|
45 | if (uLetters > FASTA_BLOCK) |
---|
46 | uLetters = FASTA_BLOCK; |
---|
47 | for (unsigned i = 0; i < uLetters; ++i) |
---|
48 | { |
---|
49 | char c = GetChar(uSeqIndex, n); |
---|
50 | File.PutChar(c); |
---|
51 | ++n; |
---|
52 | } |
---|
53 | File.PutChar('\n'); |
---|
54 | } |
---|
55 | } |
---|
56 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.