Как прочитать кусками текстовый файл vba
Перейти к содержимому

Как прочитать кусками текстовый файл vba

  • автор:

Как прочитать текстовый файл в VBA

В нынешнее время использование текстовых файлов для обмена данными или хранения данных становится редкостью, но тем не менее, все еще встречается. Приведу два варианта чтения текстового файла из VBA. Каждый способ может быть полезен в своей ситуации.

Способ 1. Открытие (чтение) текстового файла целиком

Можно открыть текстовый файл без учета каких-либо разделителей, сплошным текстом:

Set objExcel = New Excel.Application Set wb = objExcel.Workbooks.Open("имя_файла")

либо, если используются разделители колонок, можно их задействовать:

Открытие текстового файла с разделителем Tab:

Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Tab:=True

Открытие текстового файла с разделителем ; (точка с запятой):

Set objExcel = New Excel.Application Set wb = objExcel.Workbooks wb.OpenText Filename:="имя_файла", DataType:=xlDelimited, Other:=True, OtherChar:=";"

В параметрах можно так же добавить Origin:=xlMSDOS , если текстовый файл в DOS-кодировке.

После открытия файла, его можно пройти как обычные ячейки Excel-кого листа.

Способ 2. Чтение текстового файла построчно

Здесь используется классический вариант чтения как в большинстве языков программирования: открытие файла, цикл чтения построчно, закрытие файла.

f = FreeFile Open "имя_файла" For Input As #f Do While Not EOF(f) Line Input #f, s ' что-нибудь делаем с полученной строкой s Loop Close f

В первой строке определяем число, представляющее следующий номер файла, доступный для использования оператором Open. Затем открываем файл, после чего делаем цикл в котором происходит построчное чтение.

Практическое руководство. Чтение из текстовых файлов в Visual Basic

Метод ReadAllText объекта My.Computer.FileSystem позволяет считывать данные из текстового файла. Если содержимое файла имеет определенную кодировку, например ASCII или UTF-8, ее можно указать в аргументе.

Если вы производите чтение из файла с символами национальных алфавитов, необходимо указать кодировку файла.

Чтобы прочитать файл по одной строке, используйте метод OpenTextFileReader объекта My.Computer.FileSystem . Метод OpenTextFileReader возвращает объект StreamReader. С помощью метода ReadLine объекта StreamReader можно прочитать файл по одной строке. Проверить, достигнут ли конец файла, можно с помощью метода EndOfStream объекта StreamReader .

Чтение данных из текстового файла

Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь. В следующем примере содержимое файла test.txt считывается в строку и затем отображается в окне сообщения.

Dim fileReader As String fileReader = My.Computer.FileSystem.ReadAllText("C:\test.txt") MsgBox(fileReader) 

Чтение данных из зашифрованного текстового файла

Для считывания содержимого текстового файла в строку используйте метод ReadAllText объекта My.Computer.FileSystem , указав путь и тип кодировки файла. В следующем примере содержимое файла test.txt в кодировке UTF32 считывается в строку и затем отображается в окне сообщения.

Dim fileReader As String fileReader = My.Computer.FileSystem.ReadAllText("C:\test.txt", System.Text.Encoding.UTF32) MsgBox(fileReader) 

Отказоустойчивость

При следующих условиях возможно возникновение исключения:

  • Путь является недопустимым, поскольку путь представляет собой строку нулевой длины (пустую строку), либо содержит только пробелы, либо содержит недопустимые знаки, либо представляет собой путь к устройству (ArgumentException).
  • Путь не является допустимым, поскольку он равен Nothing (ArgumentNullException).
  • Файл не существует (FileNotFoundException).
  • Файл уже используется другим процессом или возникла ошибка ввода-вывода (IOException).
  • Длина пути превышает максимальную длину, определенную в системе (PathTooLongException).
  • Имя файла или каталога в пути содержит двоеточие (:) или имеет недопустимый формат (NotSupportedException).
  • Не хватает памяти для записи строки в буфер (OutOfMemoryException).
  • У пользователя отсутствуют необходимые разрешения на просмотр пути (SecurityException).

По имени файла не всегда можно с уверенностью судить о его содержимом. Например, файл с именем Form1.vb может вовсе не быть исходным файлом Visual Basic.

Следует проверять все входные данные перед использованием их в приложении. Содержимое файла может отличаться от ожидаемого, поэтому может не удаться прочесть файл с помощью методов чтения.

См. также

  • FileSystem
  • ReadAllText
  • Чтение из файлов
  • Практическое руководство. Чтение из текстовых файлов с разделителями-запятыми
  • Практическое руководство. Чтение из текстовых файлов с полями фиксированного размера
  • Практическое руководство. Чтение из текстовых файлов различных форматов
  • Исправление неполадок, связанных с чтением из текстовых файлов и записью в такие файлы
  • Пошаговое руководство. Операции с файлами и каталогами в Visual Basic
  • Кодировки файлов

Совместная работа с нами на GitHub

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

Как прочитать кусками текстовый файл vba

у меня есть текстовый файл со списком баз (150 строк)

мне надо из vba скрипта прочитать этот файл и циклом
rar a -dh -m1 -s -r -y -x@not.lst d:\_arj\ТУТ СТРОКУ ИЗ ТОГО ФАЙЛА z:\base1\И ТУТ СТРОКУ ИЗ ТОГО ФАЙЛА\*.*

как узнать сколь там строк вообще?
(2) Только прочитать их все по очереди и сосчитать, сколько прочитал .
читаю MSDN.
далеко не уходи

Dim fso, MyFile
Set fso = CreateObject(«Scripting.FileSystemObject»)
Set MyFile=fso.OpenTextFile(«bases.txt», 1, True)
Msgbox MyFile.ReadLine

