Что такое "Dim fso, MyFile, FileName, TextLine" в VBA? - PullRequest
1 голос
/ 12 ноября 2009

Я получил этот код от одного из тех замечательных людей, которые готовы потратить свое время и энергию, чтобы поделиться своими знаниями с noobs:

Sub ReadLinesFromAFileOneAfterAnother ()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim fso, MyFile, FileName, TextLine

Set fso = CreateObject("Scripting.FileSystemObject")

FileName = "c:\testfile.txt"

Set MyFile = fso.OpenTextFile(FileName, ForReading)

'' Read from the file
Do While MyFile.AtEndOfStream <> True
    TextLine = MyFile.ReadLine

    '' Do stuff to TextLine

Loop
MyFile.Close
End Sub

Хотя я знаю, какую задачу выполняет этот код, я все же хотел бы знать, что означает и делает каждый из его элементов. Может кто-нибудь, пожалуйста, объясните мне, что такое третья строка этого кода:

Dim fso, MyFile, FileName, TextLine

Что такое "fso" в первую очередь? Я знаю, что это означает «объект файловой системы», но он мало что объясняет, что это такое и что он делает. Что означают эти три следующих слова («MyFile», «FileName», «TextLine»)? Это какие-то параметры чего-то?

Я прочитал это: http://msdn.microsoft.com/en-us/library/h7se9d4f(VS.85).aspx

и это: http://msdn.microsoft.com/en-us/library/ebkhfaaz(VS.85).aspx

но такое ощущение, что эти материалы написаны для тех, кто мог бы их написать - я едва что-то понял. Конечно, некоторые вещи более или менее понятны, но есть так много других терминов и слов, которые я не знаю! В конце концов, нет единой полной и ясной картины.

Итак, я сдался и решил вернуться сюда. Этот сайт, вероятно, один из немногих в Интернете (на самом деле я не встречал других), который заявил в своих правилах: «Ни один вопрос не является слишком тривиальным или слишком« новичком »». Это дает мне основание для того, чтобы задать этот настоящий вопрос.

Так что, пожалуйста, кто-нибудь, объясните мне в простых словах, что такое "fso". Точно, о чем говорит третья строка кода выше.

Спасибо всем заранее.

Ответы [ 4 ]

6 голосов
/ 12 ноября 2009

Строка кода:

Dim fso, MyFile, FileName, TextLine

объявляет вещи, называемые «переменными» типа варианта.

Переменная - это немного места в памяти с именем и типом. Вы используете их, чтобы программа знала, что вы будете использовать их позже в коде.

Обычно вы присваиваете переменным тип (например, целое число или строку), а кодировщик - нет, поэтому по умолчанию используется вариант, который может принимать любой тип (по сути).

Как только вы сделали:

Set fso = CreateObject("Scripting.FileSystemObject")

затем fso содержит немного кода, который может что-то делать с файловой системой.

Set MyFile = fso.OpenTextFile(FileName, ForReading)

Означает, что вы используете функциональность fso, чтобы открыть имя файла, указанное вами в переменной 'filename', и поместили ссылку на него в переменную 'myfile'.

Таким образом, вы можете выполнять дальнейшие действия с файлом, используя переменную myfile.

Цикл 'do while' читает этот файл по одной строке за раз (myfile.readline) и помещает результат в переменную 'textline', которая каждый раз обходит строку текста из файла при каждом обходе цикл, пока файл не закончится.

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

Если честно, основы VB необходимы для того, чтобы вы могли интерпретировать такой код, поэтому я бы посоветовал поискать онлайн-учебник или книгу.

5 голосов
/ 12 ноября 2009

Все, что делает эта строка, определяет их как переменные для дальнейшего использования в коде

Также см. Этот пост в StackOverflow: Что означает DIM в Visual Basic и BASIC?

2 голосов
/ 12 ноября 2009
Dim fso, MyFile, FileName, TextLine

Эта строка определяет переменные.
Цель этого помочь поймать опечатки , так как переменные ссылаются по всему сценарию. Обычно это используется в тандеме с Option Explicit (обычно находится в верхней части скрипта).

По умолчанию VBA не требует , чтобы эта переменная была определена. Можно изменить это [глупое] поведение по умолчанию, используя параметр Option Explicit, чтобы исключение «неопределенная переменная» создавалось, когда конкретная переменная не определена.
Без этой настройки, во фрагменте вопроса, если, например, в строке 4 мы непреднамеренно набрали имя FileNam, пропустив e, VBA продолжит работу, фактически имея две переменные FileName и FileNam; позже в программе при правильном использовании переменной FileName будет использоваться пустое значение, что приведет к тонким и трудным для поиска ошибок .

1 голос
/ 12 ноября 2009

Эта третья строка просто определяет их для последующего использования. Fso, Filename и т. Д. - это просто переменные-заполнители, которые будут использоваться позже в коде. fso объявлен и установлен в новый объект файловой системы. Это может быть любой тип файловой системы - NTFS, FAT и т. Д., Но все это означает, что вы собираетесь работать с файлами в системе. Затем вы используете его, чтобы открыть файл, указанный только для чтения, а остальная часть кода исчезнет. Вы должны указать fso, чтобы программа знала, откуда читать - будь то файл, поток ввода или отдельная дополнительная файловая система.

Надеюсь, это поможет!

...