Implement note parsing
This commit is contained in:
2
.gitignore
vendored
2
.gitignore
vendored
@@ -1 +1,3 @@
|
||||
data
|
||||
main.log
|
||||
input
|
||||
|
2
db.go
2
db.go
@@ -7,7 +7,7 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"github.com/mattn/go-sqlite3"
|
||||
_ "github.com/mattn/go-sqlite3"
|
||||
)
|
||||
|
||||
type DB struct {
|
||||
|
2
go.mod
2
go.mod
@@ -1,3 +1,5 @@
|
||||
module stinkinator
|
||||
|
||||
go 1.23.2
|
||||
|
||||
require github.com/mattn/go-sqlite3 v1.14.24
|
||||
|
2
go.sum
Normal file
2
go.sum
Normal file
@@ -0,0 +1,2 @@
|
||||
github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM=
|
||||
github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
|
61
main.go
61
main.go
@@ -1,10 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
var Error *log.Logger
|
||||
@@ -28,7 +31,59 @@ func init() {
|
||||
}
|
||||
|
||||
func main() {
|
||||
log.Println("Hello, World!")
|
||||
Warning.Println("Hello, World!")
|
||||
Error.Println("Hello, World!")
|
||||
inputFile := flag.String("if", "input", "Input file")
|
||||
flag.Parse()
|
||||
log.Printf("Input file: %s", *inputFile)
|
||||
|
||||
db := DB{
|
||||
path: "data/db.db",
|
||||
}
|
||||
err := db.Open()
|
||||
if err != nil {
|
||||
Error.Printf("Failed opening database: %v", err)
|
||||
return
|
||||
}
|
||||
defer db.Close()
|
||||
|
||||
inputData, err := os.ReadFile(*inputFile)
|
||||
if err != nil {
|
||||
Error.Printf("Failed reading input file: %v", err)
|
||||
return
|
||||
}
|
||||
note, err := ParseNote(string(inputData))
|
||||
if err != nil {
|
||||
Error.Printf("Failed parsing note: %v", err)
|
||||
return
|
||||
}
|
||||
log.Printf("%#v", note)
|
||||
}
|
||||
|
||||
func ParseNote(data string) (NoteData, error) {
|
||||
res := NoteData{}
|
||||
lines := strings.Split(data, "\n")
|
||||
note := []string{}
|
||||
for _, line := range lines {
|
||||
line = strings.TrimSpace(line)
|
||||
if line == "" {
|
||||
continue
|
||||
}
|
||||
parts := strings.Split(line, ":")
|
||||
log.Printf("%#v", parts)
|
||||
switch parts[0] {
|
||||
case "p":
|
||||
res.Player = parts[1]
|
||||
case "d":
|
||||
var err error
|
||||
res.Date, err = time.Parse(time.DateOnly, parts[1])
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed to parse date: %v", err)
|
||||
}
|
||||
case "g":
|
||||
res.Guild = parts[1]
|
||||
default:
|
||||
note = append(note, line)
|
||||
}
|
||||
}
|
||||
res.Note = strings.Join(note, "\n")
|
||||
return res, nil
|
||||
}
|
30
types.go
Normal file
30
types.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package main
|
||||
|
||||
import "time"
|
||||
|
||||
type (
|
||||
Guild struct {
|
||||
ID int
|
||||
Name string
|
||||
}
|
||||
|
||||
Stinky struct {
|
||||
ID int
|
||||
Name string
|
||||
Guild Guild
|
||||
}
|
||||
|
||||
Note struct {
|
||||
ID int
|
||||
Content string
|
||||
Timestamp time.Time
|
||||
Stinky Stinky
|
||||
}
|
||||
)
|
||||
|
||||
type NoteData struct {
|
||||
Player string
|
||||
Date time.Time
|
||||
Guild string
|
||||
Note string
|
||||
}
|
Reference in New Issue
Block a user