Вопрос по VBA (Работа с большими текстовыми файлами)

Компьютеры программирование excel базы данных VBA

Надо в txt файле(большом - это важно) заменить все символы с кириллицы на латиницу:
Подскажите оптимальные команды на VBA , для быстрого выполнения следующего:
1) Открыть файл txt на чтение и запись (Можно без вывода на экран)
2) Получить\прочитать строку n
3)заменить все символы в строке по принципу: русская "Й"= латинской"Q",й=q,Ц=W,Ф=A и т.д.
4) записать в туже строку результат, перейти к следующей строке.
Подскажите как лучще
Главное скорость выполнения (может распарралелить патоки или еще как) т.к. файл большой и банальный алгоритм:
Open "file.txt" For Output As #1 '- открываем на чтение
Do Until EOF(1) ' - кутим "петлю" до конца файла

....... # код замены символов

n = n + 1 ' -переходим к следующей строке
Loop
Close #1 ' закрываем файл
Данный алгоритм подвесит систему или будет очень тормозить , ну вопервых потому что сам код замены последовательно и посимвольно основанный на сравнениях из "правил" (а как иначе?) - для всех символов в файле - довольно ресурсожрущий процесс, во вторых файл (Большой) после открытия не закрывается до конца выполнения макроса - т.е. висит в оперативке.
Вот и спрашиваю грамотные коддеры подскажите куда копать - может можно:
Запустить "замену" всех символов не перебирая их построчно и ктомуже в несколько потоков, весь файл не грузить в оперативку - а производить замену блоками (по количеству свободной оперативной памяти - как не сбиться c "начало/конец" блока).

Примечание:
Сейчас изучаю кодировки- появилась мысль сделать это через смену кодировки, но остается вопрос как быть с БОЛЬШИМ (около 15GB) файлом - не влезет целиком в оперативку, может разрезать на кусочки а потом склеить? или еще как, сдается мне я "изобретаю велосипед" - и для моей задачи("{клавиатурная} замена символов") давно есть изящные решения?

Примечание:
M.Алексей, спасибо сейчас попробую, но сдается мне - то тоже система зависнет т.к. файл для оперативки просто Огромный - и как свободная кончится- тут все и "хрюкнет", Сейчас гуглю про криптографы и шифровщики - как в них реализовано: шифровать(по сути менять одни символы другими+ перемешивание) большие объеммы данных (Целыми разделами дисков по 200GB например).
Также есть вариант писать не втотже файл - а записывать в новый - тогда можно по последнему вхождению в новом файле - получать номер строки на котором все встало в преддыидущий раз и запускать замену уже с этого номера, но это все костыли - думаю есть принципиальбно другое изящноне решение- его и ищу. Например со сменой кодировки - Сначала весь файл из ANSI(где есть русская кодировка) илиUTF-8 перекидывается скажем в двоичную, а потом оттуда в кодировку где нет кирилицы, можно конечно это и макросом попробовать прямо по по таблице ANSI (зачем мне составлять свою), + твое предложение с массивами или мое с 2мя файлами , может что и выйдет, но думаю будет тоже самое - как кончится свободная память - все и зависнет.
Ответы:
Может быть так попробовать. Использовать массивы?
Файл поместить в массив iStr разделять по элементам символом Chr(10) перевод строки. iStr=Split(Файл.txt,Chr(10))
Создать два массива типа Arr1=Array("Й","й","Ц","Ф") и Arr2=Array("Q","q","W","A")
Затем берем в цикле по одной строке из массива строк файла.
Внутри другой цикл
For i = 1 To UBound(iStr)
    For j = 1 To UBound(Arr1)
         iStr(i)=Replace(iStr(i),Arr1(j),Arr2(j))
    Next j
Next i
Объединяем массив Join(iStr,Chr(10))
Записываем в файл txt
То что написано выше - совет. Не проверял.
Уверен, что с массивами будет работать в сотни раз быстрее.


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

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

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.