Correctly handle empty files

Former-commit-id: d166aa352ce4bf32739ddc2f7d1c9967918822fd
This commit is contained in:
2023-10-16 15:34:06 +02:00
parent e8c55a2b6b
commit 6a6a6f6f2c
4 changed files with 19 additions and 35 deletions

View File

@ -4,13 +4,10 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"io" "io"
"os"
"path" "path"
"strconv" "strconv"
"strings" "strings"
gzip "github.com/klauspost/pgzip"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter"
@ -276,23 +273,21 @@ func ReadEMBL(reader io.Reader, options ...WithOption) obiiter.IBioSequence {
func ReadEMBLFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) { func ReadEMBLFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) {
var reader io.Reader var reader io.Reader
var greader io.Reader
var err error var err error
options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename))))) options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename)))))
reader, err = os.Open(filename) reader, err = Ropen(filename)
if err == ErrNoContent {
log.Infof("file %s is empty", filename)
return ReadEmptyFile(options...)
}
if err != nil { if err != nil {
log.Printf("open file error: %+v", err) log.Printf("open file error: %+v", err)
return obiiter.NilIBioSequence, err return obiiter.NilIBioSequence, err
} }
// Test if the flux is compressed by gzip
//greader, err = gzip.NewReader(reader)
greader, err = gzip.NewReaderN(reader, 1<<24, 2)
if err == nil {
reader = greader
}
return ReadEMBL(reader, options...), nil return ReadEMBL(reader, options...), nil
} }

View File

@ -114,19 +114,8 @@ func FastaChunkReader(r io.Reader, size int, cutHead bool) (chan FastxChunk, err
end := []byte{} end := []byte{}
for err == nil && n > 0 { for err == nil && n > 0 {
// fmt.Println("============end=========================")
// fmt.Println(string(end))
// fmt.Println("------------buff------------------------")
// fmt.Println(string(buff))
buff = Concatenate(end, buff) buff = Concatenate(end, buff)
// fmt.Println("------------buff--pasted----------------")
// fmt.Println(string(buff))
buff, end = lastFastaCut(buff) buff, end = lastFastaCut(buff)
// fmt.Println("----------------buff--cutted------------")
// fmt.Println(string(buff))
// fmt.Println("------------------end-------------------")
// fmt.Println(string(end))
// fmt.Println("========================================")
if len(buff) > 0 { if len(buff) > 0 {
out <- FastxChunk{ out <- FastxChunk{
Bytes: bytes.Clone(buff), Bytes: bytes.Clone(buff),

View File

@ -4,14 +4,11 @@ import (
"bufio" "bufio"
"bytes" "bytes"
"io" "io"
"os"
"path" "path"
"regexp" "regexp"
"strconv" "strconv"
"strings" "strings"
gzip "github.com/klauspost/pgzip"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter"
@ -173,23 +170,21 @@ func ReadGenbank(reader io.Reader, options ...WithOption) obiiter.IBioSequence {
func ReadGenbankFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) { func ReadGenbankFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) {
var reader io.Reader var reader io.Reader
var greader io.Reader
var err error var err error
options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename))))) options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename)))))
reader, err = os.Open(filename) reader, err = Ropen(filename)
if err == ErrNoContent {
log.Infof("file %s is empty", filename)
return ReadEmptyFile(options...)
}
if err != nil { if err != nil {
log.Printf("open file error: %+v", err) log.Printf("open file error: %+v", err)
return obiiter.NilIBioSequence, err return obiiter.NilIBioSequence, err
} }
// Test if the flux is compressed by gzip
//greader, err = gzip.NewReader(reader)
greader, err = gzip.NewReaderN(reader, 1<<24, 2)
if err == nil {
reader = greader
}
return ReadGenbank(reader, options...), nil return ReadGenbank(reader, options...), nil
} }

View File

@ -148,6 +148,11 @@ func ReadSequencesFromFile(filename string,
file, err = Ropen(filename) file, err = Ropen(filename)
if err == ErrNoContent {
log.Infof("file %s is empty", filename)
return ReadEmptyFile(options...)
}
if err != nil { if err != nil {
log.Fatalf("open file error: %v", err) log.Fatalf("open file error: %v", err)
return obiiter.NilIBioSequence, err return obiiter.NilIBioSequence, err