各位高手,一个关于Tstrings的问题?(100分)

  • 主题发起人 主题发起人 网魂
  • 开始时间 开始时间

网魂

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi写个程序,完成以下功能:

1找出其中每个类定义,去掉其中的private部分。
2将剩下的部分存入另一个文件。

var
temp: Tstrings;
i: integer;
b: boolean;
begin
temp := Tstrings.Create;
temp := Memo1.Lines;
for i := 1 to temp.Count do
begin
if StrIComp(pchar(trim(memo1.Lines[i-1])), 'private') = 0 then
b := true;
if StrIComp(pchar(trim(memo1.Lines[i-1])),'Protected') =0 then
b := false;
if StrIComp(pchar(trim(memo1.Lines[i-1])),'Public') =0 then
b := false;
if StrIComp(pchar(trim(memo1.Lines[i-1])),'Published') = 0 then
b := false;
if b then
memo1.Lines.Delete(i);
end;
程序在碰到Private时,每次都运行memo1.Lines.Delete(i)这句,
但到最后都没有删除任何东西!!请各位赐教!谢谢!Mail:shengjianlu@sina.com
如有更好的方法,那就更好了!
 
这样吧,先循环一下,记录下 private 的行 index1 和 最接近它的 protected,public,published 的 index2

然句 For I:= Index2 downto Index1 do memo1.Lines.Delete(I);
 
好像没有错,除了i应从0 到Count-1,和temp的复制不正确之外,你在哪里存盘的?
 
网魂,恭喜你啊,我终于想到一个好办法了,哈哈哈哈

var
I: Integer;
TempStr: String;
begin
I:= 0;
While I <= Memo1.Lines.Count do
begin
TempStr:= LowerCase(Trim(Memo1.Lines));
if TempStr = 'private' then
begin
Repeat
Memo1.Lines.Delete(I);
TempStr:= LowerCase(Trim(Memo1.Lines));
Until (TempStr = 'protected') or (TempStr = 'public') or (TempStr = 'published');
end;
I:= I + 1;
end;
end;

 
这个办法只循环了一遍,比我开始的建议优化多了,呵呵

不过如果 private 之后找不到 protected, public or published,就会陷入死循环,
我想这种情况应该不会有的
 
<= 改为 <
 
多谢了!
 
后退
顶部