如何过滤非中文字符 ( 积分: 0 )

  • 主题发起人 主题发起人 zqssoft
  • 开始时间 开始时间
Z

zqssoft

Unregistered / Unconfirmed
GUEST, unregistred user!
501 试验 shi4 yan4
502 眼光 yan3 guang1
503 过程 guo4 cheng2
504 树林 shu4 lin2
505 地方 di4 fang1

如何过滤上面文本中的数字和英文字母,仅保留中文.不要用替换.
为何用下面的代码,返回的文本为乱码:
var
S: string;
I: Integer;
begin
memo2.Lines.Clear;
S :=memo1.Text;
for I := 0 to Length(S) do //中文大于127
if Ord(S) > 127 then
Memo2.Text:= Memo2.Text + (S);
end;
 
哥们,我试了一下,可以达到你的要求


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
S1,S: string;
I,J: Integer;
begin
for I := 0 to Memo1.Lines.Count-1 do
begin
S := Memo1.Lines.ValueFromIndex;
S1 := '';
for J := 1 to Length(S) do
if not(S[J] in [#0,'0'..'9','a'..'z','A'..'Z']) then
S1 := S1+S[J];
Memo2.Lines.add(S1);
end;
end;

end.
 
谢谢abraveboy,通过您的方法,问题解决了.呵呵.真高兴啊.
 
楼主自己的方法上有逻辑错误。
if Ord(S) > 127 then
Memo2.Text:= Memo2.Text + S + S[I+1]; //还要加上一个字节,中文是双字节的
PInteger(@i)^=i+1; //跳过对下一个字节的检查
 
TO ufo! 不知道,你除了学狗叫之外还有什么本事?

顺便问一句,你是女人吗?
 
其实abraveboy,的方法不好,
楼主自已的方法经ufo 修正后应该是正确的方法。
 
后退
顶部