Answer the question
In order to leave comments, you need to log in
How to implement correctly on GO the functionality of tracking changes in a file?
The idea is to read the file
after changes, transfer these changes to another function
func MusicFile() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal(err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
fmt.Println("start")
for {
select {
case event := <-watcher.Events:
if event.Op&fsnotify.Write == fsnotify.Write {
Parser.ParseMusicFile() -- Вызываю функцию парсинга если в канал записались данные о том что файл перезаписан
}
case err := <-watcher.Errors:
fmt.Println("error:", err)
}
}
}()
err = watcher.Add(Parser.ParsConfig().Directory)
if err != nil {
log.Fatal(err)
}
<-done
}
func ParseMusicFile() *MusicFile {
reSong := regexp.MustCompile(`(?m)(^[^|]+(?:|))`)
reArtist := regexp.MustCompile(`(?m)\|(.*)`)
file, err := os.Open(ParsConfig().Directory)
if err != nil {
panic(err)
}
defer file.Close()
MusicFile := &MusicFile{}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if reSong.MatchString(scanner.Text()) { // Тут записывается результат найдено значение по регулярке или нет
//*MusicFile.Song := reSong.MatchString(scanner.Text())
MusicFile.Song = reSong.FindStringSubmatch(scanner.Text())[1]
}else {
MusicFile.Song = "null"
}
if reArtist.MatchString(scanner.Text()) { //Тут записывается результат найдено значение по регулярке или нет
MusicFile.Artist = reArtist.FindStringSubmatch(scanner.Text())[1]
}else {
MusicFile.Artist = "null"
}
}
return MusicFile
}
Парсер возвращает структуру
type MusicFile struct {
Artist string
Song string
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question