consolidated go and scala repos into this repo as well
This commit is contained in:
86
go/pkg/io/file_tools.go
Normal file
86
go/pkg/io/file_tools.go
Normal file
@@ -0,0 +1,86 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user