读取平面文件的内容并完成验证过程

时间:2018-02-15 10:34:46

标签: vba excel-vba validation requirements.txt excel

我正在尝试自动化特定类型的文本文件经过数据验证过程的过程。

到目前为止,我已设法使用文件系统对象打开文本文件并创建x行的计数输出。但是当我使用EOF函数来检索x - 1行时,它不会带来单独的行,它认为整个数据是一行。

我不能绕过这个来对这些数据进行进一步的验证检查。关于如何在数据集的条件验证列表中进行的任何建议。

e.g。数据集:

AAA | E0071001 | d | 20090401010101 | EC | UKDC | BP | PARTYID | 1 | TR01 | CPD | AAA123 |测试参与者A123 | P | BBB456 |新参与者B456 | P | ER2 | NAHNAH1 |测试参与者| 20090401 || EAD | 7 ||| ZZZ | 5 | 1562192240 |

上面的

在文本文件中显示为一行。如果我提取到excel或工作它会分成5行作为期望,打破空间间隙例如在CPD成为换行符之前。

使用以下内容:

Do While objTextfile.atendofstream <> True
    objTextfile.skipline
    c = c + 1
    Loop

与filesystemsobject一起设法计算#rows = 5。

但如果我执行以下操作:

For i = 1 To (NumLines - 1)
    F.readline
    text = text & F.readline
Next

strLine = F.readline

它只检索一行而不分成5行。

我还希望能够分析每个被分隔符破坏的输入,我将如何进行此操作?

1 个答案:

答案 0 :(得分:0)

以下内容将计算txt文档中的行数:

Sub foo()
Dim objFSO
Const ForReading = 1
Dim objTS 'define a TextStream object
Dim fileSpec As String
Dim lineCounter As Long
lineCounter = 0

fileSpec = "C:\Test.txt" 'change the path to whatever yours ought to be
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading)

Do While Not objTS.AtEndOfStream
    objTS.ReadLine
    lineCounter = lineCounter + 1
Loop

MsgBox lineCounter
End Sub

<强>更新

要使用换行符替换文本文件中的空格,以下内容将执行此操作:

Sub foo()
Dim objFSO
Const ForReading = 1
Const ForWriting = 2
Dim objTS 'define a TextStream object
Dim strContents As String
Dim fileSpec As String

fileSpec = "C:\Test.txt" 'change the path to whatever yours ought to be
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTS = objFSO.OpenTextFile(fileSpec, ForReading)

'objTS.ReadAll would use read all to read the whole file into memory

Do While Not objTS.AtEndOfStream
    strContents = strContents & " " & objTS.ReadLine 'Read line by line and store all lines in strContents
Loop

strContents = Replace(strContents, " ", vbCrLf)
objTS.Close

Set objTS = objFSO.OpenTextFile(fileSpec, ForWriting)
objTS.Write strContents
objTS.Close
End Sub