2016-04-27 4 views
1

У меня есть входной файл, который я борюсь читать построчно, файл может быть найден here и также показано ниже: enter image description hereЧтение CSV файл со странным линии deliminter в VBA

Я хотел бы добавить первое значение в качестве ключа и третье значение как элемент в дикторе

Затем я могу сделать это: 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 

Я также попытался следовать этому thread

Для людей, которые любят использовать dictinary вот мой код, который:

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 

Я добавил некоторые выходные данные отладки ниже: debug

ответ

2

На скриншоте вы прилагаетесь показывает, что файл использует CR LF, как переносы, но файл я скачал с вашей ссылки Google Drive фактически использует LF только, так что вы можете использовать:

lines = Split(dataLine, vbLf)

Кроме того, файл использует Little Endian UCS-2 кодирование с BOM. Если вы просто открываете файл с помощью инструкции Open, вы, вероятно, столкнетесь с коррумпированными символами и другими проблемами, связанными с кодировкой. Я бы предложил using Filesystem object instead.

+0

VBLf сделал трюк, спасибо куч. Теперь я быстро отредактирую код и загрузим полный код – skatun

+0

Не знаю, зачем программистам Блокнот показал его crlf ... – skatun

2

Я думаю, что у этого есть ответ - раскол на vbcrlf?

CRLF in VBScript

Из 4 примеров, которые Вы дали, «CR» и «LF» будет выглядеть для текстовых строк «CR» и «LF», который является не то, что вы хотите. VB не распознает «\ n», как большинство C-подобных языков, так что это не так. vbnewline был ближе к работе, но я думаю, что это может помочь вам:

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

1

Вот мой код, который в настоящее время, кажется, работает хорошо:

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