Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ускорить перекодировку

2.2K
10 ноября 2002 года
dak
3 / / 10.11.2002
Hi All !
Необходимо перекодировать текст из одной кодировки в другую. На небольших текстах (до 100 кб) данный код работает сносно (по времени :) ),
на объемах свыше 1 Мб, можно успеть выспаться :(
Как ускорить перекодировку ?

int count=0;
int length=0;
char *string=NULL;

count=RichEdit1->Lines->Count;
for (int c=0; c<count; c++)
{
string=RichEdit1->Lines->Strings[c].c_str();
length=strlen(string);
decode(string,length);
RichEdit1->Lines->Strings[c]=string;
}
250
11 ноября 2002 года
Joker
1.4K / / 20.02.2000
Цитата:
Originally posted by dak
Hi All !
Необходимо перекодировать текст из одной кодировки в другую. На небольших текстах (до 100 кб) данный код работает сносно (по времени :) ),
на объемах свыше 1 Мб, можно успеть выспаться :(
Как ускорить перекодировку ?

int count=0;
int length=0;
char *string=NULL;

count=RichEdit1->Lines->Count;
for (int c=0; c<count; c++)
{
string=RichEdit1->Lines->Strings[c].c_str();
length=strlen(string);
decode(string,length);
RichEdit1->Lines->Strings[c]=string;
}



НЕ в курсах чего декоде делает..(лень глядет время позднее), но если я правильно понял то юзай:
CharToOem

442
11 ноября 2002 года
HexoGenus
121 / / 20.03.2000
1. Попробуй сэкономить время на преобразованиях
decode(RichEdit1->Lines->Strings[c].c_str(),RichEdit1->Lines->Strings[c].Length());
Все равно ты не можешь во время конвертирования редактировать текст так как заранее определил количество строк в RichEdit1 и изменение их количества в процессе конвертирования приведет к глюкам...
2. Если ты будешь передавать просто ссылку на массив .c_str() то ты не сможешь изменить длинну строк а иногда это может пригодиться при конвертировании например "я" в "ya" поэтому лучше передавать ссылки на String например:
String s="привет";
String strSource="абвгдеёжзийклмнопрстуфхцчшщьыъэюя";
String strTarget="abvgdeejziyklmnoprstufxcchhii'eya";
for (int i=1; i<=s.Length(); i++)
{
for (int j=1; j<=strSource.Length(); j++)
{
if (s==strSource[j]) s=strTarget[j];
}
}
ShowMessage(s);
3. Вобщем если не перебрасывать содержимое
RichEdit1 в отдельный массив для обработки то это наверно самый быстрый способ (основные тормоза скорее всего идут не от переброски строк... такие операции выполняются мгновенно а от попытки динамически отображать это все на экране в RichEdit1 с графикой виндоза всегда тормозит...)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог