get suitable scanner(compressed or not)
(fn string)
| 741 | |
| 742 | // get suitable scanner(compressed or not) |
| 743 | func getFileScanner(fn string) (*bufio.Scanner, error) { |
| 744 | info, err := os.Stat(fn) |
| 745 | if err != nil { |
| 746 | return nil, err |
| 747 | } |
| 748 | //check if fn is a directory |
| 749 | if info.IsDir() { |
| 750 | return nil, errors.New(fn + " is a directory") |
| 751 | } |
| 752 | |
| 753 | file, err := os.Open(fn) |
| 754 | if err != nil { |
| 755 | return nil, err |
| 756 | } |
| 757 | |
| 758 | var scanner *bufio.Scanner |
| 759 | //if input is a gzip file |
| 760 | if strings.HasSuffix(fn, ".gz") { |
| 761 | gzCont, err := gzip.NewReader(file) |
| 762 | if err != nil { |
| 763 | return nil, err |
| 764 | } |
| 765 | scanner = bufio.NewScanner(gzCont) |
| 766 | } else { |
| 767 | scanner = bufio.NewScanner(file) |
| 768 | } |
| 769 | |
| 770 | //increase buffer size for large files and long lines |
| 771 | //default is 64KB, we set to 1MB for better performance |
| 772 | const maxScanTokenSize = 1024 * 1024 |
| 773 | buf := make([]byte, maxScanTokenSize) |
| 774 | scanner.Buffer(buf, maxScanTokenSize) |
| 775 | |
| 776 | return scanner, nil |
| 777 | } |
| 778 | |
| 779 | // check columns that should be displayed |
| 780 | func getVisCol(showNumL, hideNumL []int, colLen int) ([]int, error) { |
no outgoing calls
no test coverage detected