批量统计CSV列数的VB Script运行错误,求逻辑修复方案
VBS批量统计CSV列数修复方案
原脚本核心问题
- 对象引用错误:打开CSV文件后未正确绑定读取对象,使用了未定义的
textstream变量读取行内容,直接触发运行时报错 - Instr函数参数错误:VBS中Instr语法为
Instr(起始位置, 源字符串, 查找目标),原脚本参数顺序写反,且错误地去行号变量line_no中查找逗号,而非读取到的行内容line - 计数逻辑缺失:未实现整行逗号遍历统计逻辑,列数应为逗号出现次数+1,原脚本仅做了单次存在性判断
- 变量混乱:计数变量混用
ColumnCount和Count,且未在遍历每个文件时重置计数,会出现统计值累加错误 - 变量覆盖错误:遍历文件的
objFile变量被重复赋值为文本流对象,会破坏文件遍历逻辑 - 输出格式不匹配:原需求输出CSV文件,代码中保存的是txt后缀
修复后完整代码
Const ForReading = 1 Const ForWriting = 2 Const Create = True Set objFSO = CreateObject("Scripting.FileSystemObject") sFolder = objFSO.GetParentFolderName(WScript.ScriptFullName) ' 改为输出CSV文件符合需求 ResultsFile = sFolder & "\FileColumnCount.csv" Set objResultsFile = objFSO.OpenTextFile(ResultsFile, ForWriting, Create) ' 写入CSV表头 objResultsFile.WriteLine "文件名,列数" For Each objFile In objFSO.GetFolder(sFolder).Files If UCase(objFSO.GetExtensionName(objFile.Name)) = "CSV" Then ' 跳过生成的统计文件本身 If objFile.Name <> "FileColumnCount.csv" Then strFilePath = objFile.Path strFileName = objFile.Name ' 单独声明文本流对象,不覆盖objFile Set objTextStream = objFSO.OpenTextFile(strFilePath, ForReading) ColumnCount = 0 ' 仅读取第一行统计即可,CSV所有行列数一致 If Not objTextStream.AtEndOfStream Then line = objTextStream.ReadLine ' 统计逗号数量 pos = InStr(1, line, ",") Do While pos > 0 ColumnCount = ColumnCount + 1 pos = InStr(pos + 1, line, ",") Loop ' 列数=逗号数+1 ColumnCount = ColumnCount + 1 End If objTextStream.Close ' 文件名加双引号避免文件名含逗号时CSV格式错乱 objResultsFile.WriteLine Chr(34) & strFileName & Chr(34) & "," & ColumnCount End If End If Next objResultsFile.Close MsgBox "FileColumnCount Complete"
内容的提问来源于stack exchange,提问作者sdf
相关产品推荐
相关产品推荐

