Skip to content

Commit 6936949

Browse files
author
Philipp Benner
committed
2017/12/28-22:56:20 (Linux sirius unknown)
1 parent f49a1ab commit 6936949

File tree

2 files changed

+45
-28
lines changed

2 files changed

+45
-28
lines changed

stringset.go

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,11 @@ package gonetics
1818

1919
/* -------------------------------------------------------------------------- */
2020

21+
import "fmt"
2122
import "bufio"
2223
import "bytes"
2324
import "compress/gzip"
24-
import "fmt"
25+
import "io"
2526
import "os"
2627
import "strings"
2728
import "unicode"
@@ -95,27 +96,9 @@ func (s StringSet) Scan(query []byte) GRanges {
9596

9697
/* -------------------------------------------------------------------------- */
9798

98-
func (s StringSet) ReadFasta(filename string) error {
99-
100-
var scanner *bufio.Scanner
101-
// open file
102-
f, err := os.Open(filename)
103-
if err != nil {
104-
return err
105-
}
106-
defer f.Close()
99+
func (s StringSet) ReadFasta(reader io.Reader) error {
100+
scanner := bufio.NewScanner(reader)
107101

108-
// check if file is gzipped
109-
if isGzip(filename) {
110-
g, err := gzip.NewReader(f)
111-
if err != nil {
112-
return err
113-
}
114-
defer g.Close()
115-
scanner = bufio.NewScanner(g)
116-
} else {
117-
scanner = bufio.NewScanner(f)
118-
}
119102
// current sequence
120103
name := ""
121104
seq := []byte{}
@@ -154,23 +137,57 @@ func (s StringSet) ReadFasta(filename string) error {
154137
return nil
155138
}
156139

157-
func (s StringSet) WriteFasta(filename string, compress bool) error {
158-
var buffer bytes.Buffer
140+
func (s StringSet) ImportFasta(filename string) error {
141+
142+
var reader io.Reader
143+
// open file
144+
f, err := os.Open(filename)
145+
if err != nil {
146+
return err
147+
}
148+
defer f.Close()
159149

160-
w := bufio.NewWriter(&buffer)
150+
// check if file is gzipped
151+
if isGzip(filename) {
152+
g, err := gzip.NewReader(f)
153+
if err != nil {
154+
return err
155+
}
156+
defer g.Close()
157+
reader = g
158+
} else {
159+
reader = f
160+
}
161+
return s.ReadFasta(reader)
162+
}
161163

164+
func (s StringSet) WriteFasta(writer io.Writer) error {
162165
for name, seq := range s {
163-
fmt.Fprintf(w, ">%s\n", name)
166+
if _, err := fmt.Fprintf(writer, ">%s\n", name); err != nil {
167+
return err
168+
}
164169
for i := 0; i < len(seq); i += 80 {
165170
from := i
166171
to := i+80
167172
if to >= len(seq) {
168173
to = len(seq)
169174
}
170-
fmt.Fprintf(w, "%s\n", seq[from:to])
175+
if _, err := fmt.Fprintf(writer, "%s\n", seq[from:to]); err != nil {
176+
return err
177+
}
171178
}
172179
}
180+
return nil
181+
}
182+
183+
func (s StringSet) ExportFasta(filename string, compress bool) error {
184+
var buffer bytes.Buffer
185+
186+
writer := bufio.NewWriter(&buffer)
187+
if err := s.WriteFasta(writer); err != nil {
188+
return err
189+
}
190+
writer.Flush()
173191

174-
w.Flush()
175192
return writeFile(filename, &buffer, compress)
176193
}

stringset_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import "testing"
2626
func TestStringSet1(t *testing.T) {
2727

2828
ss := EmptyStringSet()
29-
err := ss.ReadFasta("stringset_test.fa")
29+
err := ss.ImportFasta("stringset_test.fa")
3030

3131
if err != nil {
3232
t.Error("TestStringSet1 failed")

0 commit comments

Comments
 (0)