Repository navigation
Expand file tree
/
Copy pathseqext.c
More file actions
87 lines (79 loc) · 2.69 KB
/
Copy pathseqext.c
File metadata and controls
87 lines (79 loc) · 2.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#define __EXTENSIONS__
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <regex.h>
#include <unistd.h>
#include <string.h>
#include <zlib.h>
#include "gbfp.h"
void help(void) {
printf("Convert GenBank sequence into FASTA sequence.\n"
"\n"
"Usage: seqext [-h] [-V] [-f Feature_to_extract (default: gene)] [-q Qualifier_to_print] [-i Genbank_file]\n"
"\n"
"-V print version information and exit\n");
}
int main(int argc, char *argv[]) {
char *sFileName = NULL;
char *sFeature = "gene";
char *sQualifier = NULL;
gb_data **pptSeqData, *ptSeqData;
gb_feature *ptFeature;
gb_qualifier *ptQualifier;
unsigned int iOpt;
unsigned int i, j, k;
while((iOpt = getopt(argc, argv, "f:i:q:h")) != -1) {
switch(iOpt) {
case 'h':
help();
exit(0);
break;
case 'i':
sFileName = optarg;
break;
case 'f':
sFeature = optarg;
break;
case 'q':
sQualifier = optarg;
break;
default:
help();
exit(0);
}
}
pptSeqData = parseGBFF(sFileName);
if (pptSeqData != NULL) {
for (i = 0; (ptSeqData = *(pptSeqData + i)) != NULL; i++) {
/* printf("%s\n", (ptSeqData->ptReferences)->sAuthors); */
for (j = 0; j < ptSeqData->iFeatureNum; j++) {
ptFeature = (ptSeqData->ptFeatures + j);
if (strcmp(sFeature, ptFeature->sFeature) == 0) {
if (sQualifier == NULL) {
printf(">%s_%li_%li\n", \
ptFeature->sFeature, \
ptFeature->lStart, \
ptFeature->lEnd);
printf("%s\n", getSequence(ptSeqData->sSequence, ptFeature));
} else {
for (k = 0; k < ptFeature->iQualifierNum; k++) {
ptQualifier = (ptFeature->ptQualifier + k);
if (strcmp(sQualifier, ptQualifier->sQualifier) == 0) {
printf(">%s_%li_%li %s\n", \
ptFeature->sFeature, \
ptFeature->lStart, \
ptFeature->lEnd, \
ptQualifier->sValue);
printf("%s\n", getSequence(ptSeqData->sSequence, ptFeature));
break;
}
}
}
}
}
}
freeGBData(pptSeqData);
}
return 0;
}