放到stringstream中处理,处理完了在转回string。
解决方案 »
- 奇怪的invalid class typecast问题
- TOLEContainer的菜单问题,word里面的新建,打开,打印预览等失效
- 怎么将内存地址转化为Integer类型?
- WriteComponent为何没有保存子控件?
- 急急急!!!! 关于 DBImage 在 Access 中的使用问题
- 做过OA的兄弟或想了解OA的兄弟,路过请留下QQ号令.....
- Dbgrid的问题
- 菜鸟问题
- delphi中有一句richedit.perform(EM_EXLIMTTEXT,0,8000000);是why???望大虾指教!!!!
- 求验证小灵通号码正则表达式!
- 讨论:C++Builder和Delphi的运行效率
- 请smhpnuaa来领分啊(因为问题还没完全解决,所以先给100分哈^_*)
StringStream怎么用?我没用过,请告诉我。
netlib(河外孤星):
我用下面的代码测试,花了9秒钟!还是太慢啊:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=1 to 1000 do
Memo1.lines[memo1.lines.count-1]:=Memo1.lines[memo1.lines.count-1]+inttostr(i);
end;
var
i:integer;
begin
for i:=1 to 1000 do
Memo1.lines.add(inttostr(i));
end;
这样很快,
你的代码和
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
S:string;
begin
for i:=1 to 1000 do
S:=S+inttostr(i);
showmessage(S);
end;
的效率是一样的,根memo1没有关系。
var
i:integer;
begin
for i:=1 to 1000 do
Memo1.lines.add(inttostr(i));
end;
这样很快,
你的代码和
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
S:string;
begin
for i:=1 to 1000 do
S:=S+inttostr(i);
showmessage(S);
end;
的效率是一样的,根memo1没有关系。
var
i:integer;
begin
for i:=1 to 1000 do
Memo1.lines.add(inttostr(i));
end;
这样很快,
你的代码和
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
S:string;
begin
for i:=1 to 1000 do
S:=S+inttostr(i);
showmessage(S);
end;
的效率是一样的,根memo1没有关系。
2)不要直接操作memo.Lines,因为除了Tstrings的处理外,还有界面的处理,效率太差,我宁可在代码中使用另外一个TStrings,然后一次赋值。
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
a: TStrings;
begin
a := TStringList.Create;
a := memo1.Text;
for i:=1 to 1000 do
a[a.count-1]:=a[a.count-1]+inttostr(i);
memo1.text := a;
end;
你这样做的话Memo中每行只有一个数据,不太好。
我爱洁洁:
你这段代码有错,你测试下就知道了。另外,我用for i:=1 to 1000 do……的代码只是测试用而已,最终我还是要处理我的长字符串的。帮助看了一下,不是太明白,能否直接告诉我怎么处理?我的长字符串中的有些数据是要丢掉的,所以只能把它copy出来。
解决问题后另外给50或更多分。多谢各位高手!
请大家告诉我我的问题到底该怎么处理。比如说我第一次取的数据是copy(string,1,40),第二次取的数据是copy(string,1000,60),我该怎么做?我也不一定要放到Memo中,放字符串中也行,关键是效率和容易处理。
然后对字符串操作,最后在等于回去!
var
Data:string;
Buf:TStringStream;
P:pchar;
i,Count:integer;
...
Buf:=TStringStream.Create('');
Data:='.....................................';
....
while .....do begin
i:=/////;
Count:=////;
P:=@Data[i];
Buf.Write(P,Count);
.......
end;
.....
Memo1.Text:=Buf......
这样,用内存流和指针来操作,应该非常快的。
其余其他的,不要每次都添加到Memo里面,可以采取双缓冲的方法啊,在内存里面建立一个临时的用来保存String的对象,在全部处理完成之后,才一次性的赋给Memo,这样速度应该很快。