EDA365电子论坛网

标题: Skill中的数据比较问题(二)(高手来呀!~) [打印本页]

作者: y175813652    时间: 2008-10-23 17:20
标题: Skill中的数据比较问题(二)(高手来呀!~)
原帖由 y175813652 于 2008-10-16 16:54 发表
如题,在Skill中,比如有一程序在读取一文件中的数据,假设这些数据有很多,我们提取的有效数据是:1, 2,3,4,5,6,- - - - - 100,且这些数据是一个一个得到的,也就是说,假设有一变量a,所得到的数据依次赋予a,请问,如何让a自 ...

现在这个文件的数据不是数,而是一组string,假设是:aas   aas  bbs  ccs    abcd..........,且这些数据是一个一个得到的,也就是说,假设有一变量a,所得到的数据依次赋予net_name ,请问,如何让net_name 自身相比较,把其中相同的数据给滤除掉?本人的做法是:

                                                                                 temp_netname = nil      `
                                                                                 if(   net_name != temp_netname
                 
                                                                                 then  temp_netname =
net_name
其具体思路是,让net_nametemp_netname 比较,如果他们不相等,那么把net_name 的值赋予temp_netname 然后让net_name 继续与temp_netname  比较?我调试时,发现的问题是:
在刚调试时,它所完成的是:net_name 与temp_netname 的初值nil 想比较,所以他把aas   aas  bbs  ccs    abcd..........,完整的输出了,但是在不关闭allegro的情况下,把 temp_netname = nil 去掉,在调试,得到了我想要的结果, 再关闭    allegro ,重新打开调试,提示 temp_netname 为未定义变量,不明白为什么,高手指教啊,郁闷中!~

                 


作者: deargds    时间: 2008-10-23 20:12
关掉ALLEGRO后,temp_netname变量就消失了。所以再打开时就是未定义。
作者: y175813652    时间: 2008-10-24 09:20
版主,你没解答前面的问题啊?后面的我知道是怎么回事,为什么在刚调试时,它所完成的是:net_name 与temp_netname 的初值nil 相比较,所以他把aas   aas  bbs  ccs    abcd..........,完整的输出了,但是在不关闭allegro的情况下,在程序中把 temp_netname = nil 去掉,在调试,就得到了我想要的结果
作者: 9wuliao9    时间: 2008-10-24 09:57
这样写看看

1 , 定义 tempname = netname

2 , 更新 netname

3 , 用if来做判断
作者: y175813652    时间: 2008-10-24 10:13
原帖由 9wuliao9 于 2008-10-24 09:57 发表
这样写看看

1 , 定义 tempname = netname

2 , 更新 netname

3 , 用if来做判断
兄弟,你定义1 , 定义 temp_netname = netname,那不和下面 的temp_netname != netname冲突了呀,你的第2点我没明白,怎么去更新呢?
能写的详细点吗?
作者: 9wuliao9    时间: 2008-10-24 10:23
原帖由 y175813652 于 2008-10-24 10:13 发表
兄弟,你定义1 , 定义 temp_netname = netname,那不和下面 的temp_netname != netname冲突了呀,你的第2点我没明白,怎么去更新呢?
能写的详细点吗?


可能使我没看懂你的语句吧。
我的想法是。

首先 取得一个 netname(取得值为aas)[最开始你肯定要定义一个netname得]

定义 tempname = netname(tempname值为aas)[这样就不会出现未定义得情况]

更新得意思就是让netname取得表中的下一个值 ( 还是aas)

if语句判断 temp != netmane 是假
作者: y175813652    时间: 2008-10-24 10:32
你的这种方法我试过,按不知怎么去实现,我的原程序是这样的
foreach(temp_text  netpin_taxis
                       net_name = car(temp_text)
                       
                       temp_netname = nil      `
              if(   net_name != temp_netname
                 
           then  temp_netname = net_name
               
                    fprintf(outport "%s\n",temp_netname)  
           );end-if
);end-foreach
你看哪儿出的毛病啊?按照你的那种,应当怎么去修改?
作者: deargds    时间: 2008-10-24 12:13
b_list = nil
foreach(a a_list
        when( !member(a b_list)
                b_list = append1(b_list a)
        )
)
b_list就是没有重复的了。
作者: 9wuliao9    时间: 2008-10-24 12:52
原帖由 y175813652 于 2008-10-24 10:32 发表
你的这种方法我试过,按不知怎么去实现,我的原程序是这样的
foreach(temp_text  netpin_taxis
                       net_name = car(temp_text)
                       
                       temp_netname ...



能力有限全部解答还需要多学习。
但是看了你的语句我怎么感觉有问题呢。
foreach(temp_text  netpin_taxis
                       net_name = car(temp_text)
这两行中,temp_text是什么类型?如果是字符串的话,car得命令就有问题。如果是表的话,那foreach得命令组成就有问题。
能说说你的思路吗?各参数的定义类型?

然后照我的理解写个给你,相互学习一下。
例2得表里面不相邻位置的重复是不能被排除的,不知道你是否需要全表排除。

例1
temp_netname = nil
foreach( net_name '( aas aas bbs ccs abcd )
if(net_name != temp_netname println(net_name))
temp_netname = net_name
);end-foreach

例2
temp_netname = nil
foreach( net_name '( aas aas bbs ccs aas aas abcd )
if(net_name != temp_netname println(net_name))
temp_netname = net_name
);end-foreach
作者: 9wuliao9    时间: 2008-10-24 13:19
原帖由 deargds 于 2008-10-24 12:13 发表
b_list = nil
foreach(a a_list
        when( !member(a b_list)
                b_list = append1(b_list a)
        )
)
b_list就是没有重复的了。



佩服!
高手出马果然。。。!

再跟个问题!
如果用sort 排序并去除重复有什么特别的问题吗?

[ 本帖最后由 9wuliao9 于 2008-10-24 14:08 编辑 ]
作者: y175813652    时间: 2008-10-24 14:58
标题: 回9#楼
下面我把程序中的思路和各参数的定义类型解释一下:
思路:foreach(temp_text  netpin_taxis

                     net_name = car(temp_text)EDA365论坛网站|PCB论坛|PCB layout论坛|SI仿真技术论坛4 p+ W& F2 x9 T6 a* W% n
                       ' D9 W0 s7 W: ?; H* Z
意思是 把 netpin_taxis 的内容  暂时放到 temp_text  的这个临时变量里, 这个   它的数据类型是表list, aas aas bbs ccs abcd 这些数据是通过这句net_name = car(temp_text)来提取的,你所举的例子是把提取的数据又组成了一个list,那么我现在想只要这些提取到的数据重新组成一个list,问题就应当解决了,兄弟你说对吗?

再说一下我需要的是全表排除.
作者: y175813652    时间: 2008-10-24 15:30
标题: 回复 8# 的帖子
没注意看版主的帖子,原来都搞定了,高手啊
作者: y175813652    时间: 2008-10-24 17:42
标题: 回复 9# 的帖子
你的 程序里if语句少了then.
作者: sunflperi    时间: 2017-7-7 22:59
看不了




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2