-void print_fastq_entry(FILE* fout, seq_t* seq)
-{
- fprintf(fout, "@%s\n%s\n+%s\n%s\n",
- seq->id1.s,
- seq->seq.s,
- seq->id2.s,
- seq->qual.s );
-}
-
-
void fastq_grep(FILE* fin, FILE* fout, pcre* re)
{
int rc;
if ((invert_flag && rc == PCRE_ERROR_NOMATCH) || rc >= 0) {
if (count_flag) count++;
- else print_fastq_entry(fout, seq);
+ else fastq_print(fout, seq);
}
}
/* read id1 */
else if (f->state == STATE_ID1) {
- if (*f->c == '@') {
+ if (*f->c == '@' || *f->c == '>') {
f->c++;
fastq_get_line(f, &seq->id1);
if (f->state == STATE_EOF) return 0;
f->state = STATE_SEQ;
}
else {
- fprintf(stderr, "Malformed FASTQ file: expecting an '@', saw a '%c'\n", *f->c);
+ fprintf(stderr,
+ "Malformed FASTQ file: expecting an '@' or '>', saw a '%c'\n",
+ *f->c);
exit(1);
}
}
f->state = STATE_QUAL;
}
else {
- fprintf(stderr, "Malformed FASTQ file: expecting an '+', saw a '%c'\n", *f->c);
- exit(1);
+ /* fasta style entry */
+ seq->id2.s[0] = '\0';
+ seq->qual.s[0] = '\0';
+
+ f->state = STATE_ID1;
+ break;
}
}
}
+void fastq_print(FILE* fout, seq_t* seq)
+{
+ /* FASTQ */
+ if (seq->qual.n > 0) {
+ fprintf(fout, "@%s\n%s\n+%s\n%s\n",
+ seq->id1.s,
+ seq->seq.s,
+ seq->id2.s,
+ seq->qual.s );
+ }
+
+ /* FASTA */
+ else {
+ fprintf(fout, ">%s\n%s\n",
+ seq->id1.s,
+ seq->seq.s );
+ }
+}
+
+
void fastq_close(fastq_t*);
int fastq_next(fastq_t*, seq_t*);
+void fastq_print(FILE* fout, seq_t* seq);
+
+
#endif