在VBA中用奇怪的行删除csv文件

我有一个input文件,我正在努力逐行阅读,该文件可以在这里find,也显示如下: 在这里输入图像说明

我想添加第一个值作为键和第三个值作为项目在dictonary

然后,我可以做到这一点:a = myDictonary(“CREATED_BY”),然后这将返回“Eigil …”(订购和行数我不时变化..)

但不知何故,我不能分裂工作:

Dim hf As Integer: hf = FreeFile Dim lines() As String, i As Long Open FileName For Input As #hf Line Input #hf, dataLine lines = Split(dataLine, vbNewLine) lines = Split(dataLine, "\n") lines = Split(dataLine, "CR") lines = Split(dataLine, "LF") Close #hf 

我也试图按照这个线程

对于喜欢在这里使用字典的人是我的代码:

  Set getProjectDictionary = CreateObject("Scripting.Dictionary") Dim item As String Dim key As String Dim dataLine As String Open FileName For Input As 1 While Not EOF(1) On Error Resume Next Line Input #1, dataLine temp = Split(dataLine, ",") If Not temp(0) = "" Then getProjectDictionary.Add temp(0), temp(3) End If Wend Close 1 

我在下面添加了一些debugging输出: 调试

您附加的屏幕截图显示该文件使用CR LF作为换行符,但从Google Drive链接下载的文件实际上仅使用LF,因此您可能需要使用:

lines = Split(dataLine, vbLf)

此外,该文件使用Little Endian UCS-2编码和BOM。 如果您只是使用Open语句打开文件,则可能会遇到损坏的字符和其他编码相关的问题。 我会build议使用Filesystem对象 。

我认为这有一个答案 – 拆分vbcrlf?

在VBScript中的CRLF

在你给出的4个例子中,“CR”和“LF”将查找string“CR”和“LF”,这不是你想要的。 VB不像大多数类C语言那样识别“\ n”,所以没有了。 vbnewline是最接近工作,但我认为这可能会帮助你:

http://www.jaypm.com/2012/08/the-difference-between-vbcrlf-vbnewline-and-environment-newline/

这是我的代码,目前似乎运作良好:

 Option Explicit Sub test() Dim a As Object Set a = getPropertiesDictionary("c:\Temp\Creo\param_table.csv") Debug.Print a.item("PTC_WM_CREATED_BY") End Sub ' populate dictinoary with document types based on input file Function getPropertiesDictionary(FileName As String) As Object Set getPropertiesDictionary = CreateObject("Scripting.Dictionary") Dim temp() As String Dim dataLine As String Dim hf As Integer: hf = FreeFile Dim lines() As String, i As Long Open FileName For Input As #hf Line Input #hf, dataLine lines = Split(dataLine, vbLf) Close #hf For i = 0 To UBound(lines) - 1 temp = Split(lines(i), ",") If Not temp(0) = "" Then getPropertiesDictionary.Add temp(0), temp(2) End If Next End Function