package main import ( "encoding/csv" "errors" "fmt" "log" "os" "time" "internal/replace" ) func main() { run, err := getArgs() if err != nil { log.Fatal(err) return } corpusBytes, err := os.ReadFile("./csv/corpus.csv") if err != nil { log.Fatal(err) return } // Read the CSV file containing replacement key-value pairs pairsHandle, err := os.Open("./csv/pairs.csv") if err != nil { fmt.Println("Error opening pairs:", err) return } defer pairsHandle.Close() replacements, err := csv.NewReader(pairsHandle).ReadAll() if err != nil { fmt.Println("Error reading pairs:", err) return } corpus := string(corpusBytes) var pairs []string var replaced string var startTime time.Time var elapsedTime time.Duration for _, algo := range run { switch algo { case "cw": // Prepare cw := replace.NewCommentzWalter() for _, record := range replacements { cw.AddPattern(record[0], record[1]) } cw.BuildMatchingMachine() // Replace startTime = time.Now() replaced = cw.CommentzWalterReplace(corpus) elapsedTime = time.Since(startTime) case "bm": // Prepare... for _, record := range replacements { pairs = append(pairs, record[0], record[1]) } // Replace startTime = time.Now() replaced = replace.BoyerMooreReplace(corpus, pairs) elapsedTime = time.Since(startTime) } fmt.Printf("\n%s: %s\n", algo, elapsedTime) } // Write replaced text to a file outputHandle, err := os.OpenFile("./csv/replaced.csv", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0755) if err != nil { fmt.Println("Error creating output file:", err) return } defer outputHandle.Close() // Write replaced text to the file _, err = outputHandle.WriteString(replaced) if err != nil { fmt.Println("Error writing to file:", err) return } } func getArgs() ([]string, error) { var run = []string{"bm", "cw"} if len(os.Args) > 1 { switch os.Args[1] { case "all": run = []string{"bm", "cw"} case "cw": run = []string{"cw"} case "bm": run = []string{"bm"} default: return []string{}, errors.New("Invalid argument.") } } return run, nil }