VBA Write Очень большая строка - PullRequest
0 голосов
/ 08 февраля 2019

Итак, у меня есть большая строка vba, которую я пытаюсь записать как двоичный файл.У меня есть функция, которая делает это красиво.У меня есть очень длинная строка, скажем, около 80 тысяч.Эта строка правильно считывает данные из файла, правильно передает функции и печатает на экране.Но независимо от того, что я делаю, в любом случае, я могу получить более 39 КБ в файл.Я разделил строку на меньшие биты, полагая, что это ограничение VBA.Затем передать его моим fuction 42 символам одновременно.Seek (LOF) +1 пут - это то, что я делаю после открытия корзины, но ... Кажется, неважно, как я это называю.Двоичный, ASCI, пишу все сразу.Я получаю только последние 39 КБ.Вот функция, которую я использую для записи в файл.Насколько я могу судить, это ограничение памяти, а не грамматическая ошибка, и, вероятно, оно имеет мало общего с формой моего кода, а не с чем-то, чего я не вижу.

sub IBorrowedThis(hex_val as string)

dim output() as string
dim handle as long
output = Split(hex_val, "|")
handle = FreeFile
open "fp" for binary as #handle

For i = LBound(output) to Unbound(output)

seek #handle,LOF(handle) + 1
  put #handle, , cbyte("&H" & output(i))
next i

close #handle

end sub

Итак, я проверил все это по частям, и все работает.добавление до конца включено.только не для больших файлов.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Еще один более простой способ записи двоичной строки в файл:

SUB WriteBinaryStringToFile (hex_val AS STRING)
    DIM handle AS LONG
    handle = FREEFILE
    OPEN "binary2.tst" FOR BINARY AS #handle
    SEEK #handle, LOF(handle) + 1
    PUT #handle, , hex_val
    CLOSE #handle
END SUB
0 голосов
/ 09 февраля 2019

Простой способ записи двоичной строки в файл:

SUB WriteBinaryStringToFile (hex_val AS STRING)
    DIM c AS STRING * 1
    DIM I AS LONG
    DIM handle AS LONG
    handle = FREEFILE
    OPEN "fp" FOR BINARY AS #handle
    FOR I = 1 TO LEN(hex_val)
        c = MID$(hex_val, I, 1)
        SEEK #handle, LOF(handle) + 1
        PUT #handle, , c
    NEXT I
    CLOSE #handle
END SUB
...