Если ваш CSV-файл содержит многострочные поля в кавычках, то есть только chr(10) (0x0A)
, чтобы сделать разрыв (что, по-видимому, используется по умолчанию для экспортированных CSV-файлов Excel 2007), а не chr(13)+chr(10)
, тогда стандартная обработка файла VBA отлично работает, используя line input #1
и split
. В результате вы получаете один элемент динамического массива поля с новой строкой внутри него.
Пример для файла csv, в котором могут быть новые строки в поле 3 (4):
dim recFields as variant
dim rec as string
open "testfile.csv" for input as #1
line input #1, rec
while not eof(1)
recFields = split(rec,vbTab)
recFields(3) = replace(recFields(3),chr(10),"|")
' May want to remove quotes as well
recFields(3) = replace(recFields(3),chr(34),"")
' Do some stuff here.
' Then read next record
line input #1,rec
wend
close #1
Ключ имеет строки, представленные в поле как 0x0A
, а не 0x0C+0x0A
, и использует динамический (вариантный) массив для разделения записи. Я боялся справиться с этой ситуацией, пока не понял, что под старым добрым VBA это работает. Страшная альтернатива чтения вперед, затем назад (например, с использованием PHP ftell
и fseek
) была исключена!