87 lines
1.6 KiB
Go
87 lines
1.6 KiB
Go
![]() |
package io
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
func FileToStringArray(filename string) ([]string, error) {
|
||
|
file, err := os.Open(filename)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
defer file.Close()
|
||
|
|
||
|
scanner := bufio.NewScanner(file)
|
||
|
scanner.Split(bufio.ScanLines)
|
||
|
|
||
|
var fileLines []string
|
||
|
|
||
|
for scanner.Scan() {
|
||
|
fileLines = append(fileLines, scanner.Text())
|
||
|
}
|
||
|
if err := scanner.Err(); err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
file.Close()
|
||
|
|
||
|
return fileLines, nil
|
||
|
}
|
||
|
|
||
|
func WriteStringsToFile(content []string, filepath string) error {
|
||
|
file, err := os.Create(filepath)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
w := bufio.NewWriter(file)
|
||
|
|
||
|
for _, line := range content {
|
||
|
_, err = fmt.Fprintln(w, line)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err = w.Flush(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
if err = file.Close(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
// ParseFasta parses a .fasta formatted file returning a list of labels and a list of
|
||
|
// content in separate string arrays.
|
||
|
func ParseFasta(filename string) ([]string, []string, error) {
|
||
|
lines, err := FileToStringArray(filename)
|
||
|
if err != nil {
|
||
|
return nil, nil, err
|
||
|
}
|
||
|
|
||
|
var labels []string
|
||
|
var content []string
|
||
|
var currString []string
|
||
|
for _, line := range lines {
|
||
|
if line[0] == '>' {
|
||
|
labels = append(labels, line)
|
||
|
if len(currString) > 0 {
|
||
|
content = append(content, strings.Join(currString, ""))
|
||
|
currString = []string{}
|
||
|
}
|
||
|
continue
|
||
|
}
|
||
|
currString = append(currString, line)
|
||
|
}
|
||
|
if len(currString) > 0 {
|
||
|
content = append(content, strings.Join(currString, ""))
|
||
|
}
|
||
|
|
||
|
return labels, content, nil
|
||
|
}
|