使用VBScript删除CSV文件第101-106列时代码未生效问题求助
VBScript 删除CSV指定列代码修正
代码核心错误点
- 过滤条件完全失效:VBScript中
101 OR 102 OR 103 OR 104 OR 105 OR 106是位运算表达式,计算结果固定为127,不是匹配101-106任意值的合法判断。列计数intCount从0开始,永远不会等于127,因此所有列都会被保留,完全没有过滤效果。 - 变量未初始化:代码中用到的
x从未赋值,首次循环值为0碰巧能运行,但后续未累加,所有行的拆分结果都会覆盖数组第一个元素,逻辑完全混乱。 - 计数基准偏差:VBScript数组默认从0开始下标,若要删除的101-106列是从最左侧第一列开始数的人工序号,对应数组下标为100-105,需根据实际列序调整判断区间。
- 分隔符不匹配:原CSV以
;为列分隔符,代码拼接输出时用了|,会直接破坏文件格式。 - 冗余逻辑:跨循环维护
clippedArray数组存储所有行的拆分结果完全没必要,每一行拆分后可直接处理,不需要全局缓存。 - 行尾格式错误:逐列拼接后,每行末尾会多出一个分隔符,需裁剪保证格式正确。
修正后可运行代码
Const ForReading = 1, ForWriting = 2 Dim fso, InputFile, OutputFile, InFile, OutFile, strLine, lineArr, intCount, newLine, endPos ' 配置输入输出路径 InputFile = "C:\input.csv" OutputFile = "C:\input_n_1.csv" ' 初始化文件操作对象 Set fso = CreateObject("Scripting.FileSystemObject") Set InFile = fso.OpenTextFile(InputFile, ForReading) Set OutFile = fso.OpenTextFile(OutputFile, ForWriting, True) ' 逐行处理CSV内容 Do While InFile.AtEndOfStream <> True strLine = InFile.ReadLine ' 按原文件分隔符拆分当前行 lineArr = Split(strLine, ";") intCount = 0 newLine = "" ' 遍历列,跳过待删除的101-106列(对应1基列序的0基下标100-105) For Each Element In lineArr If intCount < 100 Or intCount > 105 Then newLine = newLine & Element & ";" End If intCount = intCount + 1 Next ' 裁剪行尾多余的分隔符 If Len(newLine) > 0 Then endPos = Len(newLine) - 1 newLine = Left(newLine, endPos) End If OutFile.WriteLine newLine Loop ' 释放资源 InFile.Close OutFile.Close Set OutFile = Nothing Set InFile = Nothing Set fso = Nothing WScript.Echo "处理完成"
若你要删除的列是按0基计数(即第一个元素为第0列),只需将判断条件调整为
If intCount < 101 Or intCount > 106 Then即可。
内容的提问来源于stack exchange,提问作者Edward Sheriff Curtis
相关产品推荐
相关产品推荐

