delphi提取字符串
======================================
>>>>>>>>张三是山东人.>>>>>
>>>>李四是江西人.>>
>>>王五是广东人...>>>
>呼七是内蒙古人..>>>>
>>刘八是甘肃人.....>
…………
======================================
现用delphi将test.txt文件中的省份名提取出来.
并用memo组件将其显示出来.
memo中显示的应该是:
山东
江西
广东
内蒙古
甘肃
希望能给出个delphi函数或过程... 展开
1.读入文本
2.先按行提取!!!
3.逐字检索,行中寻找特殊标记“是”
4.发现标记后,打开开始记录开关
5.开始记录开关打开后,一直添加记录检索过的字,并且行中寻找特殊标记“人”
6.发现标记后,打开结束记录开关
7.结束记录开关打开后,对记录的字符进行处理,添加到文本框中,且跳出当前行!
。。继续第2步
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
n,n1:integer;
S:string;
ST,SW,SJL:string;
STF,SWF:boolean;
begin
Memo1.Lines.LoadFromFile('test.txt');
Memo2.Clear;
ST:='是';
SW:='人';
for n:=0 to Memo1.Lines.Count-1 do
begin
S:=Memo1.Lines.Strings[n];
SJL:='';
STF:=false;
SWF:=false;
for n1:=1 to length(S)-1 do
begin
if STF=false then
begin
if S[n1]=ST[1] then
begin
if S[n1+1]=ST[2] then
begin
STF:=true;
end;
end;
end
else
if SWF=false then
begin
SJL:=SJL+S[n1];
if S[n1]=SW[1] then
begin
if S[n1+1]=SW[2] then
begin
SWF:=true;
end;
end;
end
else
begin
SJL:=copy(SJL,2,Length(SJL)-2);
Memo2.Lines.Add(SJL);
break;
end;
end;
end;
end;
end.
先找到是的位置 int nPos := Pos('是', *.txt.Lne1);
然后在整行数据中截取所需要的字符串 Copy(*.t.Line1,nPos+1,2)
procedure TForm1.Button1Click(Sender: TObject);
var
sdata :TStrings;
text :string;
begin
text := 'TXT|EXE|COM';
sdata := TStringList.Create;
ExtractStrings(['|'],[],Pchar(text),sdata);
showmessage(sdata[0]); //显示TXT
end;
Unit
Classes
Syntax
ExtractStrings(Separators: TSysCharSet; WhiteSpace: TSysCharSet; Content: PAnsiChar; Strings: TStrings): Integer;
Separators 参数指定分割字符。
WhiteSpace 参数指定每个子串开头被忽略的字符s。
Content 参数就是被分割的“源”串了。
Strings 参数用于接收分割后的各个子串。它的原有内容不会被清空。别忘了对Strings进行Create哦。
另外,EctractStrings不会把空串放入Strings中去。
举个例子吧:
如果我想分割以下字符串: ABC|... DEF|#### GHI|"中华网URL
希望得到下面四个字符串:
1、ABC
2、DEF
3、GHI
4、中华网URL
那么可以用下面的代码:
uses Classes;
var
ASource: PChar;
AStr: String;
ACount: Integer;
AStrings: TStringList;
begin
ASource := 'ABC|... DEF|#### GHI|"中华网URL';
AStrings := TStringList.Create;
try
ACount := ExtractStrings(['|'], [' ','#','.'], ASource, AStrings);
//........................
finally
AStrings.Free;
end;
end.