This repository has been archived on 2025-03-03. You can view files and clone it, but cannot push or open issues or pull requests.
chronozinc/parsing/parser.go
2016-12-05 16:35:06 +01:00

74 lines
1.8 KiB
Go

package parsing
import (
"encoding/csv"
"fmt"
"io/ioutil"
"log"
"os"
"github.com/jjdekker/chronozinc/settings"
"github.com/spf13/viper"
)
func ParseAll(solvers []settings.Solver, instances []settings.Instance) {
params := viper.GetStringSlice("parameters")
if len(params) > 0 {
f, err := os.Create(viper.GetString("output"))
if err != nil {
log.Panicf("Unable to create file %s", viper.GetString("output"))
}
defer f.Close()
w := csv.NewWriter(f)
defer w.Flush()
headers := append(persistantHeaders(), params...)
w.Write(headers)
for i := range solvers {
for j := range instances {
record := make([]string, 0, len(headers))
record = append(record,
[]string{solvers[i].Name, instances[j].Model}...)
if instances[j].Data != "" {
record = append(record, instances[j].Data)
}
for k := range params {
record = append(record,
ParseParameter(&solvers[i], &instances[j], params[k]))
}
w.Write(record)
}
}
}
}
func persistantHeaders() []string {
headers := []string{"solver", "model"}
if len(viper.GetStringSlice("data")) > 0 {
headers = append(headers, "data")
}
return headers
}
func ParseParameter(solver *settings.Solver, instance *settings.Instance,
parameter string) string {
fmt.Println(solver.Matchers)
var res string
if f, err := ioutil.ReadFile(instance.OutPath(solver.Name)); err != nil {
log.Printf("Unable to open file %s", instance.OutPath(solver.Name))
} else {
switch {
case (solver.Extractors[parameter] != nil):
res = Extract(f, solver.Extractors[parameter])
case (solver.LastExtractors[parameter] != nil):
res = ExtractLast(f, solver.LastExtractors[parameter])
case (solver.Matchers[parameter] != nil):
fmt.Println("do you see me?")
res = Match(f, solver.Matchers[parameter])
}
}
return res
}