2010-09-15 49 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