2016-04-27 2 views
1

Ich habe eine Eingabedatei, die ich in Zeile für Zeile zu lesen, habe Schwierigkeiten, kann die Datei here gefunden wird und wird auch weiter unten: enter image description hereLese CSV-Datei mit seltsamer Linie deliminter in VBA

Ich mag würde hinzufügen der erste Wert als Schlüssel und der dritte Wert als Item in einem Dictionary

Dann kann ich das später tun: a = myDictorary ("CREATED_BY") und dies wird dann "Eigil ..." zurückgeben (Reihenfolge und Anzahl der Zeilen meine variieren von Zeit zu Zeit ..)

Aber irgendwie kann ich nicht die Spaltung zu arbeiten:

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 

Ich habe auch versucht, diese thread

Für Menschen zu folgen, die hier zu verwenden, wie dictinary ist mein Code dafür:

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 

ich einige Debug-Ausgabe unter hinzugefügt: debug

Antwort

2

Der Screenshot zeigt Ihnen angebracht, dass die Datei CR LF als Zeilenumbrüche verwendet, aber die Datei, die ich von Ihrem Google Drive Link heruntergeladen tatsächlich verwendet LF nur, damit Sie verwenden möchten:

lines = Split(dataLine, vbLf)

auch die Datei verwendet Little Endian UCS-2-Codierung mit BOM. Wenn Sie die Datei einfach mit der Open-Anweisung öffnen, werden Sie wahrscheinlich auf beschädigte Zeichen und andere codierungsbezogene Probleme stoßen. Ich würde vorschlagen, using Filesystem object instead.

+0

VbLf den Trick, dank Haufen tat. Ich werde jetzt schnell den Code bearbeiten und den vollständigen Code hochladen – skatun

+0

Keine Ahnung, warum Programmierer Notepad es crlf zeigte ... – skatun

2

Ich denke, das hat die Antwort - Split auf vbcrlf?

CRLF in VBScript

Von den vier Beispielen, die Sie geben, „CR“ und „LF“ aussehen würde, für die Zeichenkette „CR“ und „LF“, das ist nicht das, was Sie wollen. VB erkennt "\ n" nicht wie die meisten C-ähnlichen Sprachen, das ist also raus. vbNewLine war in der Nähe von Arbeit, aber ich denke, das könnte Ihnen helfen:

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

1

Hier ist mein Code, der gut zu funktionieren scheint zur Zeit:

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