GENERO技术没教的事_第1页
GENERO技术没教的事_第2页
GENERO技术没教的事_第3页
GENERO技术没教的事_第4页
GENERO技术没教的事_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技转没教的事(01)-档桉系统处理先把之前写过的整理整理,让大家有个管道可以更了解Genero语言。Genero在2.0版之后,增加一些外挂的函式库,以扩展原有不足的部份。这些函式 (function,必需用IMPORT的方式将函式库挂载到程式裡面来,才可以使用。利用这 种技法开发出来的项目越来越多,如本文介绍的档桉系统处理os、Web Service及一些 数学函式库。使用之前:在使用这些函式之前,需要在4gl启始处(DATABASE指令之前写入IMPORT os 使用当下:使用此类函式时,必需用os.Path.METHODS ( METHOD请参照下表的方式来使用, 例如 copy,就是

2、CALL os.Path.copy(source, target) RETURNING li_successMet hods( 下 表 引 用 自4JS 网 页 : HYPERLINK /online_documentation/fjs-fgl-2.11.01-manual-html/User/Ext_os /online_documentation/fjs-fgl-2.11.01-manual-html/User/Ext_osPath.html以下红字部份表示在TIPTOP GP程式内常见,没翻译的部份则比较少用到。說明function說明separator回传path的分隔符号,Windo

3、ws为/ ,UNIX为/通常可以用来判断系统是在哪个平台下运行,如IF os.Pa th.separa tor()二/ THEN.pathseparator类似上一个,回传用在环境变数(如PATH%或$PATH)裡的路径分pathseparator隔符号Windows为:,UNIX为;basename回传主要档名部份dirname回传目录部份档名rootname回传主要档名(以上三組,请参照下方对照表即可了解join合并路径用,如:LET ls_dir 二 os.Path.join ( /etc, passwd)此时 ls_dir 二 /etc/passwdextensionReturns t

4、he file extension.exists检视档案是否存在 IF os.Path.exists(ls_filename) THEN存在则回传TRUE,沒有档案即為FALSEChrwx变更UNIX上的rwx属性,要计算对应值,而且只能用在UNIX例如希望变更属性為777,则計算式為64* 7 + 8* 7 + 1 * 7二511CALL os.Path.chrwx(ls_filename, 511) RETURNING li_success 回 傳 TRUE / FALSE)diropen/dirnext 等)chdir mkdir delete rename copyatime mtim

5、edirsort (搭配 如果要執行ls/dirdiropen/dirnext 等)chdir mkdir delete rename copyatime mtime变更目录mkdir刪除档案或目录更新目录名或档名复制档案回传档案上次被读取时间 回传档案上次被修改时间readable检查档案是否可被读取wri table检查档案是否可被写入executable检查档案是否可被执行isfile检查是否為一個档案路径isdirectory检查是否為一個目录路径islink检查是否為UNIX的soft linkisrootpath检查是否為根路径size回传档案大小chvolume更换Windows

6、的工作磁碟机os.Path指令操作范例对照表原始資料dirnamebasenamerootnameextensionNULLNULL/NULL/usr/lib/usrlib/usr/libNULL/usr/usr/usr/NULLusrusrusrNULLfile.xxfile.xxfilexx/t mp.yy/file.xx/t mp.yyfile.xx/t mp.yy/filexx/t mp.yy/file.xx.yy/t mp.yyfile.xx.yy/t mp.yy/file.xxyy/t mp.yy/t mp.yy/t mp.yy/NULL/t mp.yy/./t mp.yy/t m

7、p.yy/NULL当可以善用這一些函式时,程式就可以和档案系统進行一些互动,增加操作上的便利性。Genero技转没教的事(02)-与环境变数的互动Genero语言从2.0版开始,提供2个与环境变数互动的functi on。读取环境变数fgl_getenvSample: CALL fgl_getenv(windir) RETURNING ls_string依照上述的语法,我们即可将系统内的环境变数值读进来使用,这些对于需要跨程式连结的 需求上,有很大的帮助,因为可以不用再靠着写暂存档或变数档的方法,达到不同的两支程 式(PID不同互抛简易资料的工作。从而避免了若没有读写权之类的尴尬事件发生。设定

8、环境变数fgl_setenvSample: CALL fgl_setenv(windir,C:/windows)程式开发人员,可以利用这样的语法,即时的改变现在执行的环境变数值(立即套用生 效,当然也可搭配上面的fgl_getenv,作出两支独立程式互串执行时抛接简单变数的功 用。原厂文件内特别提到,当使用fgl_setenv时要特别注意,不要去异动一些系统需要用的环fglserver之类的,以免造成程式的异常中止情形发生。搭配RUN指令使用当在程式内使用CALL fgl_setenv设定,又于接下来的程式段使用RUN来执行下一支作 业(不管有没有WITHOUT WAITING,系统都会把设定

9、的参数传入并套用。注:RUNWITHOUT WAITING 和没有 WITHOUT WAITING都一样是用 folk 新 process 的方 式启动,只是一个不会等,一个会等Genero技转没教的事(03) - base.channel读取外部执行指令结果Genero语言中其实提供的Built-in函式与可应用的API并不多,因此,有时需要一些支援 功能就显的比较麻烦一些。若要用combine C/C+,程序上又较为麻烦,因此可以考虑利 用base.channel的功能,在外部shell上执行后再由程式将执行结果读入系统中。01 MAIN02DEFINE fn CHAR(40)03DEFI

10、NE ex CHAR(10)04DEFINE ch base.Cha nnel05LET ch = base.Cha nn el.create()06CALL ch.setDelimiter(.)07CALL ch.ope nPipe(ls -l,r)08WHILE ch.read(fn,ex)09DISPLAY fn, , ex10END WHILE11CALL ch.close()12 END MAIN04:使用base.channel当然需要先进行DEFINE的动作05:利用 LET channel_name = base.channel.create()来创建 channel06:设定

11、分隔符号,读取状态下可设可不设07:如果是要读外部指令的回传结果,请用channel.openPipe( “指令,” r”),第二 参数r是表示要读取请注意若指令的输出是在std err(error画面输出),则请导向到标准输出21 &08:利用ch.read读到结束为止11:用完的channel请记得close,否则会引发不可预期的错误当然channel可以用来读执行指令的结果,更可以用来读取档桉。02DEFINE i INTEGER03DEFINE s STRING04DEFINE ch base.Cha nnel05LET ch = base.Cha nn el.create()06CA

12、LL ch.ope nFile(file.txt,r)07LET i = 108WHILE TRUE09LET s = ch.readL in e()10IF ch.isEof() THEN EXIT WHILE END IF11DISPLAY i, , s12LET i = i + 113END WHILE14CALL ch.close()15 END MAIN06:读取档桉时要改用openFile,并且指定档名、指定属性【r:read only/ w:write only(定是开空档桉)/ a:append only(定不是空档桉,不可读只能写)/ u: update档 桉 / b:bin

13、ary file only】09:此处用readLine()表示一次读一整行进来,注意在Genero2以上版本就要定意由 st ring型态的变数来接10: isEOF()读到档尾符号出现14: ch.close()还是要记得关 channelbase.channel的使用很多元,详细资料也可参考Genero线上说明。Genero 技转没教的事(04)- base.channel 内 read( ) 与 readLine( ) 的差别适用版本:Genero 1.33开始都可以被这个小差异给绊住了两三天,特别提出来和大家分享一下。前一篇中提到我们可以利用base.channel的library来

14、做档桉的读与写,可是在阅读线上 文件时可以发现读有read()与readLine()两类function (同样的写也有write()与 writeLine(),差别是什麽?差别就在backslash (反斜线上。read()可以支援反斜线这个特殊符号,但看样子除了是把/吞掉之外,好像没有其他 的功能(其他功能是指/n /t之类的,也就是说,当来源的source档内含有反斜线时,read()读入就会吃掉一半的反斜线量(原有2个剩1个,原有1个就不见;原有7个会 剩3个N mod 2的意思啦此时用readLine()解就会正常。档桉有几个backslash就读进来几个。wri te()/wri

15、teLine()是写入档桉用的,两者的表现是一样的:当来源是从readLine() 读进来的含有backslash且没有被处理过的部份,就会原样输出;要是程式内有再加工到 backslash部份,则当做特殊符号处理。举例来说,原始档为IIIIIII1111IIIIIIIIIIIaaa/n/bbb/ nccc经过read()加write( )或 writeLine()处理,都会变成IIIIIIIIIIaaan/bbbnccc而如果改用readLine(),就会产出和原始档一样的东西。此时若在程式内手动输出wri te “aaa/nbbb/ccc”),则不管是wri te()或wri teLine

16、() 都一样会产出“aaa(Enter换行)bbb/ccc”的结果。以上请在撰写转档程式时要注意到。补记:这事经过几天后,和FourJS(Genero原厂)客服人员谈起,发现这是channel default delim it er设定为/反斜符号导致。原先开发人员认为反斜符号用的少,所以取其作为 defaul t设定。因此若需要排除,则要先找一个档桉内未使用的ASCII字元(以八为例, 并在read前补上CALL ch.se tDelimi ter()即可正常读入整行。Genero技转没教的事(05)-探究Genero需用环境变数先来个版权声明:以下有部份内容是从FourJS的Genero软

17、体线上说明文件节录来的, 再加上部份开发心得整合成这份文件。在程式运作时,(当然,走极简风的小程式除外;须要一些系统的环境变数 (简体中文称:环境变量来配合,以下挑选几个重要的来说明用途;如果家裡的系统有些 异常,请记得要检查Users Profile裡面设定的环境变数值、及执行中这些环境变数是否 遭到异动。注:以下用Genero%表示Genero安装路径OS Environment (作业系统端PATH:废话不多说,各位基础应该知道的事。若程式执行操作遭到莫名无解的问题, 请把Genero%/bin、Genero/lib、%Genero%/dbdrivers加入 PATH。LD_LIBRAR

18、Y_PATH: UNIX专用环境变数,在设定shared library之用,请特别注 意在64bit环境下,因为会与32溷用,所以LD_LIBRARY_PATH是设定给32bit, LD_LIBRARY_PATH_64是设定给64bit的。(请特别小心Genero安装的版本,使用ORACLE 资料库的要把 ORACLE Library 设定进来,如/usr/oracle/9i/lib。LANG: Genero文件上写使用LC_ALL,若没有才用LANG,但在TIPTOP GP内不 使用LC_ALL,都使用LANG。此为注记使用语系,如:BIG5两岸版为zh_TW.BIG5, UNICODE

19、国际版为en_US.UTF8 (依UNIX厂牌不同有些微差异,请以locale -a确认您系统正确 字样,Windows国际版一律定为 *.fglutf8。Genero Environmen t( Genero 端,Genero/INFORMIX 创来用的DBDATE:程式在显示日期时使用的格式,一般常用Y2MD/(即:09/12/31,两 码年,斜线分隔;或Y4MD/(即:2009/12/31,四码年,斜线分隔;位置可调动如 MDY4/;分隔符号可用/ - ,.及不表示(用0,如MDY40DBDELIMITER:在使用Genero内建load/unload指令时,以此环境变数指定字/ 字元做

20、为栏位分隔符号。为避免冲码,TIPTOP GP将此符号设为Control-A,因此若直接查 看可能会看到乱码。DBPATH:设定资源档TIPTOP GP只有画面档算查找路径变数,在纯Genero环 境(没有INFORMIX DB即为纯Genero环境,不要问我ORACLE / SQL Server算不算,没说 就不算,别再问了可以用FGLRESOURCEPATH相互替代0 TIPTOP GP应设定TOP%:%CUST%, 让系统到这两个目录下,搭配程式所写的OPEN WINDOWS WITHFORM “xxx/42f/xxxxxxx” 就可以开出画面。FGLGUI:图型介面为1,TIPTOP

21、GP这裡永远是1,其他值会让程式开不起来。FGLDIR:设定%Genero%用,一般系统会装一组Run time,组compiler用,作编 译程式时会由TIPTOP GP自动切换FGLDBPATH:设定 dat abase dump 出来的 schema file (*.sch)所存放路径(单一 路径,在编译时需用。FGLIMAGEPATH:若程式或画面档,或TOOLBAR等处需要使用图档/icon档来增加 易读易用性,可以将图片放到FGLIMAGEPATH所指定的路径下,在程式撰写时就直接指定开 启的档名就可以了。反之若执行时画面上的图档都变红色X,则请检查是否有设定此环境 变数,又,在此

22、路径下是否有该档存在。FGLLDPATH:搜寻42m用的PATH。请记得42r裡面是没有注记路径的,那它去哪裡 找出42m所在?就是靠FGLLDPATHo反之,若连结link时错误讯息是找不到42m的话, 除检查是否已正常产生,也要检查FGLLDPATH是否没注记到。FGLSERVER :指 GDC 的路径,也就是 clien t PC 端 GDC 的 ip+por t,如 指本机的6400埠(预设,若在PC端看到的GDC上注记:port 6405,则请改成:5 (offset为5,加起来6400+5=6405,若在此位址上没有获得回应,则执行时会显示FORMS statement error

23、 number 一8086.。FGLPROFILE:启动fglrun时要读入的设定档,一般会注记资料库连线资料(如db resource, user name, login password,若这个环境变数没设,就只会读 取%Genero%/etc/fglprofile (就算设了也会读,若有重覆设定,以FGLPROFILE指定档桉 内容为准。FGLSQLDEBUG:专章再探讨。希望以上的说明能对维护系统有所助益。Genero 技转没教的事(06)-DEBUG 使用 FGLSQLDEBUG有人问说:哪来那麽多技转没教的事?但,确实很多。主要是Genero它也是一个完整 的程式语言,光用两天的时

24、间,除了讲不了太多深入的东西,学员也不容易全部可以活用、 应用,甚至一目十行,过目即忘因此只好把遗珠之处,汇整到BLOG内,供各位慢慢参 考。言归正传。程式开发完成后就是测试,测试程式有许多方法,包含使用Debug Tool,或自己写display来显示,本篇说明的是使用FGLSQLDEBUG环境变数来作Debug。当程式是阵亡在某个深层的func tion或library时,若用debug tool要追入是一件麻 烦的事(对我来说是,若又不确认发生位置时,可以考虑使用FGLSQLDEBUG环境变数。执行程式前export FGLSQLDEBUG二n再执行程式就可以了( Windows使用se

25、t FGLSQLDEBUG二n; WEB Mode请打消您的念头,执行的过程会显示在背景画面上,参数n值 如下:n=1,此时会将翻译过的SQL stat men t (含程式所在module及行数、SQL code,传 入传出参数依照执行的顺序,一个一个列出n=2,上项外再增加ODI driver讯息,以xxx.c(2)表示xxx表资料库代码,如 0RA/MSV/DB2n=3,上项外再增加db connect driver讯息,以xxx.c(3)表示n=4 - 10, 上 项外再增加 ODI driver WARING 讯息,以 xxx.c(4)表示TIPTOP GP利用FGLSQLDEBUG

26、环境变数做r.r2d工具,主要即是设定成FGLSQLDEBUG=3 并将讯息就地导成log档,做为判定问题之参考依据。Genero技转没教的事(07) -异质资料库使用,以SQLi te为例分类:Genero技转没教的事2009-12-24 15:40 186人阅读 评论(0)收藏 举报Genero语言有一些还不错的功能,其中个人觉得算是不错用的是它跨异质资料库的能 力。Genero在后台预先准备了多种资料库的连接器(以下称dbdrivers,除GeneroDB (FourJS 自行开发的资料库系统、IBMDB2、ORACLE、MS SQL Server. PostgreSQL、MySQL 及

27、 Sybase (只有到 7.x。在 Genero 2.21.x 版本后,更增加了 SQLite3,也把 MS SQL Server 拆成了 Windows 平台的 SQL Na tive Client 及 UNIX 平台的 FreeTDS、EasySoft 等三种连结在程式内,当然也没有限制只能连结一种资料库。例如:我可以撰写一支作业,同时介接ORACLE及My SQL,从ORACLE端读入作处理完 后抛入My SQL的资料库内。或读取可离线装置上的SQLi te资料,将之处理后汇回大型资料 仓储内(如ORACLE等。既然提到了 SQLite,也就来看一下它在Genero内怎麽设定。SQLi

28、te是一套非常简单的资料库系统,核心档桉约1MB大小Windows平台上一定要装 SQLite3.exe及SQLite3.dll,以让Genero认得,操作介面可以考虑使用SQLiteSPY这套 免安装软体。SQLite3开资料库:SQLi te3 pai track.dbFGLPROFILE 设定:dbi.da tabase.pai track.source二C:/paitrack/paitrack.dbdbi.da tabase.pai track.driver 二dbmsq t3xx接着就开始写程式了。对,它没得做fgldbschl r.s2,所以只能用CONNECT TO “paitrack”的方式进行 连接。如果在PDA (WINDOWS MOBILE or ANORID上可执行Genero程式的话,这个就会非 常好用。TIPTOP桉例探讨-我的ACTION写在sub或lib裡面,没有转换成中文?TIPTOP GP从1.0版本开始,就把ac tion的名称代换交给4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论