CSV for lotr-lcg-set-generator

This commit is contained in:
Christian Nieves
2023-07-18 00:38:41 -05:00
parent ae55110082
commit 35f48a157e
6 changed files with 116 additions and 36 deletions

View File

@ -1,15 +1,19 @@
package main
import (
"encoding/csv"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"regexp"
"strconv"
"strings"
"github.com/bazelbuild/rules_go/go/tools/bazel"
"github.com/davecgh/go-spew/spew"
strip "github.com/grokify/html-strip-tags-go"
"github.com/squk/lotr/cmd/beornextract/types"
)
@ -32,19 +36,81 @@ func main() {
}
// Open our jsonFile
// jsonFile, err := os.Open("cmd/beornextract/data/Bot.Cards.json")
jsonFile, err := bazel.Runfile("cmd/beornextract/data/Bot.Cards.json")
jsonFile, err := os.Open("cmd/beornextract/data/Bot.Cards.json")
// jsonFile, err := bazel.Runfile("cmd/beornextract/data/Bot.Cards.json")
// if we os.Open returns an error then handle it
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Successfully Opened users.json")
// defer the closing of our jsonFile so that we can parse it later on
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
c := []types.HallOfBeornCard{}
json.Unmarshal(byteValue, &c)
spew.Dump(c)
cards := []types.HallOfBeornCard{}
json.Unmarshal(byteValue, &cards)
// Open a file for writing
csvFile, err := os.Create("/Users/christian/Downloads/lotr-lcg-set-generator.csv")
defer csvFile.Close()
if err != nil {
// Handle error
}
// Create a writer
w := csv.NewWriter(csvFile)
// Write some rows
for _, card := range cards {
if card.EncounterSet != "" {
continue // skip non=player cards
}
w.Write(
[]string{
card.Octgnid,
"", // hidden
"", // hidden
card.EncounterSet,
strconv.Itoa(card.Position),
strconv.Itoa(card.Quantity),
card.Name,
fmt.Sprintf(
"%t",
card.IsUnique,
),
card.TypeName,
card.SphereName,
card.Traits,
extractKeywords(card.Text),
card.Cost,
card.EngagementCost,
strconv.Itoa(card.Threat),
strconv.Itoa(card.Willpower),
strconv.Itoa(card.Attack),
strconv.Itoa(card.Defense),
strconv.Itoa(card.Health),
"", // Quest Points
"", // Victory Points
"", // Special Icon
transformText(card.Name, card.Text),
card.Flavor,
},
)
}
// Close the writer
w.Flush()
// spew.Dump(c)
}
func transformText(name, text string) string {
return strip.StripTags(
strings.ReplaceAll(text, name, "[name]"), // insert name tag
)
}
func extractKeywords(text string) string {
pattern := regexp.MustCompile(`((?:(?:[A-Z][a-z]+(\.|\s[0-9]+\.)\s)+))`)
return strings.TrimSpace(pattern.FindString(text))
}