Привет! Сегодня мы поговорим о файлах, а точнее о том, как получить информацию из текстовых файлов в VBA. А мы будем улучшать ваши навыки программирования, как обычно, на примере.
Задача:
Простой текстовый файл содержит строки:
Добро пожаловать на CodeTown.ru
здесь вы найдете много интересного
примеры на разные темы
и на разных языках.
Наслаждайтесь=)
Нужно отобразить их на листе в Excel так, чтобы каждое слово было в своей ячейке с учетом пробелов.
Идти!
Sub Prog() Dim r As Integer Dim c As Integer Dim sl As String Dim x As Integer Close #1 Open "file.txt" For Input As #1 r = 0 Make EOF(1) c = 0 Line Input #1 , Данные Выполнить, в то время как InStr(Данные, " ") 0 x = InStr(Данные, " ") sl = Left(Данные, x) Данные = Right(Данные, Len(Данные) - x) Ячейки(r + 1, c + 1) = sl c = c + 1 цикл ячеек (r + 1, c + 1) = данные r = r + 1 цикл Close #1 End Sub
откройте «file.txt» для Input As #1 — таким образом мы пишем путь к файлу, который хотим прочитать. Помните, что наши пути могут быть разными. Мы также даем файлу идентификационный номер в конце команды. В нашем случае 1.
Make EOF(1) - инициализация цикла чтения файла до конца файла (End Of File). В скобках функции вводим идентификационный номер файла, с которым работаем.
Line Input #1, Data - построчное чтение информации из файла. То есть на каждую итерацию цикла Do Until EOF(1)F(1) мы обрабатываем одну строку.
Функция Line Input — это функция, унаследованная от функции Input, которая в свою очередь позволяет считывать данные в различных форматах из открытых файлов различных типов. Подробный синтаксис можно найти здесь.
Как видите, программа небольшая и основную часть мы уже рассмотрели. Мы смогли прочитать данные в виде строки, теперь нам нужно их обработать. То есть разделить на слова и написать каждое в клеточку.
Do While InStr(Data, " ") 0 - инициализирует цикл для разбиения строки на слова с пробелами. По сути, функция InStr(Data, " ") сама ищет символ, введенный во вторую позицию (в нашем случае пробел), в строке, введенной в первую позицию (Данные). Поиск осуществляется слева направо. Результатом функции является позиция найденного символа. Подробнее здесь. Таким образом, цикл не заканчивается, пока пробелы не опустеют. Однако следует помнить, что пробел в конце строки ставится редко (обычно из-за ошибки автора). Поэтому после выхода из цикла последнее слово строки останется в переменной данных. Не забудем его вынуть.
Наконец, обратите внимание на размещение операций сброса над переменными c и r. Нам нужно установить переменную r в ноль, прежде чем мы начнем обработку строки для реализации переноса строк.
Если какие-то команды вам непонятны, рекомендую прочитать предыдущие статьи, там вы найдете примеры как с ними работать.
Наш вывод:
Вот собственно и все, мы разобрали некоторые аспекты работы с файлами в VBA. Задавайте вопросы в поле для комментариев. Надеюсь, вас вдохновила магия VBA, если нет, читайте дальше. =)
Скачать исходники
Опубликовано в VBA Часы
Пример того, как не надо учить и программировать, тем более учить программированию.
1) Плохой доступ к материалам. Синтаксис функции Input не поясняется (подробнее см в справке или в гугле?).
2) Можно было бы добавить несколько строчек в начале с диалогом выбора файла. Это было бы практичнее и нагляднее.
3) Обязательно ли перераспределять массив перед каждым чтением??? Не проще ли написать все в одну строку: s = s + simb (simb — это читаемый из файла символ), а потом эту строку обработать? Конечно, в данном случае это не очень критично, но такой алгоритм считается дурным тоном в программировании.
4) Использование функции InStr вместо = или ? Код громоздкий и плохо читается.
5) Проследить конец файла через выдачу ошибки??? %) EOF - верно?
Почему бы не проследить конец массива по ошибке во втором цикле? Да вообще можно остановить программу через ошибку :)))
