Этот код работает, но как? - PullRequest
       4

Этот код работает, но как?

0 голосов
/ 15 сентября 2010

Я только что написал эту функцию для чтения серии адресов электронной почты из текстового файла с разделителями строк. И это работает , но это не мой вопрос.

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. Loop
  3. СНОВА читайте первую строку, сохраняйте ее в TempArr (2)
  4. Loop
  5. Etc

Я просто не могу понять, как цикл while переходит к следующей строке в текстовом файле.

Ответы [ 4 ]

2 голосов
/ 15 сентября 2010

Ваш шаг 3 должен быть:

3. Считать следующую строку из файла в TempArr (i + 1)

Таким образом, вы не читаете в первой строке снова, оператор line input читает строку и помещает позицию файла в следующую строку.

2 голосов
/ 15 сентября 2010

Вы держите дескриптор (# 1) файла с точки, которую вы называете Open, до тех пор, пока вы не наберете Close.За кулисами (на уровне O / S) дескриптор сохраняет текущую позицию файла как часть дескриптора файла.

1 голос
/ 15 сентября 2010

Я верю, что магия происходит на Line Input #1, TempArr(i+1). Он читает из дескриптора файла № 1 в TempArr(i+1). Когда он доберется до конца файла, EOF(1) примет значение true и завершит цикл while. Как система узнает, какая следующая строка? Это обработано под капотом для вас, Line Input.

0 голосов
/ 15 сентября 2010

Функция Line Input изменяет текущую строку.Довольно липкие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...