Перейти к содержимому

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

  • автор:

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

Argument ‘Topic id’ is null or empty

Сейчас на форуме

© Николай Павлов, Planetaexcel, 2006-2023
info@planetaexcel.ru

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

ООО «Планета Эксел»
ИНН 7735603520
ОГРН 1147746834949
ИП Павлов Николай Владимирович
ИНН 633015842586
ОГРНИП 310633031600071

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

Копирование из текстового файла в заданные ячейки книги

Geart:
Добрый день. Возникла задача копирования заданного числа знаков из известной строчки текстового файла. Возможно ли это реализовать на VBA? Я новичок в этом деле, поэтому если можно объяснять по понятнее. 🙂 Пример тестового файла во вложении.

McConst:
Принципиально это возможно. Вод код, который использует функцию для чтения произвольной строки с определенной длиной начиная от заданной позиции. Если длина не задана, по умолчанию берется длина всей строки. Если позиция в строке не задана, по умолчанию берется позиция первого символа в строке.
Код: (vb)
Public Sub test()
Worksheets(1).Cells(1, 1) = FileToString(File:=»C:/Doosan_report_2013-07-17.txt»)
End Sub

Public Function FileToString(File As String, Optional Row As Long = 1, Optional Position As Long = 1, Optional length As Long = 0) As String
‘Чтение куска текста из файла

Dim text As String ‘Сюда будем читать весь текст из файла
Dim List As Variant ‘Здесь текст будет храниться построчно
Dim oStream

Set oStream = CreateObject(«ADODB.Stream»)
With oStream
.Type = 2 ‘Текстовый файл
.Charset = «utf-8» ‘Кодировка, в которой хранится текст в данном файле
.Open
.LoadFromFile File
text = .ReadText ‘Чтение текста из файла в переменную
.Close
End With
Set oStream = Nothing

List = Split(text, vbCrLf)
‘Если длина не задана, тогда длина будет равна длине строки в файле
If length = 0 Then length = Len(List(Row))
‘проверяем, чтобы заданная в функции длина не превышала длины строки в файле от указанной позиции
If length > (Len(List(Row)) — Position + 1) Then length = Len(List(Row)) — Position + 1
FileToString = Mid(List(Row), Position, length)

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

Geart:
Спасибо вам огромное, будем разбираться. )))

kuklp:
Можно проще:
Код: (vb)
Public Sub test()
Dim fName$, mRow&, mLen&, mPos&
fName = «D:\DOKUMENT\EXCEL\Module1.txt»
mRow = 9: mLen = 30: mPos = 10
Worksheets(1).Cells(1, 1) = www(fName, mRow, mPos, mLen)
End Sub

kuklp:
Сейчас только посмотрел файл ТС. Там еще проще можно(макрорекордер):
Код: (vb)
Sub www()
Application.DisplayAlerts = 0
ActiveWorkbook.Sheets.Add
ActiveWorkbook.XmlImport URL:=»H:\Doosan_report_2013-07-17.txt», ImportMap _
:=Nothing, Overwrite:=True, Destination:=Range(«A1»)
Application.DisplayAlerts = -1
End Sub
или:
Sub www1()
Код: (vb)
With ActiveSheet.QueryTables.Add(Connection:= _
«TEXT;H:\Doosan_report_2013-07-17.txt», Destination:=Range(«A1»))
.Name = «Doosan_report_2013-07-17_8»
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = -535
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
ActiveSheet.UsedRange.Replace vbTab, «», xlPart
End Sub
А там уж выбирай нужную строку 🙂

Практическое руководство. Чтение из текстовых файлов в 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, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Тестируем алгоритм обработки данных в Excel на Visual Basic for Application и тёплые ламповые чётные гармоники

В первом приближении надо загрузить wav или mp3 файл с музыкой в Excel, провести над загруженными данными Digital Signal Processing (DSP) или Цифровую Обработку Сигнала (ЦОС) по определенному алгоритму на Visual Basic for Application (VBA), сохранить результат в wav файл и прослушать его.

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

Парабола аппроксимирует ВАХ триода

Выгрузить данные в текстовый файл csv для использования с Excel из исходных звуковых файлов формата wav и mp3 возможно с помощью программы Audacity. Это многоплатформенный аудиоредактор звуковых файлов, ориентированный на работу с несколькими дорожками. Программа была выпущена и распространяется на условиях GNU General Public License. Работает под управлением операционных систем: Windows, Linux, macOS, FreeBSD.

Excel и Audacity

Генерируем синусоидальный сигнал в Audacity (можно сгенерировать в Excel, но мы проверяем работоспособность всей предложенной цепочки действий).

Sin in Audacity

Экспортируем и загружаем в Excel и обрабатываем F(x) = (sin(x)+1)*(sin(x)+1) для получения чётной («ламповой»?) гармоники.

Входной sin и после обработки

Проверяем, появилась ли вторая гармоника после обработки.

Вторая гармоника после обработки

Проделаем операции по загрузке, обработке и выгрузке с реальным музыкальным сигналом (гитара).

Исходный музыкальный сигнал (гитара) и его спектр

Загружаем исходный музыкальный сигнал в Excel и обрабатываем для обогащения гармониками.

Исходный сигнал до и после обработки в Excel (в csv https://disk.yandex.ru/d/ynhW-4bQc8TCDg)

Экспортируем из Excel в csv, импортируем в Audacity, прослушиваем и сравниваем.

Сохранено на Яндекс.Диск WAV файл https://disk.yandex.ru/d/pIueCZFySiL2Aw

Визуально разница в «осцилограммах» хорошо заметна, а вот на слух отличия не так очевидны. Мне, на мой слух, кажется, что обработанный звук немного ярче и удары по струнам немного более отчетливы. Конечно, хотелось бы более яркого и впечатляющего эффекта. Возможно надо использовать более высокие степени или дробные степени вместо возведения в квадрат или экспоненту при обработке или попробовать несимметрично смещенный arctg(x), или попробовать многоканальную систему наподобие Aphex Aural Exciter. Жду предложений в комментариях. >>Подписывайтесь на мой Хабр-профиль.

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

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