2010-09-15 51 views
0

我剛剛寫了這個函數從linebreak-delimited文本文件中讀取一系列電子郵件地址。 它確實工作,但那不是我的問題。此代碼有效,但如何?

Function GetEmailArray(FileName As String) As String() 
    Dim TempArr() As String 
    Dim i As Integer 

    Open FileName For Input Access Read As #1 
    Do While Not (EOF(1)) 
     i = i + 1 
     ReDim Preserve TempArr(i + 1) 
     Line Input #1, TempArr(i + 1) 
     Debug.Print TempArr(i + 1) 
    Loop 
    Close #1 
    GetEmailArray = TempArr 
End Function 

讀這篇文章,我希望它可以:

  1. 閱讀的第一行,將其存儲在TempArr(1)
  2. 閱讀的第一行再次,它存儲在TempArr(2)
  3. 環路

我只是無法弄清楚while循環如何進入文本文件中的下一行。

+0

注意你可能想使用FreeFile()生成文件編號,而不是將它們編碼爲#1,#2等 – barrowc 2010-09-16 00:34:36

回答

2

從您撥打電話Open的位置開始,您正在持有一個手柄(#1),直到您致電Close。在幕後(O/S級別),句柄將當前文件位置保留爲文件描述符的一部分。

+0

這是我第一次使用Open()。昨天,我試圖通過選擇驅動程序,設置連接字符串,編寫schema.ini文件,使用ADODB連接創建記錄集bleh來編寫此代碼。這很容易。謝謝(你的)信息。 – PowerUser 2010-09-15 14:21:11

1

我相信魔法發生在Line Input #1, TempArr(i+1)上。它從文件句柄#1讀取到TempArr(i+1)。當它到達文件末尾時,EOF(1)將評估爲true並終止while循環。系統如何知道下一行是哪一個?這是在你面前處理的,由Line Input

0

線路輸入功能正在改變當前線路。相當俗氣的東西。

+0

線路輸入是否真的*改變*任何東西,或只是從文件中讀取並存儲到變量中?那麼,我想它會改變目標變量,因爲它會用數據填充... – FrustratedWithFormsDesigner 2010-09-15 14:00:11

+0

粘性?我從來沒有聽說過使用過的代碼。請詳細說明? – PowerUser 2010-09-15 14:00:23

+0

@Frustrated,通過調用「訪問讀取」,我打開文件進行只讀訪問。 – PowerUser 2010-09-15 14:01:14

2

你的第三步應該是:

3.從文件中讀取下一行到TempArr第(i + 1)

所以你不要在第1線路讀取時,line input語句讀取行,並將文件位置放在下一行。

+0

我以爲第3步總是「利潤!!」 – FrustratedWithFormsDesigner 2010-09-15 19:41:42

+0

這是VBA ;-) – GvS 2010-09-15 20:00:28