fallologia » 22 июл 2005, 12:54
Здравствуйте!
Вопрос мой по C++ такой:
в программе-текстовом конверторе для замены строк я использую функции:
...
if(m_bVocView) m_sReadFromFile.Replace(" # "," \r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\\\\ ","\r\n\r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\\ ","\r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\r\n~~~","");
....
Проблема в том, что этих текстовых замен много, а текстовой файл большой (10 Мб).
В результате программе приходится читать файл от начала до конца много раз. И, если файл большой, подвисает. Как сделать так, чтобы все замены проводились на одном заходе?.. То есть заменить всю эту конструкцию на одну сплошную и стройную программную дорожку, допустим:
if (m_bVocView)
{...
Как тут обозначить, что читаемая строчка может быть одной, второй, третьей, и, исходя из этих вариантов, предписать программе произовдить ту или иную замену на одном заходе.
И вторая часть этого вопроса. Чтобы производить в файле замены я последовательно использую функции:
CreateFile
ReadFile
WriteFile
В результате файл вначале загружается в виртуальную память, в которой мучается вышеизложенными заменами по многу раз, а только потом пишется на диск.
А можно ли сделать конвертацию "на лету", чтобы во время своеобрзаного копирования файла из одного своего расширения в другое производились бы и замены?.. Пытался делать все через функцию openURL, файл красиво и быстро копируется, но замены строк в нем никакими выкрутасами произвести пока не удалось. Посоветуйте Ваши решения и этой проблемы.
Здравствуйте!
Вопрос мой по C++ такой:
в программе-текстовом конверторе для замены строк я использую функции:
...
if(m_bVocView) m_sReadFromFile.Replace(" # "," \r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\\\\ ","\r\n\r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\\ ","\r\n ");
if(m_bVocView) m_sReadFromFile.Replace("\r\n~~~","");
....
Проблема в том, что этих текстовых замен много, а текстовой файл большой (10 Мб).
В результате программе приходится читать файл от начала до конца много раз. И, если файл большой, подвисает. Как сделать так, чтобы все замены проводились на одном заходе?.. То есть заменить всю эту конструкцию на одну сплошную и стройную программную дорожку, допустим:
if (m_bVocView)
{...
Как тут обозначить, что читаемая строчка может быть одной, второй, третьей, и, исходя из этих вариантов, предписать программе произовдить ту или иную замену на одном заходе.
И вторая часть этого вопроса. Чтобы производить в файле замены я последовательно использую функции:
CreateFile
ReadFile
WriteFile
В результате файл вначале загружается в виртуальную память, в которой мучается вышеизложенными заменами по многу раз, а только потом пишется на диск.
А можно ли сделать конвертацию "на лету", чтобы во время своеобрзаного копирования файла из одного своего расширения в другое производились бы и замены?.. Пытался делать все через функцию openURL, файл красиво и быстро копируется, но замены строк в нем никакими выкрутасами произвести пока не удалось. Посоветуйте Ваши решения и этой проблемы.