Cadence Skill 论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 17110|回复: 171

[初级篇] 第9课:skill中对文件的操作方法详解——简单SKILL小功能的实现

  [复制链接]
发表于 2015-2-9 19:55:10 | 显示全部楼层 |阅读模式
如果你觉得本教程对你有帮助,欢迎大家转载到各大论坛博客。转载还请注明出处哦。老罗感谢大家一直以来的支持!


hi,各位同学好。前面几节课把Skill的一些基础知识已经讲得差不多了。从本节课开始,将慢慢以实例来讲解如何编写出自己的Skill工具。



文件的读取与写入在skill编程中用得比较多。比如常见的丝印导出导入,原理就是先把丝印字号大小、坐标、角度导出到一个文件,然后在另外一个单板上再读取该文件丝印的各个信息,将板上的丝印按文件中的保存的信息进行设置。再比如导出器件placement功能也基本相似。当然,用文件的地方太多了,也列举不完。
本节课开讲之前先简单讲下路径:
绝对路径:即直接指定文件的路径,包括盘符。比如e:/1.txt;f:/1/2/3/test.txt
相对路径:即相对于某一个路径来说的。比如:/1.txt;./test/1.txt
1.如果路径以(~/)开始,那么搜索路径为环境变量home指定的路径
2.如果路径以(./)开始,那么搜索路径为你当前工作目录路径
3.如果路径以(../)开始,那么搜索路径为当前目录的父目录。





文件输入(读取):
文件读取基本步骤如下:
1.        首先使用infile指定读取文件输入端口
2.        使用gets、fscanf等函数读取文件内容
3.        当读取完成后,务必使用close函数关闭文件端口

infile函数
infile打开一个输入端口准备读取文件。
基本结构:
infile(S_fileName)
=> p_inport | nil
说明:
S_fileName:为读取文件路径,可以为相对路径也可为绝对路径。
p_inport:文件端口打开成功,则返回端口值。用于读取文件。
nil:文件打开有误,或者文件不能读取。
注意:在读取完文件后,需要使用colse函数把文件端口关闭。


get函数
基本结构:gets(s_variableName [ p_inputPort ])
s_variableName:存储读取值的变量
p_inputPort:文件输入端口
例子:读取一个文件中的内容。
在G盘根目录下新建一个文本文件,命名“file.txt”,在文件中输入以下内容:
#This is the data for test#
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9
line 10
新建一个il文件,输入下面代码,并使用Skill Debuger加载:

  1. ;gets
  2. if(isFile("G:/file.txt");判断文件是否存在
  3.         then
  4.                 printf("Read File \"G:/file.txt\" for test gets:\n");提示读取文件
  5.                 file = infile("G:/file.txt")
  6.                 while(gets(s file)
  7.                         printf("%s" s)
  8.                 );end while
  9.                 close(file);注意,文件执行结束后,一定要使用close关闭端口,否则其他程序无法操作。
  10.                 printf("\nEnd of the file!\n")
  11.         else
  12.                 axlUIConfirm("Not found file!!!");若文件不存在则弹出提示框
  13. )
复制代码

上面代码首先使用infile函数读取指定的一个文件,并将文件端口传递给变量file,再使用while循环语句,读取文件。其中gets函数用于读取文件中的一行,将读取到的值传递给变量s。当gets函数读取到文件结尾时(EOF)会返回nil,跳出while循环。
读取文件函数除了gets外,还有fscanf.



fscanf函数
游客,如果您要查看本帖隐藏内容请回复


如果你觉得本教程对你有帮助,欢迎大家转载到各大论坛博客。转载还请注明出处哦。老罗感谢大家一直以来的支持!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2015-4-7 19:42:58 | 显示全部楼层
本帖最后由 leench124 于 2015-4-8 13:56 编辑

