@@ -18,10 +18,11 @@ package gonetics
18
18
19
19
/* -------------------------------------------------------------------------- */
20
20
21
+ import "fmt"
21
22
import "bufio"
22
23
import "bytes"
23
24
import "compress/gzip"
24
- import "fmt "
25
+ import "io "
25
26
import "os"
26
27
import "strings"
27
28
import "unicode"
@@ -95,27 +96,9 @@ func (s StringSet) Scan(query []byte) GRanges {
95
96
96
97
/* -------------------------------------------------------------------------- */
97
98
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 )
107
101
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
- }
119
102
// current sequence
120
103
name := ""
121
104
seq := []byte {}
@@ -154,23 +137,57 @@ func (s StringSet) ReadFasta(filename string) error {
154
137
return nil
155
138
}
156
139
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 ()
159
149
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
+ }
161
163
164
+ func (s StringSet ) WriteFasta (writer io.Writer ) error {
162
165
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
+ }
164
169
for i := 0 ; i < len (seq ); i += 80 {
165
170
from := i
166
171
to := i + 80
167
172
if to >= len (seq ) {
168
173
to = len (seq )
169
174
}
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
+ }
171
178
}
172
179
}
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 ()
173
191
174
- w .Flush ()
175
192
return writeFile (filename , & buffer , compress )
176
193
}
0 commit comments