first commit

This commit is contained in:
r0n1n7an 2023-07-25 20:10:52 +08:00
commit 79415a4819
7 changed files with 7566 additions and 0 deletions

69
MissingModules.txt Normal file
View File

@ -0,0 +1,69 @@
LGAEER13A0.IMZ
M10S11AUS.SWM
M10S11AUS2.SWM
THAXJUSX.CRC
THAXJUSX.INI
THAXJUSX.LIT
THAXJUSX.001
THAXJUSX.002
THAXJUSX.003
THAXJUSX.004
THAXJUSX.005
THAXJUSX.006
THAXJUSX.007
THAXJUSX.008
THAXJUSX.009
THAXJUSX.010
THAXJUSX.011
THAXJUSX.012
THAXJUSX.013
THAXJUSX.014
THAXJUSX.015
THAXJUSX.016
THAXJUSX.017
THAXJUSX.018
THAXJUSX.019
THAXJUSX.020
THAXJUSX.021
THAXJUSX.022
THAXJUSX.023
THAXJUSX.024
THAXJUSX.025
THAXJUSX.026
THAXJUSX.027
THAXJUSX.028
THAXJUSX.029
THAXJUSX.030
THAXJUSX.031
THAXJUSX.032
THAXJUSX.033
THAXJUSX.034
THAXJUSX.035
THAXJUSX.036
THAXJUSX.037
THAXJUSX.038
THAXJUSX.039
THAXJUSX.040
THAXJUSX.041
THAXJUSX.042
THAXJUSX.043
THAXJUSX.044
THAXJUSX.045
THAXJUSX.046
THAXJUSX.047
THAXJUSX.048
THAXJUSX.049
THAXJUSX.050
THAXJUSX.051
THAXJUSX.052
THAXJUSX.053
THAXJUSX.054
THAXJUSX.055
THAXJUSX.056
THAXJUSX.057
THAXJUSX.058
THAXJUSX.059
THAXJUSX.060
THAXJUSX.061
THAXJUSX.062
THAXJUSX.063

3184
NeedlessModules.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
SummaryModulesByAOD.exe Normal file

Binary file not shown.

247
SummaryModulesByAOD.go Normal file
View File

