Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Вниз

проблема с юникодом   Найти похожие ветки 

 
adnan123   (2007-01-31 15:33) [0]

Вопрос у меня к опытным программистам. Вот столкнулся с такой задачей. Написал программу орфографии. С русским и английским языком нормально работает, а вот с юникодом нет. На Delphi 7   установил TNTUnicode Controls .так пашет, но как видно из фотки не правильно. Когда текст обрабатывается, вместо юникодовских букв вставляется вопросительные знаки. Пробовал на Delphi 2005, там вообще программа не реагирует, при нажатие на кнопку программа не отвечает , после этого вставляю русский или английский текст, тоже не пашет. А с первого раза (если юникодоский текст не вставляю) все нормально работает.

База : BDE + Paradox

Может есть какие ни будь предложении у кого ни будь, где ошибка? Может переменные не того формата или проблема в настройках базы?
Всем заранее спасибо

Вот  текст программы (это тот кусок, где ошибка может быть)

var

 Form1: TForm1;
 savenum: Integer;
 a: Array [1..254] of Byte;
 C: Array [1..10000] of WideChar;
S, T: WideString;
z: WideChar;
I, wi, unic, l: Integer;

word: WideString;
SerChar: WideChar;
ilk, x, mi, son, tnum: Integer;
strlen: Integer;
str: Array[1..100000] of WideString;
orpho: Array[1..100000] of WideString;
b: Array[1..10000] of Integer;
e: Array[1..10000] of Integer;
tmp, FoundW: WideString;
say, curs, len: Integer;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin

SerChar:= " ";
tnum:=1;
T:= TnTRichEdit1.Lines.Text;
word:= Trim(T)+SerChar;
word:= AnsiLowerCase(word);
word := StringReplace(word, ".", " . ",[rfReplaceAll]);
word := StringReplace(word, ",", " , ",[rfReplaceAll]);
word := StringReplace(word, "?", " ? ",[rfReplaceAll]);
word := StringReplace(word, "!", " ! ",[rfReplaceAll]);
strlen:= Length(word);

While Pos(SerChar,word) > 1 Do Begin
x:= Pos(SerChar,word);
str[tnum]:= Copy(word,1,x-1);
delete(word,1,x);
tnum:= tnum+1;
word:= TrimLeft(word);
end;

FoundW:= "";

curs:= 0;
say:= 0;
For mi:= 1 To (tnum-1) Do Begin
Table1.FindKey([str[mi]]);
If Table1.FindKey([str[mi]]) Then Begin

len:= length(str[mi]);
curs:= curs+ len + 1;

FoundW:= FoundW + str[mi] + SerChar;

end else Begin
say:= say+1;

len:= length(str[mi]);

b[say]:= curs;
e[say]:= len;
//ilk:= curs;
//son:= len;
curs:= curs + len + 1;
FoundW:= FoundW+ str[mi] + SerChar;
 ListBox1.Items.Add(str[mi]);
 end;
TnTRichEdit1.Lines.Text:= FoundW;

end;
 For mi:= 1 to say Do Begin
  TnTRichEdit1.SelStart:= b[mi];
  TnTRichEdit1.SelLength:= e[mi];
  TnTRichEdit1.SelAttributes.Color:= clRed;
end;

end;



 
Desdechado ©   (2007-01-31 15:38) [1]

А что, парадокс поддерживает юникод?

Навскидку:
procedure Delete(var S: string;...
function AnsiLowerCase(const S: string): string;


 
Amoeba ©   (2007-01-31 15:56) [2]


> Написал программу орфографии.

И где же здесь орфография?

И еще по части "блох" в коде (просто до смерти не люблю такого рода неряшливости):

tnum:=1; <- эта переменная и данная строка вообще не нужны, поскольку в реальности (во всяком случае в приведенном коде) всегда tnum = 1
...
str[tnum]:= Copy(word,1,x-1); <- достаточно str[1]:= Copy(word,1,x-1);
...
tnum:= tnum+1; <- нафиг надо с учетом вышесказанного
...
For mi:= 1 To (tnum-1) Do Begin <- и надо было до этого инкрементировать tnum!? А с учетов вышесказанного, и цикл здесь не нужен, поскольку его тело будет выполнено только один раз!


 
Anatoly Podgoretsky ©   (2007-01-31 16:07) [3]

> Desdechado  (31.01.2007 15:38:01)  [1]

Не только, но и StringReplace
Если для ряда функций есть эквиваленты в ТНТ, то для этой вроде есть.
ТНТ конечно решает много проблем, но не все, особенно в подобном случае.


 
adnan123   (2007-02-01 13:12) [4]

вот сама ошибка

http://www.iqtisadiyyat.com/trifles/untitled.JPG


 
AlexeyT ©   (2007-02-01 18:01) [5]

Где-то конвертируешь WideString в string (AnsiString). Отсюда и "вопросы". Проследи что нет этой ковертации и все комопненты (какие нужны) взяты из Tnt: TntMemo, TntEdit и т.д.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2007.03.25;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.161 c
2-1172760724
проходил мимо решил заглянуть
2007-03-01 17:52
2007.03.25
listbox


4-1161332775
Dmitry_177
2006-10-20 12:26
2007.03.25
будильник на API


2-1172919728
TIF
2007-03-03 14:02
2007.03.25
Регион и XP стиль: как их совместить вместе


6-1160395281
progmax
2006-10-09 16:01
2007.03.25
Таймер в cgi


15-1172478724
ocean
2007-02-26 11:32
2007.03.25
Windows installer error





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский