如何验证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
提供输入文件中的行数。请描述什么不起作用。你的问题。更新了我的问题和最新代码。你仍然没有解释你面临的问题。你正在验证什么,列数,行数,它们是否包含数据?什么??“没有新闻就是好消息”不是英语,这是更合理的,它是一个小编辑。这句话应该是…你有时会这么小气!“没有新闻都是好消息”不是英语,这是为了让更多的意义,它是一个小编辑。这句话应该是…你有时会这么小气!