built converter
Will probably need to spend more time in the future rebuilding regex to check for only scientific notation.
This commit is contained in:
parent
1f5b0486b5
commit
cfbdc16bb1
145
main.go
Normal file
145
main.go
Normal file
@ -0,0 +1,145 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/pterm/pterm"
|
||||
"github.com/schollz/progressbar/v3"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Set Welcome Header
|
||||
// pterm.DefaultHeader.WithBackgroundStyle(pterm.NewStyle(pterm.BgCyan)).WithTextStyle(pterm.NewStyle(pterm.FgBlack)).Println("Welcome to Checkdigit Calculator")
|
||||
|
||||
pterm.DefaultSection.Printfln(pterm.Cyan("Welcome to Scientific Notation Converter"))
|
||||
|
||||
// Check what directory the commandline is on when the program is launched.
|
||||
directory, err := os.Getwd()
|
||||
Error(err)
|
||||
|
||||
// Get name of file to be processed.
|
||||
args := os.Args[1:]
|
||||
|
||||
var input string
|
||||
|
||||
if len(args) > 0 {
|
||||
input = args[0]
|
||||
} else {
|
||||
pterm.Printf(pterm.LightGreen("What is the name of the file in this directory?: "))
|
||||
reader := bufio.NewReader(os.Stdin)
|
||||
input, err = reader.ReadString('\n')
|
||||
Error(err)
|
||||
}
|
||||
|
||||
// Create upcs array and push all upc strings into it
|
||||
input = strings.TrimSpace(input)
|
||||
file, err := os.Open(input)
|
||||
Error(err)
|
||||
var upcs []string
|
||||
scanner := bufio.NewScanner(file)
|
||||
for scanner.Scan() {
|
||||
upcs = append(upcs, scanner.Text())
|
||||
}
|
||||
err = file.Close()
|
||||
Error(err)
|
||||
if scanner.Err() != nil {
|
||||
fmt.Println(scanner.Err())
|
||||
}
|
||||
|
||||
// Create gtins array that will eventually be returned
|
||||
var gtins []string
|
||||
|
||||
// Using regex compile so the program stays fast
|
||||
regex, err := regexp.Compile("^[^0-9]")
|
||||
Error(err)
|
||||
|
||||
checkBar := progressbar.NewOptions(len(upcs),
|
||||
progressbar.OptionEnableColorCodes(true),
|
||||
progressbar.OptionSetDescription("[cyan][1/2][reset] Converting Scientific Notation Number..."),
|
||||
progressbar.OptionUseANSICodes(true),
|
||||
progressbar.OptionSetTheme(progressbar.Theme{
|
||||
Saucer: "[green]=[reset]",
|
||||
SaucerHead: "[green]>[reset]",
|
||||
SaucerPadding: " ",
|
||||
BarStart: "[",
|
||||
BarEnd: "]",
|
||||
}))
|
||||
|
||||
for _, upc := range upcs {
|
||||
checkForNonStartingNumber := regex.MatchString(upc)
|
||||
|
||||
if checkForNonStartingNumber {
|
||||
gtins = append(gtins, upc)
|
||||
continue
|
||||
}
|
||||
|
||||
// Split scientific notation at the e+ point
|
||||
upcArray := strings.Split(upc, "e+")
|
||||
|
||||
fmt.Println(upcArray)
|
||||
|
||||
// Create separate variables for the split values
|
||||
workingUpc := upcArray[0]
|
||||
upcENumber := upcArray[1]
|
||||
|
||||
// At one to the scientific notation length to allow for the decimal point to be removed
|
||||
upcLength, err := strconv.Atoi(upcENumber)
|
||||
Error(err)
|
||||
upcLength = upcLength + 1
|
||||
|
||||
// Remove the decimal point
|
||||
workingUpc = strings.ReplaceAll(workingUpc, ".", "")
|
||||
|
||||
// Append 0 to UPC to match notation length
|
||||
for len(workingUpc) < upcLength {
|
||||
workingUpc = workingUpc + "0"
|
||||
}
|
||||
|
||||
upc = workingUpc
|
||||
|
||||
gtins = append(gtins, upc)
|
||||
checkBar.Add(1)
|
||||
}
|
||||
|
||||
answerBar := progressbar.NewOptions(len(gtins),
|
||||
progressbar.OptionEnableColorCodes(true),
|
||||
progressbar.OptionSetDescription("[cyan][2/2][reset] Writing answers into file..."),
|
||||
progressbar.OptionUseANSICodes(true),
|
||||
progressbar.OptionClearOnFinish(),
|
||||
progressbar.OptionSetTheme(progressbar.Theme{
|
||||
Saucer: "[green]=[reset]",
|
||||
SaucerHead: "[green]>[reset]",
|
||||
SaucerPadding: " ",
|
||||
BarStart: "[",
|
||||
BarEnd: "]",
|
||||
}))
|
||||
|
||||
// Check if answer.txt already exists and if so, delete it
|
||||
if _, err := os.Stat(directory + "/answer.txt"); err == nil {
|
||||
e := os.Remove(directory + "/answer.txt")
|
||||
Error(e)
|
||||
}
|
||||
|
||||
// Create new answer.txt
|
||||
answerFile, err := os.Create(directory + "/answer.txt")
|
||||
Error(err)
|
||||
|
||||
defer answerFile.Close()
|
||||
|
||||
// Fill the answers.txt file
|
||||
for _, gtin := range gtins {
|
||||
_, err := answerFile.WriteString(gtin + "\n")
|
||||
Error(err)
|
||||
answerBar.Add(1)
|
||||
}
|
||||
|
||||
// Print Success message and exit
|
||||
pterm.Printf("\n")
|
||||
pterm.Success.Println("The answer.txt file has been successfully generated with check digits.")
|
||||
os.Exit(0)
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user