completed check digit algorithm and file writing

This commit is contained in:
John O'Keefe 2023-12-07 16:54:12 -05:00
parent d1fc4ac7b7
commit 4a936cca57
4 changed files with 1001095 additions and 0 deletions

BIN
checkdigitCalculator Executable file

Binary file not shown.

10
error.go Normal file
View File

@ -0,0 +1,10 @@
package main
import "log"
func Error(err error) {
if err != nil {
log.Fatal(err)
}
return
}

84
main.go
View File

@ -1,5 +1,89 @@
package main
import (
"bufio"
"fmt"
"os"
"strconv"
"strings"
)
func main() {
directory, err := os.Getwd()
Error(err)
fmt.Printf("What is the name of the file: ")
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
Error(err)
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())
}
var gtins []string
for _, upc := range upcs {
upcLength := len(upc)
// Check Digit Formula
// Take all the digits in odd positions, add them and multiply by three
// Take all the digits in even positions (except for the last one) and add to the number you got above
// Divide that number by 10 and take the remainder
// If the remainder is not 0, subtract it from 10
oddNumber := 0
evenNumber := 0
var remainder int
for i, num := range upc {
if i%2 == 0 {
oddString, err := strconv.Atoi(string(num))
Error(err)
oddNumber += oddString
} else {
if upcLength-1 > i {
evenString, err := strconv.Atoi(string(num))
Error(err)
evenNumber += evenString
}
}
}
oddNumber = oddNumber * 3
remainder = (oddNumber + evenNumber) % 10
if remainder != 0 {
remainder = 10 - remainder
}
remainderString := strconv.Itoa(remainder)
gtins = append(gtins, upc+remainderString)
}
if _, err := os.Stat(directory + "/answer.txt"); err == nil {
e := os.Remove(directory + "/answer.txt")
Error(e)
}
answerFile, err := os.Create(directory + "/answer.txt")
Error(err)
defer answerFile.Close()
for _, gtin := range gtins {
_, err := answerFile.WriteString(gtin + "\n")
Error(err)
}
}

1001001
test.txt Normal file

File diff suppressed because it is too large Load Diff