76 lines
2.0 KiB
Go
76 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func transBom(namei string) {
|
|
if namei == "" {
|
|
fmt.Println("Please input a KiCAD BOM CSV file.")
|
|
fmt.Scanln(&namei)
|
|
}
|
|
fmt.Println("Input from", namei)
|
|
namei = filepath.ToSlash(namei)
|
|
bi, e := os.ReadFile(namei)
|
|
if e != nil {
|
|
panic(e)
|
|
}
|
|
content := string(bi)
|
|
content = strings.ReplaceAll(content, "\r", "")
|
|
commentId, designatorId, footprintId, contents := findBomContents(content)
|
|
outStr := "\"Comment\",\"Designator\",\"Footprint\"\n"
|
|
outStr += transBomFormat(commentId, designatorId, footprintId, contents)
|
|
oname := filepath.Join(filepath.Dir(namei), "JLCBom.csv")
|
|
fmt.Println("Output to", oname)
|
|
os.WriteFile(oname, []byte(outStr), 0664)
|
|
fmt.Println("Done.")
|
|
fmt.Println("Done. Press any key to continue.")
|
|
fmt.Scanln(&namei)
|
|
}
|
|
|
|
func transBomFormat(commentId, designatorId, footprintId int, contents []string) string {
|
|
ostr := ""
|
|
for _, line := range contents {
|
|
lines := strings.Split(line, "\",")
|
|
if commentId < len(lines) && designatorId < len(lines) && footprintId < len(lines) {
|
|
footprint := transBomFootprint(lines[footprintId])
|
|
ostr += lines[commentId] + "\"," + lines[designatorId] + "\"," + footprint + "\n"
|
|
}
|
|
}
|
|
return ostr
|
|
}
|
|
|
|
func transBomFootprint(footprint string) string {
|
|
f, e := FootprintTransMap[footprint]
|
|
if e {
|
|
return f
|
|
}
|
|
return footprint
|
|
}
|
|
|
|
func findBomContents(content string) (commentId, designatorId, footprintId int, contents []string) {
|
|
contents = strings.Split(content, "\n")
|
|
for i, line := range contents {
|
|
if (strings.Contains(line, "\"Reference\"")) &&
|
|
(strings.Contains(line, "\"Value\"")) &&
|
|
(strings.Contains(line, "\"MaterialFootprint\"")) {
|
|
lines := strings.Split(line, ",")
|
|
for j, item := range lines {
|
|
if item == "\"Reference\"" {
|
|
designatorId = j
|
|
} else if item == "\"Value\"" {
|
|
commentId = j
|
|
} else if item == "\"MaterialFootprint\"" {
|
|
footprintId = j
|
|
}
|
|
}
|
|
contents = contents[i+1:]
|
|
return commentId, designatorId, footprintId, contents
|
|
}
|
|
}
|
|
return 0, 0, 0, nil
|
|
}
|