以下是Access应用程序的代码。正在发生的是正在读取包含记录的csv文件。如果不满足正确的条件,则程序需要转到csv文件中的下一条记录并继续处理。然而,当这种情况发生在" GoTo NEXT_RECORD"它会立即跳转到" NEXT_RECORD:Wend"并重新开始循环。但是,它不是读取下一个记录而是读取下一列。我需要知道如何将指针移动到下一个记录而不是下一列。任何帮助表示赞赏。
Public Sub ReadCSV()
Const FILE_NAME = "C:\files\test.csv"
On Error GoTo EH
Dim sX As String
Dim sSSN As String
Dim sName As String
Open FILE_NAME For Input As #1
'read to the end of the line to skip header row
While sX <> Chr(13)
sX = Input(1, #1)
Wend
sX = Input(1, #1)
While Not EOF(1)
Input #1, sSSN
If Len(sSSN) <> 11 Then
Debug.Print "bad SSN: " & sSSN
GoTo NEXT_RECORD
End If
Input #1, sName
Debug.Print sSSN & vbTab & sName
NEXT_RECORD:
Wend
GoTo FINISH
EH:
With Err
MsgBox .Number & vbCrLf & .Source & vbCrLf & .Description
.Clear
End With
FINISH:
Close #1
End Sub
CSV文件包含以下记录:
SSN,Name
684-92-4567,Marshall Applewhite
55589,Shoko Ashara
874-96-5124,Jim Jones
答案 0 :(得分:1)
<强>解决方案强>
在恢复循环之前读取到行尾。这将绕过其他领域。下面是一些代码,它使用输入函数一次读取一个字符,直到它返回到回车符(字符13)。然后它再读取一个字符以绕过换行符(字符10)。 Windows使用Chr(13)和Chr(10)的组合进行行结束。
将以下行放在Goto之前,所以它们看起来像这样:
'read to the end of the line
sX = ""
While sX <> Chr(13)
sX = Input(1, #1)
Wend
sX = Input(1, #1)
'now safe to move to next record
GoTo NEXT_RECORD
这是对例程开头的几行代码的重复,它们为了跳过CSV的标题行而做同样的事情。
Input#Statement用于一次读取一个字段(它读取逗号或行尾),这就是为什么在恢复之前跳到结尾的原因。
<强>参考强>