用delphi7开发,delphi还算熟悉,autocad二次开发刚刚接触。
想在很多dwg文件中,查找含有某一字符串的文件,想用如下思路:
1、用lstFiles:Tstringlist获取所有dwg的路径。(实现)
2、遍历lstFiles,逐个打开dwg,并查找。
步骤2中,
for i:=0 to lstFiles.Count-1 do
begin
……//打开dwg文件,
for j := 0 to obj_ModelSpace.Count-1 do //遍历模型空间中的每一个实体对象
begin
AcadObj := obj_ModelSpace.Item(j); //引用第j个实体对象
EntiType := AcadObj.EntityType; //提取实体类型
if (EntiType = acText) or (EntiType = acMText) then //如果是文本
begin
//showmessage(AcadObj.TextString);
end;
end;
请教:
//1、这里应该如何释放资源?
//2、每个循环都创建一次再释放一次,是不是效率很低,有好办法吗?
end;实现这样的功能有更好的办法吗?请大家指教。
想在很多dwg文件中,查找含有某一字符串的文件,想用如下思路:
1、用lstFiles:Tstringlist获取所有dwg的路径。(实现)
2、遍历lstFiles,逐个打开dwg,并查找。
步骤2中,
for i:=0 to lstFiles.Count-1 do
begin
……//打开dwg文件,
for j := 0 to obj_ModelSpace.Count-1 do //遍历模型空间中的每一个实体对象
begin
AcadObj := obj_ModelSpace.Item(j); //引用第j个实体对象
EntiType := AcadObj.EntityType; //提取实体类型
if (EntiType = acText) or (EntiType = acMText) then //如果是文本
begin
//showmessage(AcadObj.TextString);
end;
end;
请教:
//1、这里应该如何释放资源?
//2、每个循环都创建一次再释放一次,是不是效率很低,有好办法吗?
end;实现这样的功能有更好的办法吗?请大家指教。
const
ConBytes=4; //这里是你要查找的字符串的字节数
ConFileN='d:\test\test.bin';
ConFindS=#$6D#$6F#$73#$74; //这里换成你要查找的字符串 #$表示16进制字符
var
ff:TMemoryStream;
buffer:array[0..ConBytes-1] of byte;
buffer2:array[0..2*ConBytes-1] of byte;
i,size:int64;
j:byte;
begin
result:=-1; //表示未找到
ff:=TMemorystream.create;
ff.LoadFromFile(ConFileN);
size:=ff.size;
i:=0;
for j:=0 to ConBytes-1 do
buffer2[j]:=0;
while i <size do
begin
ff.read(buffer,ConBytes);
for j:=0 to ConBytes-1 do
buffer2[j+ConBytes]:=buffer[j];
j:=pos(ConFindS,pchar(@buffer2));
if j>0 then
begin
result:=i+j-ConBytes-1; //从0开始的相对于文件头的偏移量
break;
end;
for j:=0 to ConBytes-1 do
buffer2[j]:=buffer[j];
inc(i,ConBytes);
end;
ff.free;
end;
s,str:string;
i:integer;
begin
s:='信息中心';
for i := 1 to length(s) do
begin
str:=str + IntToHex(ord(s[i]),2);
end;
ShowMessage(str);
end;
谢谢,我试了一下。但因为汉字占两个字节,而dwg文件里可能有数字,这是不是需要特殊的处理?