【问题标题】:VB Script to count the number of rowsVB脚本计算行数
【发布时间】:2021-11-25 01:02:24
【问题描述】:

我编写了一个 VB 脚本来计算几个 CSV 文件的行数,并将文件名和行数保存在 FileRecordCount.csv 文件中的文件中。该代码根本没有显示任何错误。
但是脚本根本不起作用。我不知道是什么问题。任何帮助任何帮助将不胜感激!????

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")

vbsFile = Wscript.ScriptName
vbsFilePath = Wscript.ScriptFullName
sFolder = left(vbsFilePath,len(vbsFilePath)-(len(vbsFile)+1))
ResultsFile = sFolder & "\FileRecordCount.csv"

For Each objFile In objFSO.GetFolder(sFolder).Files
    If UCase(objFSO.GetExtensionName(objFile.Name)) = "CSV" Then

        oFile =  objFile.path
        Set objFile = objFSO.OpenTextFile(oFile, ForReading)
        RowCount = 0

        Do Until objFile.AtEndOfStream
            WScript.Echo objFile.ReadLine
            RowCount = RowCount + 1
        Loop

        'need to make a new file to write the results to
        FileName = objFSO.GetFileName(ResultsFile)
        strText = FileName & "," & RowCount

        Set objFile = objFSO.OpenTextFile(ResultsFile, ForWriting)
        objFile.WriteLine strText

       objFile.Close

    End if

Next

MsgBox "FileRowCount Complete"

【问题讨论】:

  • 尝试更改您的 FileRecordCount.csv 输出文件名以使用不同的扩展名,例如 FileRecordCount.txt,因为它似乎被您的 CSV 输入处理所困。
  • 嗨,它不工作。代码现在做什么,它只是打开文件并读取每个文件的内容。
  • 您正在使用循环变量objFile 指向循环内的结果文件,使用另一个变量打开结果文件。最好在循环前打开文件,循环后关闭。
  • 这能回答你的问题吗? Convert txt file to excel in vbscript

标签: csv vbscript


【解决方案1】:

脚本有多个问题。首先,正如@Flakes 所说,相同的 objFile 变量用于正在处理的文件和结果文件。其次,将结果文件名写入结果文件,而不是每个已处理的文件名。此外,变量“oFile”是一个字符串,因此最好命名为“strFile”,并且可以更优雅地导出脚本路径目录。另外,根据@Flakes,我在循环之前打开了结果文件,在循环之后关闭了结果文件,并且我用 .txt 扩展名命名了结果文件,因此它不会作为 CSV 文件之一处理。还在打开的结果文件中添加了 Create = True 标志,因此它不必预先存在。

这是编辑后的脚本:

Const ForReading = 1
Const ForWriting = 2
Const Create = True

Set objFSO = CreateObject("Scripting.FileSystemObject")
sFolder = objFSO.GetParentFolderName(WScript.ScriptFullName)
ResultsFile = sFolder & "\FileRecordCount.txt"
Set objResultsFile = objFSO.OpenTextFile(ResultsFile, ForWriting, Create)

For Each objFile In objFSO.GetFolder(sFolder).Files
  If UCase(objFSO.GetExtensionName(objFile.Name)) = "CSV" Then
    strFile =  objFile.path
    Set objReadFile = objFSO.OpenTextFile(strFile, ForReading)
    RowCount = 0
    FirstLine = True
    Do Until objReadFile.AtEndOfStream
      Line = objReadFile.ReadLine
      RowCount = RowCount + 1
      If FirstLine Then ColumnCount = UBound(Split(Line,",")) + 1
      FirstLine = False
    Loop
    objReadFile.Close
    strText = strFile & "," & RowCount & "," & ColumnCount
    objResultsFile.WriteLine strText
  End if
Next
objResultsFile.Close
WScript.Echo "File row/column count complete"

【讨论】:

  • 这个。除非我不会重复使用 For Each 变量 objFile 所以将 Set objFile = objFSO... 更改为不同的名称,例如 Set readFile = objFSO...etc 或其他名称。
  • @BdR 好点。进行了更改。
  • 添加了根据文件的第一行计算列数的代码。
猜你喜欢
  • 2012-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-26
  • 1970-01-01
相关资源
最近更新 更多