如何验证CSV文件的行数和列数?
我试图确定输入我的应用程序的数据文件没有特定的列,这样它就不会在应用程序中失败。我还想计算行数,并检查是否将相同数量的行加载到数据库中 我还需要检查每一行是否包含相同数量的列 我试着写它如下,但仍然与结果挣扎如何验证CSV文件的行数和列数?,csv,vbscript,Csv,Vbscript,我试图确定输入我的应用程序的数据文件没有特定的列,这样它就不会在应用程序中失败。我还想计算行数,并检查是否将相同数量的行加载到数据库中 我还需要检查每一行是否包含相同数量的列 我试着写它如下,但仍然与结果挣扎 Dim objFSO, dataArray, clippedArray Set objFSO = CreateObject("Scripting.FileSystemObject") 'Create an array out of the CSV 'open the data file
Dim objFSO, dataArray, clippedArray
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Create an array out of the CSV
'open the data file
Set oTextStream = objFSO.OpenTextFile("C:\Users\ds\Desktop\Quota\new_file.csv")
Set newFile = objFSO.CreateTextFile("C:\Users\ds\Desktop\loginfo.txt")
'make an array from the data file
dataArray = Split(oTextStream.ReadAll, vbNewLine)
'close the data file
oTextStream.Close
WScript.Echo "No. of Rows is " & UBound(dataArray)
For Each strLine In dataArray
'Now make an array from each line
clippedArray = Split(strLine,"|")
lngHowManyColumns = UBound(clippedArray)
WScript.Echo UBound(clippedArray)
Next
WScript.Echo "No. of Columns is " & lngHowManyColumns
WScript.Echo "Done"
由于很少有专家无法理解这个问题,因此对其进行了编辑,以使其更有意义,但下面已经给出了答案
谢谢保持简单:在行上循环,通过拆分检查每行中的字段sep
Option Explicit
Const csFSpec = "..\data\47261155.csv"
Const csFSep = ","
Const cnCols = 3 ' one less to optimize for UBound()!
Const cnRows = 6 ' one more to optimize for .Line
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Dim oTS : Set oTS = goFS.OpenTextFile(csFSpec)
Dim sL, nC
Do Until oTS.AtEndOfStream
sL = oTS.ReadLine()
nC = UBound(Split(sL, csFSep))
If cnCols <> nC Then
WScript.Echo "Col Error in line", oTS.Line - 1 & ":", cnCols, "<>", nC, "(" & sL & ")"
End If
Loop
If cnRows <> oTS.Line Then
WScript.Echo "Row Error: ", cnRows, "<>", oTS.Line
End If
oTS.Close
WScript.Echo "no news is good news"
选项显式
Const csFSpec=“..\data\47261155.csv”
Const csFSep=“,”
Const cnCols=3'为UBound()优化少了一个!
Const cnRows=6'还要为.Line优化一个
Dim goFS:Set goFS=CreateObject(“Scripting.FileSystemObject”)
Dim oTS:Set oTS=goFS.OpenTextFile(csFSpec)
北卡罗来纳州
直到oTS.AtEndOfStream
sL=oTS.ReadLine()
nC=UBound(分离(sL、csFSep))
如果CNCOL为nC,则
WScript.Echo“列中的列错误”,oTS.line-1&“:”,cnCols,“,nC,”(&sL&“)
如果结束
环
如果是CNOTS.行,则
Echo“行错误:”,cnRows,“,oTS.Line
如果结束
加油,加油
Echo“没有消息就是好消息”
输出:
type..\data\47261155.csv
1,2,3,4
4,3,2,1
1,2,3,4,5
1,2,3
1,2,3,4
1,2,3,4
cscript 47261155.vbs
第3行中的列错误:34(1,2,3,4,5)
第4行中的列错误:3 2(1,2,3)
行错误:6 7
没有消息就是好消息
保持简单:在行上循环,通过拆分检查每行中的字段sep
Option Explicit
Const csFSpec = "..\data\47261155.csv"
Const csFSep = ","
Const cnCols = 3 ' one less to optimize for UBound()!
Const cnRows = 6 ' one more to optimize for .Line
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject")
Dim oTS : Set oTS = goFS.OpenTextFile(csFSpec)
Dim sL, nC
Do Until oTS.AtEndOfStream
sL = oTS.ReadLine()
nC = UBound(Split(sL, csFSep))
If cnCols <> nC Then
WScript.Echo "Col Error in line", oTS.Line - 1 & ":", cnCols, "<>", nC, "(" & sL & ")"
End If
Loop
If cnRows <> oTS.Line Then
WScript.Echo "Row Error: ", cnRows, "<>", oTS.Line
End If
oTS.Close
WScript.Echo "no news is good news"
选项显式
Const csFSpec=“..\data\47261155.csv”
Const csFSep=“,”
Const cnCols=3'为UBound()优化少了一个!
Const cnRows=6'还要为.Line优化一个
Dim goFS:Set goFS=CreateObject(“Scripting.FileSystemObject”)
Dim oTS:Set oTS=goFS.OpenTextFile(csFSpec)
北卡罗来纳州
直到oTS.AtEndOfStream
sL=oTS.ReadLine()
nC=UBound(分离(sL、csFSep))
如果CNCOL为nC,则
WScript.Echo“列中的列错误”,oTS.line-1&“:”,cnCols,“,nC,”(&sL&“)
如果结束
环
如果是CNOTS.行,则
Echo“行错误:”,cnRows,“,oTS.Line
如果结束
加油,加油
Echo“没有消息就是好消息”
输出:
type..\data\47261155.csv
1,2,3,4
4,3,2,1
1,2,3,4,5
1,2,3
1,2,3,4
1,2,3,4
cscript 47261155.vbs
第3行中的列错误:34(1,2,3,4,5)
第4行中的列错误:3 2(1,2,3)
行错误:6 7
没有消息就是好消息
您所说的“验证”是什么意思?你“无法实现”的是什么UBound(varArray)+1
提供行中的字段数,UBound(dataArray)+1
提供输入文件中的行数。请描述什么不起作用。你的问题。更新了我的问题和最新代码。你仍然没有解释你面临的问题。你正在验证什么,列数,行数,它们是否包含数据?什么?你说的“验证”是什么意思?你“无法实现”的是什么UBound(varArray)+1
提供行中的字段数,UBound(dataArray)+1
提供输入文件中的行数。请描述什么不起作用。你的问题。更新了我的问题和最新代码。你仍然没有解释你面临的问题。你正在验证什么,列数,行数,它们是否包含数据?什么??“没有新闻就是好消息”不是英语,这是更合理的,它是一个小编辑。这句话应该是…你有时会这么小气!“没有新闻都是好消息”不是英语,这是为了让更多的意义,它是一个小编辑。这句话应该是…你有时会这么小气!