• 251.93 KB
  • 4页

使用perl语言生成高质量结构工程计算书的方法.pdf

  • 4页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'四川建筑科学研究第39卷第2期390SichuanBuildingScience2013年4月使用perl语言生成高质量结构工程计算书的方法白凤军(福建工程学院土木工程系,福建福州350007)摘要:为了解决基于Msword程序生成的结构计算书排版质量不佳的问题,使用perl语言结合Latex文字排版系统开发了排版良好的计算书生成工具。该工具包括:一个Latex模版;一个用perl语言编写的转换程序。转换程序使用正则表达式根据计算结果以及计算书模版自动替换模版内的变量,生成Latex文件。然后,使用Latex内置程序生成pdf格式的计算书。实践表明,上述开发方式可以开发出高质量的计算书生成程序。关键词:perl语言;Latex排版系统;正则表达式;结构计算书中图分类号:TU17文献标志码:A文章编号:1008—1933(20l3102—390—04DevelopinghighqualitystructuralcalculationsreportbasedonperllanguageandLatextypesettingsystemBAIFengjun(DepartmentofCivilEngineering,FujianUniversityofTechnology,Fuzhou350007,China)Abstract:BecauseofpoortypesettingqualityofstructuralcalculationsreportproducedbyMSword,anautomaticprogramwasdevelopedwhichhasprettytypesetting.TheprogramisbasedonLatextypesettingsystemwithperllanguage.TheprogramincludesaLatexdocumenttemplate,andaconvertprogram.Theprogramfirstlyreplacesthevariableintemplateintorealnumericalvalue,andthen,convertsthetemplateintoLatexformatdocument.Thetemplateandcodearedescribed.Practiceshowsitisaneffectivewaytodevelopcalculationsreportprogram.Keywords:per]language;Latextypesettingsystem;regularexpression;structuralcalculationsreport用Latex作为排版系统开发工程计算书或标书。本O引言文结合作者开发的专业软件钢筋混凝土工具箱无论足工业界还是咨询业,都希望工程计算书CCT的过程,讨论这一开发方式的主要过程。或标书具有良好的排版。采用手工方式输入此类文1为什么采用perl语言以及Latex排件不仅需要耗费大量的人力,而且容易出错。比较可行的方法是借助工具软件直接从计算结果文件中版系统乍成计算书。目前此类软件不仅少,而且生成的计perl语言由LarryWall于1987年开发,主要目算书质量不高。主要原因在于:第一,开发此类软件的就是让处理报表一类的工作变得更加容易。其语的工作大部分内容是处理文字,但是大部分程序语法类似于c语言与unixshell语言。perl语言最突在针对文字处理工作上比较笨拙;第二,仅处理文出的优势就是处理文字工作。对于将计算结果数据字还不够,必须考虑排版、打印的要求。最常见的做文件生成工程计算书或各种报表等工作,使用perl法是采用C语言或MathCad语言,结合MSword软语言可以用极少的代码完成。但是perl语言不太容件作为排版工具进行开发¨J。这种解决方案在排易学习,因此在国内使用者不多。但是,perl语言易版普通文件时不存在大的问题,但是使用这种方法于使用,在开发与报表类相关的软件时,代码少,效在开发计算书生成程序时,由于计算公式生成的复率高]。杂性,难以开发出具有良好排版的计算书生成工具。Latex软件是以Tex作为其排版引擎开发的一结合上面的两个问题,作者使用perl语言并采组宏包,是目前主流的免费排版系统。Tex是由计算机专家DonaldE.Knuth编写的一组用于排版的收稿日期:201I.10-I9软件,该软件特别适用于有大量数学公式的文章或作者简介:自风军(1973一),男,河北玉田人,讲师,硕士,研究方向其他出版物的排版。土木J二程结构软件开发E—mail:westdevelop@163.coin由于Latex的输入内容(包括数学公式)都是普 白凤军:使用perl语言生成高质量结构工程计算书的方法391通文本文件,因此同微软的字处理软件相比,最大的果数据文件可以带有注释,以“!”开始直至行末。优点是便于开发。只要根据专业软件的计算结果使用perl语言直接形成Latex文件,就完成了带有数!是题目条件=====:=:=========学公式排版的报表或计算书。而基于Word软件,,!构件类型指示符,正截面、斜截面、压弯,扭曲?这是相当难办到的。C,!混凝土强度等级:C15一一一C80Latex的另外一个优势就是它是开源的并且完,留,!纵筋级别,箍筋级别S!截面类型指示符,R:矩形T:T形I:工字形全免费。!截面尺寸:宽、高,压翼缘宽高、拉翼缘宽高因此作者决定以Latex为基础,使用perl语言b,h,by,hf,,hff,开发生成工程计算书的程序。,,Ⅳ,,!弯矩、剪力、轴力、扭矩!最终结果=======:=======2程序框架,As’,d,,n,Astl,!纵筋,箍筋间距,箍筋肢数图1给出了程序流程。!计算过程=================:=h。,!截面有效高度,h。=h—aCCT本体计算程序[],!极限剪切承载力[]=0.25~Jobh。/计算结果数据文件/!正截面计算过程一一一一一一一一一一一一一一一一一,!截面抵抗矩系数,仅单筋矩形梁需要convert.pl程序,,!界限受压区高度/tex文件/A,P,P⋯。,!受拉纵筋面积,配筋率,最小配筋率A,P,!受压纵筋面积,配筋率,最小配筋率latexpdf.exe程序!斜截面计算过程一一一一一一一一一一一一一一一一一PP,!箍筋计算配筋率与最小配筋率/pdfJ~/d,s,n!箍筋直径、间距,肢数图1流程!如果是弯剪扭,还有扭转计算Fig.1Flowchart,!受扭纵筋与箍筋强度比值,CCT取1.2ZAistl—,!受扭箍筋图1中,CCT本体程序以及convert.pl转换程nA~vl序是由编程者编写的,而latexpdf.exe则是由Latex——,!受剪箍筋系统内置的程序。Al,!受扭纵筋流程的第一步是CCT本体计算程序。它根据用户输入,计算、生成计算结果数据文件。文件名可可以根据用户的需要决定输出哪些内容以及如以由用户指定,例如beam1.rst,表示梁1的计算结何排版输出结果。其方法就是针对需求,编写一个果。接着,程序调用convert.pl程序将计算结果数与tex相对应的模板文件。据文件转换为相对应的tex文件。转换程序是用As2023mmperl语言编写的。有了tex文件之后,就可以使用计算过程:Latex系统提供的程序Latexpdf.exe生成pdf文件。ho=h—as=600·35=565mmM300.0×106尽管完全可以在CCT本体计算程序内直接将“—al=f—cbhoi。计算结果输出为tex文件。但是这样一来,一旦用1.:j__1j=0.250<~b=0.55户需要变更计算书的输出格式,就需要重新编写、编曲0.250×565=14125rarrt译整个程序。因此,采取两层结构,首先将计算结果=mm:As2023输出为数据格式,然后使用perl语言将其转换为texp=磊==。u.O02文件。这样,如果用户需求发生变化,只需要调整第pmi~=0.002二步的perl程序即可。图2CCT生成的计算书截屏Fig.2SnapshotofreportbyCCT3计算结果数据文件与模板文件的设计这里以图2输出的计算书为例加以说明。与该输出对应的tex文件如下:为了便于说明转换软件convert.pl的算法,下\documentclass}ctexart}面先给出CCT的计算结果数据文件的格式。计算结 392四川建筑科学研究第39卷\\\1}X\usepackage{amsmath}2)公式标记”$⋯$”:在两个‘$’符号之间输一一\begin{document}入的内容为公式。例如:$\b\timesh=200\timesX已知h500$表示要输出:b×h=200×500。0\\\\混凝土\#c:$f_c=#fc{#C},f_t=#fl{#C}$3)跨行公式标记“⋯=\]”:在一对\[⋯\]之\\\\纵筋:#sg$f_y=#fy{#sg}$内括住的文字也是公式,这种公式输入可以跨行输\\\\$b\timesh=#b\times≠}h$入。例如:\\\\$M=#M$\[求:$A—S=?$\alpha计算结果:~S=\frac{M}{\alpha一1f—cbh_0}=||||0.292\]AS=#Asmm—表示要输出\]计算过程:·2\[h_0:h—a_s==}}h一#as=#h0mm\]在公式内部下划线’一’代表脚标。\frac{A}\[{B}表示要输出分号写法的A除以B。\~pha—s=\frac{M}{\alpha1f—cbh_0}4)以“#”为前缀的变量名:conve~.pl将会使用=\frac{#M\times10^6}{#fc\times#b\times#h0}计算结果数据文件中的具体数值替换以“#”开头的=#alphas变量,例如计算结果数据文件中M=100,则执行完\]convea.pl之后,模板文件中凡是符号为“}}M”都会、[被替换为数字100.\xi=1一\sqrt{1—2\alpha—S}=1一\sqrt{1—2\times#alphas}设计模板文件的好处是,用户无需学习任何=#kesai<\xib=#kesaibperl语言编程的知识,只要修改模板文件,就可以根据自己的需要重新排版打印格式。在结果对比一节我们会给出另外一个模板来说明这一点。A4生成tex文件—s=\frac{\alpha—lf—cbX}{f_yf=\frac{#fc\times#b\times#x}{#fy}采用perl设计语言编写一个程序conve~.pl,该=#Asmm"2程序这样使用:\]Conve~.plresultbeam.template>b.tex\[第一个参数result是计算结果数据文件名,第\rho=\frac{A—S}{bh_O}二个参数beam.template是上一节的模板文件,用户=\frac{#As}{#b\times#h0}=#rho也可以编写自己的模板文件。该命令默认的处理方\]式是按照模板文件的格式用计算结果数据文件中的\[\rho一{min}=#rhomin\]数据替换模板文件中的变量,然后将结果打印到屏\end{document}幕。为了存储转换后的文件,可以使用重定向“>这里使用了Latex的中文包ctex以简化中文的b.tex”将结果存储到b.tex文件。处理。用户真正关心的部分位于第三行的\begin要做到事情很简单,根据计算结果数据文件以{document}与最后一行的\end{document}之间,该及目标模板进行翻译工作即可:}}将文件一次性读到$一内部分称之为正文。openFIN,$ARGV[0];正文部分包括两种文字:一种为普通文字,例如$一=join”,;closeFIN;上面文件中的“已知”、“混凝土”、“纵筋”等。第二#去掉注释种就是特殊格式的文字,上面文件中用到的主要有while(s/!(.)\n//){}下面这些:#读取数据到数组@parms1)转义符’\’:有些特殊字符需要借助转义符@parms=split/,/,$一;表达,例如,空格需要使用“\”,即转义符’\’后面#去除数据中的空格跟一个空格。foreach(@parms){ 2013No.2白凤军:使用perl语言生成高质量结构工程计算书的方法393fif(/ks(.)ks/){$一=$1;}_cb}}\bigg)\\}&=\frac{1\times#fc\times#b}{埘}#将数组中的数据用直观的变量名代替\bigg(#h0一\sqrt{{#h0}2一\frac{2\times}}M$iT=shift@parms;#构件类型指示符{#alphal\times#fc\times#b}}\bigg)\\$C=shift@parms;#混凝土强度等级&=#As\end{align}#打开模板文件openFILE,$ARGV[1];结果输出如图4所示。#替换模板文件中的所有变量,并输出因为while(){a锄ax==(1—0.55)=055×(1-0.5×0.55)=0.39875if(s/#fc/$fc{$C}/g){}M300.0×l06“—at=f—bho~300~565O219if(s/#ft/$ft{$C}/g){}c所以纵向受拉钢筋可以屈服,钢筋面积如下计算:print$一;。一)}=一旦生成tex文件之后,只要使用Latex系统提300(\565.J565z.21x×30300.0~/,=2023供的命令图4修改后的CCT计算书截屏Pdflatexb.texFig.4SnapshotofmodifiedreportbyCCT就可以根据b.tex文件生成格式为pdf的计算书b.pdf了。可以看到用模板方式可以根据用户需求,任意5结果对比修改输出格式而无需重新编写程序。图3是某公司开发的商业软件生成的计算书截6结论屏。实践表明使用perl语言结合Latex排版系统可(2)求梁截面纵向受拉钢筋以快速开发出满足任何质量要求的工程计算书程asm~=彘(1·0.55彘)=0.5500-0.5×0.550)=0.399as=M/(al6^0)=300000000.00/(1.00×1430×300O0×560.00)-o序。上面的convert转换程序如果使用c或其他程由于d≤a一满足要求!序语言实现,代码长度要增长5~10倍以上。】假如不使用基于Latex排版系统而是MSword系统,那么用其他编程语言开发较难生成排版精良、=l×14.3×300×{560-[5602.2×300×106/(1×14.3×300):=204746mm2能够由用户重新定义排版的包含数学公式的计算书图3某商业软件计算书截屏程序。Fig.3Snapshotofreportbyabusinesssoftware使用本文给出的方法,如果出现用户要求改变输出内容或格式的情况,则只要调整模板文件无需为了与之对比,将计算书模板做如下修改:重新编写代码就可解决问题。所以,使用perl语言结合Latex排版系统,是一\begin{align}种很好的开发高质量计算书生成系统的方法。\intertext{\\\\因为}\alpha一0.5\xi一{max}&=\xi—b(1—b)=#kesaib\参考文献:times(1—0.5\times#kesaib)||钟崴,许跃敏.基于Visuale++的工程计算书自动生成技&=#alphamax||术[J].计算机工程与应用,1999,35(12):36.38.)||[2]毛世峰,袁安丽,洪殡刑.用Mathcad写水工设计计算书[J].\alphas&=\frac{M}{\alpha一1f—cbh_0}=\frac{#M黑龙江水利科技,2007,35(2):57-59.\times10"6}{#fc\times群b\times#h0}\\[3]白凤军,薛雷.面向对象的钢筋混凝土工具箱软件的开发&=#alphas[J].福建工程学院学报,2010,8(3):276-279.\intertext{\\\\所以纵向受拉钢筋可以屈服,钢筋面积如[4]RandalL.Schwartz,TomPhoenix,andbriandfoy.Perl语言入门下计算:}[M].南京:东南大学出版社,2007.A—S&=\frac{\alpha一1f_cb}{f_y}[5]陈志杰,赵书钦,李树钧,等.LATEX入门与提高[M].北京:\bigg(h0一\sqrt{{h-o}^2一\frac{2M}{\alpha一1高等教育出版社,2006.'