数组查找比较在一个文本中有50个数组
排列为:name=aaa
01ss0001b xxxx 456.41n //456n是测试出的一个数,数有加密,实际数=20log(456.41)
01ss0002b xxxx 420.14n
: : :
: : :
01ss0080b xxxx 0.1114nname=bbb
02ss0001b xxxx 406.25n
02ss0002b xxxx 400.47n
: : :
: : :
02ss0080b xxxx 501.57nname=ddc
03ss0001b xxxx 511.36n
: : :
: : :
: : :
name=ddc //第70组数名
70ss0080b xxxx 571.23n 如何查找文件中另一数数各行的第三个实际数(实际数=20log(456.41))
与aaa数组中各行的第三个实际数误差在+/-0.5之内,
如找到aaa与bbb数组附合条件则显示:aaa--bbb
然后查找第三个数组相附的数组,当然第二次找查要排除aaa和bbb数组了!
排列为:name=aaa
01ss0001b xxxx 456.41n //456n是测试出的一个数,数有加密,实际数=20log(456.41)
01ss0002b xxxx 420.14n
: : :
: : :
01ss0080b xxxx 0.1114nname=bbb
02ss0001b xxxx 406.25n
02ss0002b xxxx 400.47n
: : :
: : :
02ss0080b xxxx 501.57nname=ddc
03ss0001b xxxx 511.36n
: : :
: : :
: : :
name=ddc //第70组数名
70ss0080b xxxx 571.23n 如何查找文件中另一数数各行的第三个实际数(实际数=20log(456.41))
与aaa数组中各行的第三个实际数误差在+/-0.5之内,
如找到aaa与bbb数组附合条件则显示:aaa--bbb
然后查找第三个数组相附的数组,当然第二次找查要排除aaa和bbb数组了!
先谢了!
70ss0080b xxxx 571.23n
打错字是第50组
50ss0001b xxxx 571.23n
楼主可以参考一下,就是比较两个数组中的内容,逐个元素比较过去,若不相同,则删之,你可以作修改,改成你要的.....
--------------------------------------------------------------------
//如果两个数组的元素个数不一至,则用元素多的数组的个数进行循环
var shortStr,longStr : array of string;
if hight(shortStr)= hight(longStr) then
CompareCount := hight(longStr)
else if hight(longStr)> hight(shortStr) then
CompareCount := hight(shortStr)
For i := 0 to length(longStr)- 1 do //将两个数组中的内容进行比较
begin
OldTag := i;
NewTag := i;
if IsAddFolder then
begin
OldTag := OldTag - DeleteCount;//如果数组 longStr中有删除元素,则shortStr,longStr 的下标要相应的往后移
NewTag := NewTag - DeleteCount;
end;
if Hight(shortStr) <= NewTag then //直到两个数组的元素个数一至时,退出循环,作其它处理
begin
IsAddFolder := true;
break;
end;
//此处进行判断是否为相同
if shortStr[OldTag] <> longStr[NewTag] then
begin
if i = 0 then //删除长数组中的元素 ,()内的值 为数组下标
begin
(i)//删除数组元素
end
else
begin
(i-DeleteCount)//删除数组元素
end;
Inc(DeleteCount); //保证 OldFile 与 NewFile 的下标一至
IsAddFolder := true;
end;
end;
if IsAddFolder then //下载旧的XML文件中没有的文件夹
begin
For i := CompareCount - 1 downto 0 do
begin
//删除长数组的元素longStr[]
end;
end;
我是要将数组内指定位的数,全部计算后比较,
比如第一个数组的第三行的第三个数是123.5n,去掉最后的n,再把123.5代入公式(=20log(456.41) )计算,比如结果是10,
再查找其它数组的第三行的第三个数,通过上面的方法计算后为B,与上面的数对比,如果:(10+误差值)>B>(10-误差值),刚纵容过上面的方法再比较第4行(或第5,6行)的第三个数
如果全通过,则记录上面二个数组名,并删除上面二个数组,如果没有找到配对的数组,则把数组名记录到另一文本,同时数组也删除,
然后读取下一数组再重复上面动作!
name=aaa
01ss0001b xxxx 456.41n //456n是测试出的一个数,数有加密,实际数=20log(456.41)
01ss0002b xxxx 420.14n
: : :
: : :
01ss0080b xxxx 0.1114n
将各个数组装入 strinlgist 中,直接计算第三行,如果相同则进行处理.如果不同,跳过..
var Temp : STringlist;
For i := 0 to hight(数组名) -1 do
beign
Temp.DelimitedText := ' ';
Temp.CommaText := 数组名[i];
For j := 0 to Temp.Count -1 do
begin
case j of
2 : begin
计算两个值
end;
end;
break;
end;
end;