2015-11-22 84 views
2

我正在使用下面的函數來讀取具有以下格式的文本文件。我需要查找id(column1)和返回日期(column2)。我不明白我的代碼有什麼問題。 所以我的代碼運行完美,直到readline,但一些如何不循環。所以基本上它只是檢查傳入的consumerSSN只有txt文件中的第一個SSN。 所以如果我通過getDOH(213396391),它會回退空白(「」),而不是相應的日期。在vbscript中讀取csv文件

sraDOH.txt: 
578171533,2015-01-01 00:00:00 
213396391,2015-06-01 00:00:00 
077966385,2015-01-01 00:00:00 
216418521,2015-01-01 00:00:00 


Function getDOH(consumerSSN) 
    dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 
    dim doh, t, x 
    For Each File In fso.GetFolder(fso.GetAbsolutePathName("..\Test Files\")).Files 
     If File.Name = "sraDOH.txt" Then 
      Set tsIn2 = fso.OpenTextFile(File, 1) 
      Do While Not tsIn2.AtEndOfStream 
       doh = tsIn2.ReadLine 
       t = split(doh,",") 
       If consumerSSN = t(0) Then 
        getDOH = t(1) 
       Else 
        getDOH = "" 
       End If 
      Loop 
     End If 
    Next 
End Function 
+0

Kushal,也有你的代碼有很多陷阱,或許有助於你無力解決此。相對路徑,使用選項顯式。 fso在哪裏創建?在整個過程中添加Wscript.echo以確定正在運行什麼不是。很多時候VBA默默地失敗了,這是一種痛苦。另外,沒有關於如何調用函數的示例,所以我們甚至不知道customerSSN是否等於任何值。希望這可以幫助。 –

+0

我加了fso。路徑和一切正常。這是合乎邏輯的,在這個工作6個小時後我看不到。希望得到第二雙眼睛。對不起,如果它由於缺乏信息而令你感到困惑 –

+1

嘗試設置一個結果變量並分解,然後將函數名設置爲結果。也許設置返回值導致函數退出。 –

回答

1

另外:你不應該在VBScript中比較不同的(子)的值類型。所以你的電話getDOH(213396391)是有風險的;它應該是getDOH("213396391"),因爲Split()結果是字符串。

證據:

>> Function doCmp(v) 
>> s = "213396391,2015-06-01 00:00:00" 
>> t = Split(s, ",") 
>> doCmp = v = t(0) 
>> End Function 
>> WScript.Echo CStr(doCmp(213396391)), CStr(doCmp("213396391")) 
>> 
False True 
2

一旦找到正在搜索的值,您應該退出循環。

未經測試:

Function getDOH(consumerSSN) 
    dim fso : Set fso = CreateObject("Scripting.FileSystemObject") 
    dim doh, t, x, f 

    f = fso.GetAbsolutePathName("..\Test Files\") & "\sraDOH.txt" 

    If fso.fileexists(f) then 

     Set tsIn2 = fso.OpenTextFile(File, 1) 
     Do While Not tsIn2.AtEndOfStream 
      doh = tsIn2.ReadLine 
      t = split(doh,",") 
      If consumerSSN = t(0) Then 
       getDOH = t(1) 
       exit do 
      End If 
     Loop 

    End If 

End Function