Ускорить перекодировку
Необходимо перекодировать текст из одной кодировки в другую. На небольших текстах (до 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;
}
Цитата:
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;
}
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
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 с графикой виндоза всегда тормозит...)