@ -0,0 +1,247 @@
package main
import (
"bufio"
"flag"
"log"
"os"
"path/filepath"
"regexp"
"strings"
)
type FileInfo struct {
FileName string
FilePath string
FileSize int64
//ModTime string
}
var (
dbg bool = false
aodType string = ""
aodPath string = ""
modPath string = ""
aodInfoList []FileInfo
moduleInfoList []FileInfo
criList = make([]string, 0)
moduleList = make([]string, 0)
distinctCriList = make([]string, 0)
distinctModuleList = make([]string, 0)
needlessModuleList = make([]string, 0)
missingModuleList = make([]string, 0)
errAOD = make([]string, 0)
errCRI = make([]string, 0)
)
var regFilter = `.*`
var regLNB = `(?i)\S{10,}\.[0-9]{3}`
var regTNB = `(?i)SSW\S{7}\.SSW\S{7}`
var regSBID = `(?i)\S{8,}\.DAT`
func init() {
flag.BoolVar(&dbg, "v", false, "Show Verbose Debug Messages")
flag.StringVar(&aodPath, "a", `D:\MfgTest\PRELOAD\AOD`, "Path Of AODs")
flag.StringVar(&modPath, "m", `D:\Common`, "Path Of Modules")
flag.StringVar(&aodType, "t", "*", "Type Of AODs, LNB/TNB/SBID/*")
flag.Parse()
}
func main() {
_, err := os.Stat(aodPath)
if err != nil {
log.Printf("[ERR] Path Of AODs Not Exists.\r\n")
os.Exit(1)
}
_, err = os.Stat(modPath)
if err != nil {
log.Printf("[ERR] Path Of Modules Not Exists.\r\n")
os.Exit(1)
}
log.Printf("[MSG] Summary Loacal AODs ...\r\n")
aodInfoList, err = _SummaryFiles(aodPath, aodType)
if err != nil {
log.Printf("[ERR] Get AOD List Failed: %s\r\n", err.Error())
os.Exit(1)
}
log.Printf("[MSG] Total Local AODs: %d\r\n", len(aodInfoList))
log.Printf("[MSG] Summary Local Modules ...\r\n")
moduleInfoList, err = _SummaryFiles(modPath, "*")
if err != nil {
log.Printf("[ERR] Get Module List Failed: %s\r\n", err.Error())
os.Exit(1)
}
log.Printf("[MSG] Total Local Modules: %d\r\n", len(moduleInfoList))
regCRI, err := regexp.Compile(`(?i).*File=(.{1,}.CRI)`)
if err != nil {
log.Printf("[ERR] RegExp - CRI Compile Error: %s\r\n", err.Error())
os.Exit(1)
}
log.Printf("[MSG] Summary CRIs From AODs ...\r\n")
for _, aod := range aodInfoList {
rdr, err := os.Open(aod.FilePath)
if err != nil {
errAOD = append(errAOD, aod.FilePath)
}
buf := bufio.NewScanner(rdr)
for buf.Scan() {
if buf.Err() != nil {
break
}
rst := regCRI.FindStringSubmatch(buf.Text())
if len(rst) != 2 {
continue
}
criList = append(criList, strings.TrimSpace(rst[1]))
}
}
log.Printf("[MSG] Total CRIs From AODs: %d\r\n", len(criList))
distinctCriList = _RemoveDuplicateElementOfSlice(criList)
log.Printf("[MSG] Distinct CRIs From AODs: %d\r\n", len(distinctCriList))
regModuleName, err := regexp.Compile(`(?i)(ModuleName[0-9]{0,}|ModuleThis[0-9]{0,})=(.{1,})`)
if err != nil {
log.Printf("[ERR] RegExp - ModuleName Compile Error: %s\r\n", err.Error())
os.Exit(1)
}
log.Printf("[MSG] Summary Modules From CRIs ...\r\n")
for _, cri := range distinctCriList {
rdr, err := os.Open(modPath + "\\" + cri)
if err != nil {
errCRI = append(errCRI, modPath+"\\"+cri)
}
buf := bufio.NewScanner(rdr)
for buf.Scan() {
if buf.Err() != nil {
break
}
rst := regModuleName.FindStringSubmatch(buf.Text())
if len(rst) != 3 {
continue
}
moduleList = append(moduleList, strings.TrimSpace(rst[2]))
}
}
log.Printf("[MSG] Total Modules From CRIs: %d\r\n", len(moduleList))
distinctModuleList = _RemoveDuplicateElementOfSlice(moduleList)
log.Printf("[MSG] Distinct Modules From CRIs: %d\r\n", len(distinctModuleList))
log.Printf("[MSG] Checking Missing Modules ...\r\n")
for _, m := range distinctModuleList {
exist := false
for _, l := range moduleInfoList {
if strings.EqualFold(m, l.FileName) {
exist = true
break
}
}
if !exist {
missingModuleList = append(missingModuleList, m)
}
}
log.Printf("[MSG] Checking Needless Modules ...\r\n")
for _, l := range moduleInfoList {
needless := true
for _, m := range distinctModuleList {
if strings.EqualFold(l.FileName, m) {
needless = false
break
}
}
if needless {
needlessModuleList = append(needlessModuleList, l.FileName)
}
}
log.Printf("***** Error AODs: %d\r\n", len(errAOD))
_WriteFileFromStringSlice(".\\errAOD.txt", errAOD)
log.Printf("***** Error CRIs: %d\r\n", len(errCRI))
_WriteFileFromStringSlice(".\\errCRI.txt", errCRI)
log.Printf("##### Missing Modules: %d\r\n", len(missingModuleList))
_WriteFileFromStringSlice(".\\MissingModules.txt", missingModuleList)
log.Printf("##### Needless Modules: %d\r\n", len(needlessModuleList))
_WriteFileFromStringSlice(".\\NeedlessModules.txt", needlessModuleList)
}
func _SummaryFiles(basePath, filter string) ([]FileInfo, error) {
var err error
sortInfoList := make([]FileInfo, 0)
fileInfoList := make([]FileInfo, 0)
err = filepath.Walk(basePath, func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
var fileInfo FileInfo
fileInfo.FileName = info.Name()
fileInfo.FilePath = path
fileInfo.FileSize = info.Size()
//fileInfo.ModTime = info.ModTime().Format("2006-01-02 15:04:05")
if !strings.Contains(fileInfo.FilePath, ".svn") {
fileInfoList = append(fileInfoList, fileInfo)
}
}
return nil
})
if err != nil {
log.Printf("[ERR] Get File List Failed: %s\r\n", err.Error())
return nil, err
}
switch filter {
case "LNB":
regFilter = regLNB
case "TNB":
regFilter = regTNB
case "SBID":
regFilter = regSBID
default:
return fileInfoList, nil
}
for _, i := range fileInfoList {
reg := regexp.MustCompile(regFilter)
rst := reg.FindStringSubmatch(i.FileName)
if len(rst) != 1 {
continue
}
sortInfoList = append(sortInfoList, i)
}
return sortInfoList, nil
}
func _RemoveDuplicateElementOfSlice(src []string) []string {
dst := make([]string, 0, len(src))
tmp := map[string]struct{}{}
for _, s := range src {
if _, ok := tmp[s]; !ok {
tmp[s] = struct{}{}
dst = append(dst, s)
}
}
return dst
}
func _WriteFileFromStringSlice(fileName string, dataSlice []string) {
obj, err := os.OpenFile(fileName, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
if err != nil {
log.Printf("[ERR] Open File Error: %s\r\n", err.Error())
return
}
defer obj.Close()
var builder strings.Builder
for _, s := range dataSlice {
builder.WriteString(s + "\r\n")
}
obj.WriteString(builder.String())
if err != nil {
log.Printf("[ERR] Write File Error: %s\r\n", err.Error())
return
}
}

0
errAOD.txt Normal file
View File

4063
errCRI.txt Normal file

File diff suppressed because it is too large Load Diff

3
go.mod Normal file
View File

@ -0,0 +1,3 @@
module SummaryModulesByAOD
go 1.19