【求】一个查找指定字符的函数 ( 积分: 50 )

  • 主题发起人 主题发起人 留香客
  • 开始时间 开始时间

留香客

Unregistered / Unconfirmed
GUEST, unregistred user!
首先定义了一种记录文本,文本中每一个记录是这样的:
记录号、总类别、描述、缩写、总序号、识别码
比如 Worm、一种新型的危险病毒、WORM.New、1、123345。
要求如下:
1,输入一个文件若干的字节,根据记录中识别码的文件位置偏移比较识别码,返回记录号和成功与否的Boolean值。
CheckFile(aBuf:Pointer; Var RecNo:LongInt):Boolean;
2,识别码部分自由定义,就这部分难。
一条记录里识别码可以有几个,在文件中的偏移也是几个。可能有这种情况:
if 识别码1 and 识别码2 then return RECNo。
if 识别码1 or 识别码2 then return RECNo。
识别码可能是几个字母汉字或者直接是16进制的。
要求函数能自适应。
3,要循环最少效率最高的
最后提供一个应用例子,一个读写删改记录文本的例子。
群:15790772
QQ:26812617
价格50元,可以加价。有意向可以直接私聊。
 
晕!
你这是问题还是推销啊![8D]
 
嘿嘿 都是啊
最主要还是求助嘛 会吗?
 
CheckFile(aBuf:Pointer; Var RecNo:LongInt):Boolean;
传入参数定义成动态数组,
 
什么意思啊,看不大明白
 
给你改了一个函数,觉得你可能刚用Delphi,如果可能把你的需求提得更清楚些我给你写个东东。另外觉得你定义的数据结构也不是很好,这些也是会影响处理速度的。
Function TForm1.GetList: boolean;
Var
TypeList : tStringList;
s : String;
Temp : tStringList;
I:Integer;
Begin
Try
Result := true;
TypeList := tStringList.Create;
TypeList.Text :=
'0;苹果;0' + #13 +
'0;梨;1' + #13 +
'0;香蕉;2' + #13 +
'0;葡萄;3' + #13 +
'1;芹菜;4' + #13 +
'1;油菜;5' + #13 +
'1;竹笋;6' + #13 +
'2;米;7' + #13 +
'2;粟;8' + #13 +
'3;鸡蛋;9' + #13 +
'3;驼鸟蛋;10' + #13 +
'3;鸭蛋;11';
{如果仅仅为了解析上面的数据,下面的排序去掉}
//typeList.sort;
SetLength(CheckWhat,TypeList.Count+2);

Temp := tStringList.Create;
Try
{分配内存应该放在这里,可以避免反复分配内存造成的性能损失,同时可以减少内存碎片}
SetLength(MyType, TypeList.Count);
For I := 0 To TypeList.Count - 1 Do
Begin
//s := TypeList.Strings;
//s := stringreplace(s, ';', #13, [rfReplaceAll]);
//Temp.Text := s;
{上面的操作可以用下面方式实现}
Temp.Delimiter := ';';
Temp.DelimitedText := TypeList;
//SetLength(MyType, High(MyType) + 2); 移到上面了
MyType.IDName := Temp[1];
MyType.ImageIndex := StrToInt(Temp[2]);
End;
Finally
Temp.Free;
End;
Except
Result := False;
End;
End;
 
谢谢teclick。
其实我是这样想的:
有一个文本数据,里面有很多行的苹果、梨子之类的文字,每一类子项比如苹果我用一个小程序来检索类似的,为了提高效率。我先定义了一个Treeview,是多选的
-水果
|____苹果
|____梨子
|____香蕉
|____椰子
于是,我就定义了 '0;苹果;0' 0表示水果 后面的零就是图标索引
定义一个A:array of boolean
if A[0] then
check(苹果);
if A[1] then
check(梨子);
…………
check()函数是搜索苹果或相近的东西,很耗费时间的
你能帮我吗?多谢。另有酬谢。
 
建议查看一下《数据结构基础》,这应该是一个遍历树的问题。
 
赞同jenhon的说法,这是个树遍历的问题,象上面的代码若是要进行调整(增加或删除)的话就要重新编写代码了,还要重新发布程序,个人认为还是好好研究下树的遍历吧!
 
根据Treeview的checkbox情况决定 定义的 A:array of boolean 如 苹果节点Checked 那么A[0]:=true
应该不是个遍历树的问题
 
1、把文本格式写几行出来
2、希望在什么条件下得到什么样的结果
直接点,不用写那么多。那些都是你的想法,容易误导别人。
至少我是没搞清LZ想说什么。

说一下与速度无关的话。在写法上:
1、开嘛不用
with TypeList do
begin
Add('0;苹果;0');
Add('0;葡萄;3');
end;
2、Temp知道Free, TypeList为何忘了Free;
.......
没看明白,就不多说。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
922
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部