摩擦摩擦,终于把这次的作业完成了。说实话,对于我这个以前没有接触过skill,仅通过罗老师的skill小学堂学习过skill语言的人来说,这节课的作业真是有些难了。不过凭着我一股韧劲,反复温习前几课内容,仔细认真在help里搜索相关知识,前后历时约一个礼拜(业余时间),终于完成了这节课的作业。
另外还要感谢wisology同学的无私帮助。
下面就交上这节课的作业:
1.输出选择器件的信息;2.复用输出的信息;
3.PROTEL和ALLEGRO网表的转换。
再说一下我遇到的难点:一二题基本上没什么难点,困难出现在第三题上,其中困扰我最久的是,gets函数会把每行的换行符\n一并读进去,输出时怎么去掉\n?刚开始尝试\b,显示乱码,后来用substring函数解决,在这里还有提醒一下大家,\n是一个字符。
最后,感谢罗老师的辛苦付出!期待下节课的精彩!PS:这次作业中第三题按理说应该nets信息和packages信息一起转换输出,我还没有实现,还正在coding.另外发现罗老师一个拼写错误,见下图error。希望罗老师及时修正,方便后来的同学理解。
经过今天中午大约两个小时的debug,终于将packages和nets的转换放到一个skill里实现了。下面就附上结果截图和skill源码,skill源码设定了2skill币,原因如下:
1、这个真的花费了一些心血,里面有我的思路,总结和详细注释;说到这儿,可能会有同学说了,罗老师费的心血更多,都没有设定skill币,你怎么好意思厚脸皮,那么我就说说第二个听起来更容易让大家接受的原因;
2、希望大家不要上来就下载别人的skill源码,首先自己写,只有这样才能真正掌握skill语言的编程方法,避免“拿来主义”和“眼高手低”。等大家真的动脑想过了,还是思路不清晰,就可以参考别人的skill源码来理顺自己的思路。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1威望 +5 SKILL币 +10 贡献 +5 收起 理由
vivienluo + 5 + 10 + 5 完成得非常好。。。

查看全部评分

发表于 2015-2-24 20:37:17 | 显示全部楼层
本帖最后由 wisology 于 2015-2-24 20:47 编辑

交作业,嘻嘻~
1.

2.

3.


第三道题因为手头没有protel和allegro的网表文件,之前也没研究过,就只编写了封装信息的转换。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
发表于 2015-2-14 11:41:25 | 显示全部楼层
看起来年前是完不成作业了,等年后回来后再继续,祝大家新年快乐!
发表于 2015-2-9 20:03:39 | 显示全部楼层
誓死学会skill。
P.S 这段时间较忙,上一课的作业还没来得及提交,罗老师请见谅.
 楼主| 发表于 2015-2-9 20:04:31 | 显示全部楼层
leench124 发表于 2015-2-9 20:03
誓死学会skill。
P.S 这段时间较忙,上一课的作业还没来得及提交,罗老师请见谅.

只要好好坚持下去就行。好好学 哦1
发表于 2015-2-9 23:10:56 | 显示全部楼层
感谢楼主,学习学习!
发表于 2015-2-10 18:02:23 | 显示全部楼层
非常感谢罗老师的奉献,我要坚持下去。
 楼主| 发表于 2015-2-10 22:08:58 | 显示全部楼层
发表于 2015-2-11 14:16:47 | 显示全部楼层
我来了,越学越有劲,只是缺少动手能力,后期要跟上,不然光看不练太难成了!
 楼主| 发表于 2015-2-11 15:16:18 | 显示全部楼层
huangzhf 发表于 2015-2-11 14:16
我来了,越学越有劲,只是缺少动手能力,后期要跟上,不然光看不练太难成了!

是的啊,光看怎么行,要边看边动手。。。。
发表于 2015-2-11 21:01:48 | 显示全部楼层
多谢罗老师,开始学习。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|网站地图|Cadence Skill 论坛 ( 蜀ICP备13024417号|网站地图

GMT+8, 2018-8-19 03:37 , Processed in 0.414558 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表