while not eof(F1) do begin readln(F1,Str1) 先读一行到字符串STR1 str:=str+str1; 把余下的字符串再加上现在这一行的字符串 然后再找是否有* if Pos('*',Str)>1 then begin LineStr:=copy(str,1,pos('*',str)-1); 取得的第一段 Str:=copy(str,pos('*',str)+1,Length(str)-Pos('*',str)) 余下的文本 end; end;
不知道这样会不会提高效率。 function TabStr(your_string: string): TString; var list: TString; tmp: string; i: integer; begin tmp:= ''; List:= TStringList.Create; for i:= 1 to Length(your_string) do case your_string[i] of '*': begin List.add(tmp); tmp:= ''; end; else tmp:= tmp + your_string[i]; end; if Tmp <> '' then List.add(tmp); result:= List; end;
var S: String; begin S := 'abc*dfg*rty98*kk'; S := StringReplace(S, '*', #13#10, [rfReplaceAll]); Memo1.Lines.Text := S; end;———————————————————————————————————— 宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。 ————————————————————————————————————
测试发现, fengjn(小枫)方法的效率大约是lxpbuaa(桂枝香在故国晚秋)效率的10倍。测试代码如下: type TForm1 = class(TForm) Memo1: TMemo; Memo2: TMemo; Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } str: string; procedure aa(str: string); procedure bb(str: string); public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.aa(str: string); var tmp: string; i: integer; begin tmp:= ''; memo1.Lines.BeginUpdate; for i:= 1 to Length(str) do case str[i] of '*': begin memo1.Lines.add(tmp); tmp:= ''; end; else tmp:= tmp + str[i]; end; if Tmp <> '' then memo1.Lines.add(tmp); memo1.Lines.EndUpdate; end; procedure TForm1.bb(str: string); var S: String; begin S := StringReplace(str, '*', #13#10, [rfReplaceAll]); memo2.Lines.BeginUpdate; Memo2.Lines.Text := S; memo2.Lines.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); var b: int64; begin memo1.Lines.Clear; b:= GetTickcount; aa(str); memo1.Lines.Add(inttostr(GetTickCount - b)); end;procedure TForm1.Button2Click(Sender: TObject); var b: int64; begin memo2.Lines.Clear; b:= GetTickcount; bb(str); memo2.Lines.Add(inttostr(GetTickCount - b)); end;procedure TForm1.FormCreate(Sender: TObject); var i: integer; begin for i:= 0 to 9999 do str:= Str + 'abcdefghijklmnopqrstuvwxyz' + '*'; end;end.
begin
readln(F1,Str1) 先读一行到字符串STR1
str:=str+str1; 把余下的字符串再加上现在这一行的字符串
然后再找是否有*
if Pos('*',Str)>1 then
begin
LineStr:=copy(str,1,pos('*',str)-1); 取得的第一段
Str:=copy(str,pos('*',str)+1,Length(str)-Pos('*',str)) 余下的文本
end;
end;
function TabStr(your_string: string): TString;
var
list: TString;
tmp: string;
i: integer;
begin
tmp:= '';
List:= TStringList.Create;
for i:= 1 to Length(your_string) do
case your_string[i] of
'*': begin
List.add(tmp);
tmp:= '';
end;
else tmp:= tmp + your_string[i];
end;
if Tmp <> '' then List.add(tmp);
result:= List;
end;
S: String;
begin
S := 'abc*dfg*rty98*kk';
S := StringReplace(S, '*', #13#10, [rfReplaceAll]);
Memo1.Lines.Text := S;
end;————————————————————————————————————
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
————————————————————————————————————
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
str: string;
procedure aa(str: string);
procedure bb(str: string);
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.aa(str: string);
var
tmp: string;
i: integer;
begin
tmp:= '';
memo1.Lines.BeginUpdate;
for i:= 1 to Length(str) do
case str[i] of
'*': begin
memo1.Lines.add(tmp);
tmp:= '';
end;
else tmp:= tmp + str[i];
end;
if Tmp <> '' then memo1.Lines.add(tmp);
memo1.Lines.EndUpdate;
end;
procedure TForm1.bb(str: string);
var
S: String;
begin
S := StringReplace(str, '*', #13#10, [rfReplaceAll]);
memo2.Lines.BeginUpdate;
Memo2.Lines.Text := S;
memo2.Lines.EndUpdate;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
b: int64;
begin
memo1.Lines.Clear;
b:= GetTickcount;
aa(str);
memo1.Lines.Add(inttostr(GetTickCount - b));
end;procedure TForm1.Button2Click(Sender: TObject);
var
b: int64;
begin
memo2.Lines.Clear;
b:= GetTickcount;
bb(str);
memo2.Lines.Add(inttostr(GetTickCount - b));
end;procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
for i:= 0 to 9999 do
str:= Str + 'abcdefghijklmnopqrstuvwxyz' + '*';
end;end.