Страницы: 1
RSS
Передача в переменную содержимого текстового файла средствами VBA
 
Коллеги, здравствуйте.
Подскажите, пожалуйста, по такому вопросу:
Есть на диске текстовый файл, зовут его 1.txt, расположен он в C:\1
Хочется прочитать в текстовую переменную ВСЕ содержимое файла. Рисую процедуру:
Код
Sub Test()
    Dim objFileSys As Object, sS As String
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
    sS = objFileSys.OpenTextFile("C:\1\1.txt").ReadAll
End Sub

В 1.txt заношу незатейливый текст:
"мама
мыла
раму
Раму мыла мама"
Запускаю процедуру пошагово - в переменной sS вижу нужный текст, ура!

Далее вставляю довольно большой кусок текста в файл (около 300 строк от 1 до 170 знаков в строке)
запускаю процедуру пошагово - в переменной sS сиротливая строка "ая"
Что это? Ограничение на количество знаков в переменной? Вроде там миллионы допускаются...

В общем вопрос - как забрать в переменную все содержимое текстового файла? Построчно читать и добавлять к переменной? Или все-таки есть более простой способ?
Подскажите, пожалуйста.
Спасибо за внимание.
Изменено: Пытливый - 20.03.2018 14:08:12
Кому решение нужно - тот пример и рисует.
 
Так и забирать. Из файла на диске!
 
Hugo, так я вон попытался, а она мне фигу кажет... :( Подскажите, как правильно это сделать?
Кому решение нужно - тот пример и рисует.
 
Да нормально работает, даже проверил - нет ошибок в раскладке :)
 
Hugo, подозреваю, что сейчас был юмор. Но из-за своей дремучести в этой теме - я его не понимаю. Подскажите, что я не так в процедуре пишу? Все не так, какая-то часть не так, и т.д. Я в теме работы с объектами и файлами - не разбираюсь от слова "совсем".
Изменено: Пытливый - 20.03.2018 14:18:34
Кому решение нужно - тот пример и рисует.
 
При обработке вот этого файла в строковой переменной sS появляется сиротливое значение "аю"
Изменено: Пытливый - 20.03.2018 14:30:31
Кому решение нужно - тот пример и рисует.
 
По мне так всё там так. А вот
Цитата
Пытливый написал:
Далее вставляю довольно большой кусок текста
может содержать подвох - бывало что бабки так "вставляли" в файл на десктопе. Без обид, мне не видать  :)
 
А как могут "вставлять" бабки? :) Я только "как дедки" вставлять умею...
Кому решение нужно - тот пример и рисует.
 
Дедки вставляют как надо, они глупостями не занимаются :)
 
Все понятно: взятка следователю
Цитата
Hugo написал:  бабки так "вставляли" в файл на десктопе.
Перевод из фени: пытались втиснуть доллары в досье на столе.
 
А я тогда что? :(
Почему вот так, а?
Кому решение нужно - тот пример и рисует.
 
Возможно дело в этом:

Да, дело в кодировке.
Изменено: Anchoret - 20.03.2018 14:42:17
 
Anchoret, а вы знаете - похоже! И как тогда быть?
Кому решение нужно - тот пример и рисует.
 
Пытливый, конвертировать? :)
 
Да это я сгоряча ляпнул, понятно, что конвертировать... Как это устроить средствами VBA, вот какой встанет тогда вопрос... Так проверил - пересохранил в ANSI кодировке - в переменную стало попадать...

З.Ы. Это что ж мне теперь - программно Notpad запусти, файл загрузи, SaveAs укажи... Блин. :(
Изменено: Пытливый - 20.03.2018 14:49:00
Кому решение нужно - тот пример и рисует.
 
Пытливый, пробовал через StrConv(txt, vbFromUnicode) и напрямую и через байтовый массив - кракозябры. Остается только вариант с записью этого текста в *txt через VBA.

Подсмотрел таки способ чтения таких файлов:
Код
    Open fw & fn For Binary Access Read As #1
    txt = Space(LOF(f) - 2)
    Seek #1, 3
    Get #1, , txt
    Close #1
'fn - FileName
'fw - путь к файлу
Изменено: Anchoret - 20.03.2018 15:31:45
 
А если так попробовать:
Код
sS = objFileSys.OpenTextFile("C:\1\1.txt", Format:=-2).ReadAll
Если нужен именно Unicode, то так:
Код
sS = objFileSys.OpenTextFile("C:\1\1.txt", Format:=-1).ReadAll
Изменено: Дмитрий Щербаков - 20.03.2018 15:32:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Anchoret, спасибо за помощь, пойду про процедуры перекодировки читать.
Всем спасибо за участие и новую информацию. :)
Кому решение нужно - тот пример и рисует.
 
Дмитрий Щербаков, работает! Спасибо!!  :)
Иииии-ха!!!
Кому решение нужно - тот пример и рисует.
 
Если только чтение и запись, то можно и самым простым способом:
Код
Sub ЗаписьВпеременную()
Dim a$
Open "C:\1.txt" For Input As 1
a = Input(LOF(1), 1)
Close 1
Debug.Print a
End Sub
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, спасибо за пример, в моем случае выдает вот это:
Код
 
Input past end of file (Error 62) 

Типа - не могу прочитать позицию ЗА размером файла (извините за корявую попытку перевода).
Кому решение нужно - тот пример и рисует.
 
Это он кодировку не понял. Если в Юникоде, то не прокатит так.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
Страницы: 1
Наверх