在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