forw589 发表于 2008-8-19 09:40:00

[分享]使用AutoLISP程序进行数据文件处理

]<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt;"><font face="Times New Roman">[</font>摘要<font face="Times New Roman">] </font>介绍在运用计算机进行辅助设计时,对基础数据处理分析的基本方法,以提高工作效率。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt;"><font face="Times New Roman">[</font>关键词<font face="Times New Roman">] </font>数据处理;计算机辅助设计;<font face="Times New Roman">Autolisp</font>;</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt;"></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><span style="FONT-SIZE: 12pt; LINE-HEIGHT: 150%; FONT-FAMILY: 宋体; mso-ascii-font-family: &quot;Times New Roman&quot;; mso-hansi-font-family: &quot;Times New Roman&quot;;">随着各种专业应用软件的增多和推广使用,设计手段得以强化,极大地提高了工作效率,而数据处理的工作量也随之成倍增加,特别是对于多专业设计集合的行业,专业设计人员需要处理大量的原始数据和基础类软件生成中间数据以及最终成果数据,编辑自己所用专业设计软件所需的数据文件,进行专业设计。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><span style="mso-spacerun: yes;"><font face="Times New Roman">&nbsp; </font></span>因数据文件格式的不同,数据处理的方式也有所差别,本文仅讨论目前大量使用的、可用<font face="Times New Roman">windows notepad </font>编辑的文本格式文件。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><span style="mso-spacerun: yes;"><font face="Times New Roman">&nbsp; </font></span>最原始的方法,也就是在<font face="Times New Roman">windows notepad </font>下打开需要编辑的数据文件,使用其工具进行编辑,形成专业设计所需的文本格式文件。但其缺陷也是显而易见的,有时需要在多个文件之间频繁转换,大量地进行复制、粘贴、删除,格式、单位的转换和特殊符号的输入、查找、替换,数学计算、人工输入、修改等工作,工作量较大,错漏难免,大量的精力用于数据编辑处理,效率不高;而且有的专业设计结束后,尚需采用第三方软件进行校核验证,有时,消除第三方校核软件所需基础数据和前述专业设计基础数据之间的差异也是件令人头痛的事情。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><span style="mso-spacerun: yes;"><font face="Times New Roman">&nbsp; </font></span>部分软件开发商已意识到上述问题,逐步推出了对应于同类其他软件及部分专业设计软件的数据处理模块,解决了一部分问题,但对于大多数专业设计人员而言,问题远未得到解决,短期内等待软件开发商来解决这一问题看来是一种奢望。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><span style="mso-spacerun: yes;"><font face="Times New Roman">&nbsp; </font></span>在此,笔者介绍编制<font face="Times New Roman">AutoLISP</font>程序进行数据文件处理的基本方法,关于<font face="Times New Roman">AutoLISP</font>语言在<font face="Times New Roman">Autocad</font>的帮助中就可以找到,也可参阅其他相关书籍。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -30pt; LINE-HEIGHT: 150%; mso-list: l0 level1 lfo1; tab-stops: list 18.0pt;"><font face="Times New Roman"><span style="mso-list: Ignore;">1.</span>AutoLISP</font>语言在数据处理方面的特点<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.5;"><span style="mso-spacerun: yes;"><font face="Times New Roman">&nbsp;</font></span>基于<font face="Times New Roman">Autocad</font>平台的<font face="Times New Roman">AutoLISP</font>语言由于其灵活的数据类型转换及处理方式,对文本格式的数据文件操作具有以下的优点:<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><font face="Times New Roman">(1)</font>、文件的读写操作采用依文件顺序按行读取的方式读写,一次可读写一行或多行数据;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><font face="Times New Roman">(2)</font>、读写操作以字符串的方式进行,在字符串、数据、数组、符号之间可灵活进行转换;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 6pt; LINE-HEIGHT: 150%; mso-char-indent-count: .5; mso-para-margin-left: 1.71gd;"><font face="Times New Roman">(3)</font>、按位读取、查找和替换功能具有操作快速、灵活的特点;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><font face="Times New Roman">(4)</font>、数组结构(表)具有多元化、格式灵活,方便查询、提取、合并、分割、倒置、查找替换、按顺序添加或裁减等特点;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><font face="Times New Roman">(5)</font>、读写函数具有格式多样化的特点,便于形成所需要的数据文件格式;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;"><font face="Times New Roman">(6)</font>、可同时对多个数据文件进行读写操作;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2. </font>数据处理方法及编程控制<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;">由于<font face="Times New Roman">AutoLISP</font>具有以上特点,可最大限度地发挥其优势,建议按以下因素考虑进行数据文件提取、处理,进而编制数据处理程序。<font face="Times New Roman">
                                        <span lang="EN-US"><p></p></font></span></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.1 </font>数据结构分析<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 6pt; LINE-HEIGHT: 150%; mso-char-indent-count: .5; mso-para-margin-left: 2.85gd;">对需要处理或提取数据的已有数据文件(原始数据文件)、以及目标数据文件(需要生成的数据文件)的结构、格式进行详尽的分析,找出其规律,确定处理规则,以决定查找、过滤、提取、相关计算以及存储的方式;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.2 </font>原始数据文件预处理<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 18pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.5; mso-para-margin-left: 2.85gd;">由于<font face="Times New Roman">AutoLISP</font>的数组结构中的数据是以空格分隔的,对以特定符号诸如“<font face="Times New Roman">,</font>”<font face="Times New Roman">
                                </font>、“<font face="Times New Roman">%%</font>”<font face="Times New Roman">……</font>分隔数据的原始数据文件需要进行预处理,即对整个文件按行读取,对每一行的非空格分隔符进行按位读取、判别,并以空格替换,形成所需的、易于操作的格式文件。这一处理方式也适用于一些经过简单转换、可以用<font face="Times New Roman">NotePad</font>打开的非文本格式文件;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.3 </font>索引文件编制<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -30pt; LINE-HEIGHT: 150%; mso-char-indent-count: -2.5;"><font face="Times New Roman"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</font></span>对仅需要提取原始数据文件部分数据的数据处理,需要用户根据所需提取内容的主要控制数据编制自己的索引文件;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.4 </font>按顺序排列的原始数据文件<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.85gd;">对行中以控制数据按大小顺序格式排列的原始数据文件,根据需要确定搜索步长以及是否逆减,以加快搜索进度并防止漏取数据,同时需要确定期间取值的方式是内插或其它默认方式;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.5 </font>以多个特殊字符串分隔数据段组成的原始数据文件<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.85gd;">仅需查找到指定的特定字符串,读取其后的数据段,根据处理规则提取所需数据即可;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.6 </font>特殊字符串的处理<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 30pt; TEXT-INDENT: -30pt; LINE-HEIGHT: 150%; mso-char-indent-count: -2.5;"><font face="Times New Roman"><span style="mso-spacerun: yes;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</font></span>有的原始数据文件或目标数据文件中含有诸如<font face="Times New Roman">A123.68</font>、<font face="Times New Roman">I24b10</font>、<font face="Times New Roman">100X100</font>、<font face="Times New Roman">2+300</font>、等特殊格式的数据,仅需使用<font face="Times New Roman">AutoLISP</font>中的字符串处理函数进行转换,将其转换成所需的格式即可;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.7 </font>数据单位及格式类型转换<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 28.45pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.71gd;">所提取的数据单位、类型与目标数据文件所需单位或数据类型不一致时,需要在提取时进行单位换算或数据类型转换;<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; LINE-HEIGHT: 150%;"><font face="Times New Roman">2.8 </font>数据文件的二次处理<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 28.45pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0; mso-para-margin-left: 2.71gd;">有时需要生成一个以上的目标数据文件,或生成一个目标数据文件需要对多个原始数据文件进行操作,甚至在对多个原始数据文件操作完成(形成临时数据文件)后,仍需要辅以根据设计规范或其他相关参数指标编制的外挂参数文件进行二次处理,才能最终生成满足需要的目标数据文件,此时,<font face="Times New Roman">AutoLISP</font>可同时打开多个数据文件、根据文件指针对相应文件进行读写操作,无需频繁地打开、关闭文件,其一对多、多对一以及多对多的优越性就体现出来了。在此前提下,也可视情形组织必要的临时数据文件,以形成良好的过渡。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><font face="Times New Roman">2.9 </font>意外处理<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-para-margin-left: 2.85gd;">需要注意原始数据文件和索引文件的匹配,即原始数据文件涵盖的数据范围应包含索引文件指定的提取范围,否则会出错,有时也会出现找不到所需数据情况,这需要在编制数据处理程序时进行必要的容错处理。如果处理数据量不大,屏显提示出错位置、已处理的个数和总数等简单信息即可,否则,除屏显提示外,建议将出错的内容写入意外提示文件,便于查找,待数据处理完成后,再以其他方式补充完善目标数据文件。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 29.9pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-para-margin-left: 2.85gd;">若嫌屏显耗时,仅需在数据处理程序运行时提示必要的操作,以及处理结束给出提示信息就可以了。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 12pt; LINE-HEIGHT: 150%; mso-char-indent-count: 1.0;"><font face="Times New Roman">2.10 </font>数据文件管理<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 0.1pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%;">为更有效地进行数据处理,方便使用,建议编制导引文件,数据处理程序在运行时首先读取导引文件,以确定其操作对象。导引文件可包含<font face="Times New Roman"> Autocad</font>文件搜索路径、索引文件名、原始数据文件名、临时数据文件名、外挂参数文件名、目标数据文件名、意外提示文件名等,为此,可将以上所有文件置于同一文件夹内。除<font face="Times New Roman">Autocad</font>文件搜索路径、索引文件、意外提示文件(如有必要)是唯一的以外,其余文件可以是一个或多个,路径为该文件夹所处位置,文件名可任意指定。对于多批次的数据处理,在进行数据处理前,可以编制不同的导引文件及必要的索引文件,在运行数据处理程序时指定相应导引文件名即可,方便快捷。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 0.1pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%;">结语:<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.0;">一般情况下,编制索引文件及导引文件所需时间不多,运行一次数据处理程序耗时也只在几秒钟~几分钟之间(具体需视所操作的数据文件及数据量的大小而定),但完成的工作量可能是以前需要几天时间才能做完的,其效率可见一斑。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 30pt; LINE-HEIGHT: 150%; mso-char-indent-count: 2.5;">本文仅以<font face="Times New Roman">AutoLISP</font>语言为例简述了数据处理的基本分析、处理方法及编程中的一些控制处理。当然,也可选择其他语言进行编程,但具备较强的文件读写功能、数据类型多样化以及能在各种数据类型之间方便灵活进行转换的语言,无疑应成为首选。<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%;">从理想的角度来看,在对多种不同样式原始数据文件以及可能需要的目标数据文件的需求进行详尽对比分析基础上,尽可能全面地制定详尽的数据处理规则和相应的数据处理模式,可使编制的数据处理程序更为通用。</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%;"></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt; LINE-HEIGHT: 150%;">哈哈,文件太长,能耐者性子看完,不错,希望对你有所帮助!!<p></p></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 24pt;"></p></span>

forw589 发表于 2008-9-4 09:07:00

<p>哈哈,怎么没人顶?或许发错了地方,连精华都进不了!!</p>

skg123 发表于 2012-10-20 22:20:09

说实话,如同看CAD的简述一样,这样的文章真没什么参考价值。用实例更会有帮助。
页: [1]
查看完整版本: [分享]使用AutoLISP程序进行数据文件处理