如何访问memo的某一行中某一个字符(如汉字)(100分)

  • 主题发起人 主题发起人 song2
  • 开始时间 开始时间
S

song2

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在memo中选定一段话,把其中的每一个汉字识别出来,定位到音库中该汉字读音指针,达到语音合成效果.急判各位专家不吝指教.
 
TMemo.SelText;
我觉得这就可以了。
 
何为选定的一段话,IS SELECT USE SELTEXT,OR USE TEXT
 
在Memo中选定一段文字可以参见Delphi的Demo程序TextEdit.dpr, 在此不多谈. 我只说一下怎样从一个字符串里面提取出汉字并且得到汉字德国标码.
假设选定的文字为SS, 我们先将他转换成一个WideString WS, 然后把WS当成一个从
1开始的数组长度为Length(WS);
做一个循环, 一次取出WS数组的一个元素作为一个
字符串S, 如果Length(S)>1, 则S为一个汉字, 用后面给出的GBCode函数可以得出其
国标码.
var
GBCodeArray: array [0..255] of UINT;
GBCodeArrayLength: word;
function GBCode(value:string): UINT;
begin
if Length(value)=1 then
Result:=Ord(Value[1])
else
if Length(value) > 1 then
begin
if Value[1] in LeadBytes then
Result := (Ord(Value[1]) shl 8 ) or Ord(Value[2])
else
begin
Raise(Exception.Create(value+'不是合法的中西文字符!'));
Exit;
end;
end;
end;

procedure GetGBCodes(SS: String);
var
WS: WideString;
S: String;
i: integer;
begin
WS := SS;
for i:=1 to Length(WS)do
begin
S:=WS;
if Length(S)=1 then
GBCodeArray[i-1]:=Ord(Char(S[1]))
else
GBCOdeArray[i-1]:=GBCode(S);
end;
GBCodeArrayLength := Length(WS);
end;

procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
memo1.Clear;
GetGBCOdes(edit1.text);
for i:= 0 to GBCodeArrayLength-1do
memo1.Lines.Add(IntToStr(GBCodeArray));
end;
 
哪有那么简单?
读取汉字就可以得到读音了吗?
多音字怎么办?
轻声怎么办?
还是要做语法分析啊!?
对自然语言做语法分析可就难了,
何况还是天下头号复杂的中文。
 
取字比较容易,判断内码是关键,最复杂是李颖说的,但一般无需要求象李颖说的那么高
 
多人接受答案了。
 
后退
顶部