Как прочитать файл, начиная с определенного номера строки, используя сканер?
Я новичок в Go и пытаюсь написать простой скрипт, который читает файл построчно. Я также хочу сохранить прогресс (т. Е. Номер последней строки, который был прочитан) в файловой системе где-нибудь, чтобы, если тот же файл был передан в качестве входных данных для скрипта, он начал читать файл со строки, где он остановился. Вот с чего я начал.
package main
// Package Imports
import (
"bufio"
"flag"
"fmt"
"log"
"os"
)
// Variable Declaration
var (
ConfigFile = flag.String("configfile", "../config.json", "Path to json configuration file.")
)
// The main function that reads the file and parses the log entries
func main() {
flag.Parse()
settings := NewConfig(*ConfigFile)
inputFile, err := os.Open(settings.Source)
if err != nil {
log.Fatal(err)
}
defer inputFile.Close()
scanner := bufio.NewScanner(inputFile)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
// Saves the current progress
func SaveProgress() {
}
// Get the line count from the progress to make sure
func GetCounter() {
}
Я не смог найти m, ethods, которые имеют дело с номерами строк в пакете сканера. Я знаю, что могу объявить целое число сказатьcounter := 0
и увеличивать его каждый раз, когда строка читается какcounter++
, Но в следующий раз, как мне сказать, чтобы сканер запускался с определенной строки? Так, например, если я читаю до строки30
при следующем запуске сценария с тем же входным файлом, как я могу сделать сканер, чтобы начать чтение из строки31
?
Одно из решений, которое я могу придумать, состоит в том, чтобы использовать счетчик, как я говорил выше, и использовать условие if, подобное следующему.
scanner := bufio.NewScanner(inputFile)
for scanner.Scan() {
if counter > progress {
fmt.Println(scanner.Text())
}
}
Я почти уверен, что что-то подобное сработает, но оно все еще будет повторять строки, которые мы уже прочитали. Пожалуйста, предложите лучший способ.