читает первую строку.
а как остальные?

MyFile.SkipLine
Тебе проще попробовать — еще раз РеадЛине не прокатит?
🙁 Не прокатит :))
если перед РидЛайн поставить СкипЛайн, то читает вторую.
как бы в цикле все строки прочитать?
Поставь после (пожимая плечами)

Привожу кусок реально работающего скрипта. Он у меня установленные 1С базы из реестра читает.

Set f=fs.OpenTextFile(«base.reg», 1, 0,fformat)
Do While f.AtEndOfStream<>True
Ll = f.ReadLine
.
Loop

И не надо лохматить бабушку.

С уважением, Shaman/

кто лохматит твою бабушку?

(11) из Wscript.Shell можно напрямую работать с реестром.
Безо всяких экспортов в текстовички или ВК.

Shaman, а почему он у меня пустые мсжбоксы кажет?
я в твой скрипт добавил только мсжбокс Л1
(13) Вы не правы! Например, просканить ветку реестра Вы не сможете.

Dim fso, MyFile
Set fso = CreateObject(«Scripting.FileSystemObject»)
Set MyFile=fso.OpenTextFile(«bases.txt», 1, True)
Do While MyFile.AtEndOfStream<>True
Msgbox MyFile.ReadLine
Loop

работает у меня

(16) Так работает или нет?

(13) А как? Про метод RegWrite я знаю, но там не указывается в явном виде параметр реестра из которого необходимо считать значение. Просто берется последний элемент пути (названия ветки реестра). А в 1С сам параметр представляет из себя путь. Скрипт просто не понимает с какого места идет имя параметра. Если есть способ это дело победить, буду благодарен за совет.

Чтение txt-файла с определенного места

Author24 — интернет-сервис помощи студентам

Здравствуйте товарищи !
Подскажи как реализовать копирование данных из .txt с определенного места?

-диапазон для копирования 600 строк (ячеек)
-ореинтир для определения начала данных буква «h»

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

1 2 3 4 5
Workbooks.OpenText Filename:="fail" Range("D5:D605").Select Selection.Copy Application.DisplayAlerts = False Workbooks(Dir(fail2)).Close

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Чтение txt файла до определенного знака
Здравствуйте. Надо txt прочитать до определенного знака, чтобы до этого знака часть текста.

Чтение из файла определённого места и сортировка данных исходя из этих данных
Есть некий текстовый документ, содержащий информацию о посещении сайта в формате: Например.

Чтение из файла ‘New.txt’, запись четных строк в ‘1.txt’, а нечетных в ‘2.txt’
В общем все работает, но есть "НО", иначе бы не открывал тему. Содержимое исходного файла: 1 1 1.

Воспроизведение музыкального Wav (WAVE) файла с определенного места
Добрый день. Пытаюсь реализовать воспроизведение wav с определенного места. Все переменные из wav.

2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443

1 2 3 4 5 6 7 8 9 10 11 12 13 14
Sub t_10() Dim wbk As Workbook, wsh As Worksheet Workbooks.OpenText Filename:="D:\Документы\fail2", _ DataType:=xlDelimited, Tab:=True Set wbk = Workbooks("fail2") Set wsh = wbk.Worksheets(1) wsh.Range("D5:D605").Copy Set wsh = Nothing wbk.Close Set wbk = Nothing End Sub

134 / 79 / 6
Регистрация: 06.04.2009
Сообщений: 192

ЦитатаСообщение от Leksey Посмотреть сообщение

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

Чтобы уйти от жёсткой привязки к ячейкам, необходимо определить постоянные признаки необходимых данных и от этого уже отталкиваться. Если их выявить не удастся — боюсь задачу решить не получится.

Регистрация: 14.03.2011
Сообщений: 55

ЦитатаСообщение от yaser Посмотреть сообщение

Чтобы уйти от жёсткой привязки к ячейкам, необходимо определить постоянные признаки необходимых данных и от этого уже отталкиваться. Если их выявить не удастся — боюсь задачу решить не получится.

я уже указывал, что постоянным признаком является буква «h» , которая является началом необходимых данных.

текст в файле имеет подобный вид :

1 2 3 4 5 6 7
tanke9124 %%%%% %%%%%%%%%% h 0 V 0 h 1 V 2 h 2 V 3 . 

Добавлено через 2 минуты
а меняется расстояние между строками 2 и 4. т.е. в одном файле нужные мне данные начинаются с 4ой строки. а в другом могут начинаться например с 5ой.

2785 / 717 / 106
Регистрация: 04.02.2011
Сообщений: 1,443

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
Sub t_10() Dim wbk As Workbook, wsh As Worksheet Dim i As Long, m As Long, n As Long Workbooks.OpenText Filename:="D:\Документы\data.txt", _ DataType:=xlDelimited, Tab:=True Set wbk = Workbooks("data.txt") Set wsh = wbk.Worksheets(1) i = 3 Do While Not wsh.Cells(i, 1).Value Like "h*" i = i + 1 Loop m = i For n = wsh.UsedRange.Row + wsh.UsedRange.Rows.Count - 1 To 1 Step -1 If wsh.Rows(n).Text = "" Then Else Exit For Next wsh.Range(wsh.Cells(m, 4), wsh.Cells(n, 4)).Copy Set wsh = Nothing wbk.Close Set wbk = Nothing End Sub

Так будет работать? А вообще, Leksey, выкладывайте в следующий раз сокращенный пример файла, который пытаемся читать.

Мой пример ищет первую строку в первом столбце, которая начиналась бы с h, а также копирует от этой строки и до последней непустой строки

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *