Специфическая проблема c заключается в том, что вы указываете номер файла 1 при открытии файла:
FileOpen(1, "example1.txt", OpenMode.Input)
, но затем вы используете другие номера файлов при чтении строк:
name(i) = LineInput(i)
Вы не говорите LineInput
читать указанную строку c. Вы говорите ему прочитать следующую строку из указанного c файла. Это должно быть:
name(i) = LineInput(1)
Это пример того, почему вы не должны использовать магические числа c в вашем коде. Слишком легко их испортить. Если вы хотите использовать одно и то же значение по одной и той же причине в нескольких местах, присвойте его переменной или даже константе, а затем используйте это каждый раз:
Dim fileNumber = 1
FileOpen(fileNumber, "example1.txt", OpenMode.Input)
While Not EOF(fileNumber)
name(i) = LineInput(fileNumber)
РЕДАКТИРОВАТЬ:
Кому достичь эквивалентной функциональности с хорошим кодом VB. NET, вы бы сделали что-то вроде этого:
Imports System.IO
Module Module1
Sub Main()
Dim names As New List(Of String)
Using inputFile As New StreamReader("example1.txt")
While Not inputFile.EndOfStream
Dim name = inputFile.ReadLine()
names.Add(name)
Console.WriteLine(name)
End While
End Using
Console.ReadLine()
End Sub
End Module
или это:
Imports System.IO
Module Module1
Sub Main()
Dim names As New List(Of String)
For Each name In File.ReadLines("example1.txt")
names.Add(name)
Console.WriteLine(name)
Next
Console.ReadLine()
End Sub
End Module
или это:
Imports System.IO
Module Module1
Sub Main()
Dim names = File.ReadAllLines("example1.txt")
For Each name In names
Console.WriteLine(name)
Next
Console.ReadLine()
End Sub
End Module
Обратите внимание, что последний пример немного отличается, поскольку names
является массивом, а не коллекцией, и весь файл читается первым, прежде чем каждое имя выводится на консоль. Это будет выглядеть так же с точки зрения пользователя. Когда они заполнены, вы можете использовать массив и коллекцию практически одинаково.