如何从一个文本文件中单个读入汉字,然后逐字写入memo或richedit 控件(续篇) ( 积分: 50 )

  • 主题发起人 主题发起人 清风杨
  • 开始时间 开始时间

清风杨

Unregistered / Unconfirmed
GUEST, unregistred user!
问题同上,前几天刚问过,调试成功,但是却不能读汉字,请教各位如果有汉字该怎样处理??
请教各位,希望有高手帮忙~~
 
问题同上,前几天刚问过,调试成功,但是却不能读汉字,请教各位如果有汉字该怎样处理??
请教各位,希望有高手帮忙~~
 
因为我希望可以显示汉字~~
 
red03hunter 如果你看到这个帖子,请继续帮忙~~
谢谢!!!
 
汉字?需要判断吧,
不过我不知道你是如何读入的,
简单点可以readine,定义一个widestring的变量,再用i循环
 
以前我用read 或者 readln 时,不能判断它的长度,因为好像长度都是由字节来计算的~~
等待中~~~~~~
 
可以用ByteType判断读入的字节是否单字节字符,如果返回mbLeadByte则多读一个字节
 
多读一个字节 ???
怎样读??
if nId<=nCount then
begin
if (bytetype(sltemp.Text[nid],1)=mbSingleByte )then
begin
Memo1.Text:=Memo1.Text+slTEMP.Text[nId];
inc(nId);
end else
begin
Showmessage('it ia a character');
//memo1.Text:=memo1.Text+sltemp.Text[nid,2];
inc(nid);
end
end else
Timer1.Enabled:=False;

有注释的那一句
 
先把这个文件装载到一个memo里面,设定他的字体为中文,然后从它里面一个一个取。这样就可以回避汉字双字节的问题。
 
设定为中文 我试试
 
用双字节处理三
PWideString
 
AnsiString s = "abcde源字符串";
WideString w = s; //w 就是转成 WideChar 的了,使用 w 就可以了

然后,你用
Copy(w,1,1);就是'a'
Copy(w,6,1);就是'源'
 
赋给双字节字符串变量,然后从该变量里读出
----------------------------------------
自由界面和报表的完美解决方案
http://www.anylib.com
 
你控件的load。。。。属性,直接加载那个文本文件
如 load.....(c:/abc.txt)

是load什么来着,想不起来了,你看一点明白了,
 
slTEMP.LoadFromFile(OpenDialog1.FileName);


只是
AnsiString s = "abcde源字符串";
WideString w = s; //w 就是转成 WideChar 的了,使用 w 就可以了

然后,你用
Copy(w,1,1);就是'a'
Copy(w,6,1);就是'源'

这一段有错误,格式不对,
 
test,test1: string;
a: WideString;
t1: string;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
a:WideString;
begin
Step := 3;
test := '北街甜1城家2具3城4楼5装7修3在4202339999即,双虎家具布艺沙发折金属玻璃餐桌折优惠(特价商品除外) 北街西林大桥转盘处';
Count := 8;
Index := 1;

a := test;

test1 := copy(a, Index, Count);
end;
 
var
a: WideString;
test, test1: string;
Count, Index: integer;
begin
test := '北街甜1城家2具3城4楼5装7修3在4202339999即,双虎家具布艺沙发折金属玻璃餐桌折优惠(特价商品除外) 北街西林大桥转盘处';
Count := 8;
Index := 1;

a := test;

test1 := copy(a, Index, Count);
end;
 
上面这段程序我在delphi6用过的,没有问题,可能是你用的是
AnsiString 我用的是String


这里分析错了,对不起,(这个贴子居然不能删,5555)
看下面的哈
 
var
s: AnsiString;
w: WideString;
begin
s := 'abcde源字符串';
w := s; //w 就是转成 WideChar 的了,使用 w 就可以了
Label1.Caption := Copy(w, 6, 1);
end;

先你没用起,是因为我写的是C++ Builder里的程序
这一段我改成Delphi6里
可以使用了
 
if nId<=nCount then
begin
if (bytetype(sltemp.Text[nid],1)=mbSingleByte )then
begin
Memo1.Text:=Memo1.Text+slTEMP.Text[nId];
inc(nId);
end else
begin
Showmessage('it ia a character');
memo1.Text:=memo1.Text+sltemp.Text[nid]+sltemp.Text[nid+1];
inc(nid,2);
end
end else
Timer1.Enabled:=False;
 

Similar threads

后退
顶部