GENERO技術(shù)沒教的事_第1頁
GENERO技術(shù)沒教的事_第2頁
GENERO技術(shù)沒教的事_第3頁
GENERO技術(shù)沒教的事_第4頁
GENERO技術(shù)沒教的事_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、技轉(zhuǎn)沒教的事(01)-檔桉系統(tǒng)處理先把之前寫過的整理整理,讓大家有個管道可以更了解Genero語言。Genero在2.0版之后,增加一些外掛的函式庫,以擴(kuò)展原有不足的部份。這些函式 (function,必需用IMPORT的方式將函式庫掛載到程式裡面來,才可以使用。利用這 種技法開發(fā)出來的項(xiàng)目越來越多,如本文介紹的檔桉系統(tǒng)處理os、Web Service及一些 數(shù)學(xué)函式庫。使用之前:在使用這些函式之前,需要在4gl啟始處(DATABASE指令之前寫入IMPORT os 使用當(dāng)下:使用此類函式時,必需用os.Path.METHODS ( METHOD請參照下表的方式來使用, 例如 copy,就是

2、CALL os.Path.copy(source, target) RETURNING li_successMet hods( 下 表 引 用 自4JS 網(wǎng) 頁 : 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程式內(nèi)常見,沒翻譯的部份則比較少用到。說明function說明separator回傳path的分隔符號,Windo

3、ws為/ ,UNIX為/通??梢杂脕砼袛嘞到y(tǒng)是在哪個平臺下運(yùn)行,如IF os.Pa th.separa tor()二/ THEN.pathseparator類似上一個,回傳用在環(huán)境變數(shù)(如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屬性,要計(jì)算對應(yīng)值,而且只能用在UNIX例如希望變更屬性為777,則計(jì)算式為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 (搭配 如果要執(zhí)行l(wèi)s/dirdiropen/dirnext 等)chdir mkdir delete rename copyatime mtime變更目錄mkdir刪除檔案或目錄更新目錄名或檔名復(fù)制檔案回傳檔案上次被讀取時間 回傳檔案上次被修改時間readable檢查檔案是否可被讀取wri table檢查檔案是否可被寫入executable檢查檔案是否可被執(zhí)行isfile檢查是否為一個檔案路徑isdirectory檢查是否為一個目錄路徑islink檢查是否為UNIX的soft linkisrootpath檢查是否為根路徑size回傳檔案大小chvolume更換Windows

6、的工作磁碟機(jī)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當(dāng)可以善用這一些函式時,程式就可以和檔案系統(tǒng)進(jìn)行一些互動,增加操作上的便利性。Genero技轉(zhuǎn)沒教的事(02)-與環(huán)境變數(shù)的互動Genero語言從2.0版開始,提供2個與環(huán)境變數(shù)互動的functi on。讀取環(huán)境變數(shù)fgl_getenvSample: CALL fgl_getenv(windir) RETURNING ls_string依照上述的語法,我們即可將系統(tǒng)內(nèi)的環(huán)境變數(shù)值讀進(jìn)來使用,這些對于需要跨程式連結(jié)的 需求上,有很大的幫助,因?yàn)榭梢圆挥迷倏恐鴮憰捍鏅n或變數(shù)檔的方法,達(dá)到不同的兩支程 式(PID不同互拋簡易資料的工作。從而避免了若沒有讀寫權(quán)之類的尷尬事件發(fā)生。設(shè)定

8、環(huán)境變數(shù)fgl_setenvSample: CALL fgl_setenv(windir,C:/windows)程式開發(fā)人員,可以利用這樣的語法,即時的改變現(xiàn)在執(zhí)行的環(huán)境變數(shù)值(立即套用生 效,當(dāng)然也可搭配上面的fgl_getenv,作出兩支獨(dú)立程式互串執(zhí)行時拋接簡單變數(shù)的功 用。原廠文件內(nèi)特別提到,當(dāng)使用fgl_setenv時要特別注意,不要去異動一些系統(tǒng)需要用的環(huán)fglserver之類的,以免造成程式的異常中止情形發(fā)生。搭配RUN指令使用當(dāng)在程式內(nèi)使用CALL fgl_setenv設(shè)定,又于接下來的程式段使用RUN來執(zhí)行下一支作 業(yè)(不管有沒有WITHOUT WAITING,系統(tǒng)都會把設(shè)定

9、的參數(shù)傳入并套用。注:RUNWITHOUT WAITING 和沒有 WITHOUT WAITING都一樣是用 folk 新 process 的方 式啟動,只是一個不會等,一個會等Genero技轉(zhuǎn)沒教的事(03) - base.channel讀取外部執(zhí)行指令結(jié)果Genero語言中其實(shí)提供的Built-in函式與可應(yīng)用的API并不多,因此,有時需要一些支援 功能就顯的比較麻煩一些。若要用combine C/C+,程序上又較為麻煩,因此可以考慮利 用base.channel的功能,在外部shell上執(zhí)行后再由程式將執(zhí)行結(jié)果讀入系統(tǒng)中。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當(dāng)然需要先進(jìn)行DEFINE的動作05:利用 LET channel_name = base.channel.create()來創(chuàng)建 channel06:設(shè)定

11、分隔符號,讀取狀態(tài)下可設(shè)可不設(shè)07:如果是要讀外部指令的回傳結(jié)果,請用channel.openPipe( “指令,” r”),第二 參數(shù)r是表示要讀取請注意若指令的輸出是在std err(error畫面輸出),則請導(dǎo)向到標(biāo)準(zhǔn)輸出21 &08:利用ch.read讀到結(jié)束為止11:用完的channel請記得close,否則會引發(fā)不可預(yù)期的錯誤當(dāng)然channel可以用來讀執(zhí)行指令的結(jié)果,更可以用來讀取檔桉。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()表示一次讀一整行進(jìn)來,注意在Genero2以上版本就要定意由 st ring型態(tài)的變數(shù)來接10: isEOF()讀到檔尾符號出現(xiàn)14: ch.close()還是要記得關(guān) channelbase.channel的使用很多元,詳細(xì)資料也可參考Genero線上說明。Genero 技轉(zhuǎn)沒教的事(04)- base.channel 內(nèi) read( ) 與 readLine( ) 的差別適用版本:Genero 1.33開始都可以被這個小差異給絆住了兩三天,特別提出來和大家分享一下。前一篇中提到我們可以利用base.channel的library來

14、做檔桉的讀與寫,可是在閱讀線上 文件時可以發(fā)現(xiàn)讀有read()與readLine()兩類function (同樣的寫也有write()與 writeLine(),差別是什麼?差別就在backslash (反斜線上。read()可以支援反斜線這個特殊符號,但看樣子除了是把/吞掉之外,好像沒有其他 的功能(其他功能是指/n /t之類的,也就是說,當(dāng)來源的source檔內(nèi)含有反斜線時,read()讀入就會吃掉一半的反斜線量(原有2個剩1個,原有1個就不見;原有7個會 剩3個N mod 2的意思啦此時用readLine()解就會正常。檔桉有幾個backslash就讀進(jìn)來幾個。wri te()/wri

15、teLine()是寫入檔桉用的,兩者的表現(xiàn)是一樣的:當(dāng)來源是從readLine() 讀進(jìn)來的含有backslash且沒有被處理過的部份,就會原樣輸出;要是程式內(nèi)有再加工到 backslash部份,則當(dāng)做特殊符號處理。舉例來說,原始檔為IIIIIII1111IIIIIIIIIIIaaa/n/bbb/ nccc經(jīng)過read()加write( )或 writeLine()處理,都會變成IIIIIIIIIIaaan/bbbnccc而如果改用readLine(),就會產(chǎn)出和原始檔一樣的東西。此時若在程式內(nèi)手動輸出wri te “aaa/nbbb/ccc”),則不管是wri te()或wri teLine

16、() 都一樣會產(chǎn)出“aaa(Enter換行)bbb/ccc”的結(jié)果。以上請?jiān)谧珜戅D(zhuǎn)檔程式時要注意到。補(bǔ)記:這事經(jīng)過幾天后,和FourJS(Genero原廠)客服人員談起,發(fā)現(xiàn)這是channel default delim it er設(shè)定為/反斜符號導(dǎo)致。原先開發(fā)人員認(rèn)為反斜符號用的少,所以取其作為 defaul t設(shè)定。因此若需要排除,則要先找一個檔桉內(nèi)未使用的ASCII字元(以八為例, 并在read前補(bǔ)上CALL ch.se tDelimi ter()即可正常讀入整行。Genero技轉(zhuǎn)沒教的事(05)-探究Genero需用環(huán)境變數(shù)先來個版權(quán)聲明:以下有部份內(nèi)容是從FourJS的Genero軟

17、體線上說明文件節(jié)錄來的, 再加上部份開發(fā)心得整合成這份文件。在程式運(yùn)作時,(當(dāng)然,走極簡風(fēng)的小程式除外;須要一些系統(tǒng)的環(huán)境變數(shù) (簡體中文稱:環(huán)境變量來配合,以下挑選幾個重要的來說明用途;如果家裡的系統(tǒng)有些 異常,請記得要檢查Users Profile裡面設(shè)定的環(huán)境變數(shù)值、及執(zhí)行中這些環(huán)境變數(shù)是否 遭到異動。注:以下用Genero%表示Genero安裝路徑OS Environment (作業(yè)系統(tǒng)端PATH:廢話不多說,各位基礎(chǔ)應(yīng)該知道的事。若程式執(zhí)行操作遭到莫名無解的問題, 請把Genero%/bin、Genero/lib、%Genero%/dbdrivers加入 PATH。LD_LIBRAR

18、Y_PATH: UNIX專用環(huán)境變數(shù),在設(shè)定shared library之用,請?zhí)貏e注 意在64bit環(huán)境下,因?yàn)闀c32溷用,所以LD_LIBRARY_PATH是設(shè)定給32bit, LD_LIBRARY_PATH_64是設(shè)定給64bit的。(請?zhí)貏e小心Genero安裝的版本,使用ORACLE 資料庫的要把 ORACLE Library 設(shè)定進(jìn)來,如/usr/oracle/9i/lib。LANG: Genero文件上寫使用LC_ALL,若沒有才用LANG,但在TIPTOP GP內(nèi)不 使用LC_ALL,都使用LANG。此為注記使用語系,如:BIG5兩岸版為zh_TW.BIG5, UNICODE

19、國際版為en_US.UTF8 (依UNIX廠牌不同有些微差異,請以locale -a確認(rèn)您系統(tǒng)正確 字樣,Windows國際版一律定為 *.fglutf8。Genero Environmen t( Genero 端,Genero/INFORMIX 創(chuàng)來用的DBDATE:程式在顯示日期時使用的格式,一般常用Y2MD/(即:09/12/31,兩 碼年,斜線分隔;或Y4MD/(即:2009/12/31,四碼年,斜線分隔;位置可調(diào)動如 MDY4/;分隔符號可用/ - ,.及不表示(用0,如MDY40DBDELIMITER:在使用Genero內(nèi)建load/unload指令時,以此環(huán)境變數(shù)指定字/ 字元做

20、為欄位分隔符號。為避免沖碼,TIPTOP GP將此符號設(shè)為Control-A,因此若直接查 看可能會看到亂碼。DBPATH:設(shè)定資源檔TIPTOP GP只有畫面檔算查找路徑變數(shù),在純Genero環(huán) 境(沒有INFORMIX DB即為純Genero環(huán)境,不要問我ORACLE / SQL Server算不算,沒說 就不算,別再問了可以用FGLRESOURCEPATH相互替代0 TIPTOP GP應(yīng)設(shè)定TOP%:%CUST%, 讓系統(tǒng)到這兩個目錄下,搭配程式所寫的OPEN WINDOWS WITHFORM “xxx/42f/xxxxxxx” 就可以開出畫面。FGLGUI:圖型介面為1,TIPTOP

21、GP這裡永遠(yuǎn)是1,其他值會讓程式開不起來。FGLDIR:設(shè)定%Genero%用,一般系統(tǒng)會裝一組Run time,組compiler用,作編 譯程式時會由TIPTOP GP自動切換FGLDBPATH:設(shè)定 dat abase dump 出來的 schema file (*.sch)所存放路徑(單一 路徑,在編譯時需用。FGLIMAGEPATH:若程式或畫面檔,或TOOLBAR等處需要使用圖檔/icon檔來增加 易讀易用性,可以將圖片放到FGLIMAGEPATH所指定的路徑下,在程式撰寫時就直接指定開 啟的檔名就可以了。反之若執(zhí)行時畫面上的圖檔都變紅色X,則請檢查是否有設(shè)定此環(huán)境 變數(shù),又,在此

22、路徑下是否有該檔存在。FGLLDPATH:搜尋42m用的PATH。請記得42r裡面是沒有注記路徑的,那它去哪裡 找出42m所在?就是靠FGLLDPATHo反之,若連結(jié)link時錯誤訊息是找不到42m的話, 除檢查是否已正常產(chǎn)生,也要檢查FGLLDPATH是否沒注記到。FGLSERVER :指 GDC 的路徑,也就是 clien t PC 端 GDC 的 ip+por t,如 指本機(jī)的6400埠(預(yù)設(shè),若在PC端看到的GDC上注記:port 6405,則請改成:5 (offset為5,加起來6400+5=6405,若在此位址上沒有獲得回應(yīng),則執(zhí)行時會顯示FORMS statement error

23、 number 一8086.。FGLPROFILE:啟動fglrun時要讀入的設(shè)定檔,一般會注記資料庫連線資料(如db resource, user name, login password,若這個環(huán)境變數(shù)沒設(shè),就只會讀 取%Genero%/etc/fglprofile (就算設(shè)了也會讀,若有重覆設(shè)定,以FGLPROFILE指定檔桉 內(nèi)容為準(zhǔn)。FGLSQLDEBUG:專章再探討。希望以上的說明能對維護(hù)系統(tǒng)有所助益。Genero 技轉(zhuǎn)沒教的事(06)-DEBUG 使用 FGLSQLDEBUG有人問說:哪來那麼多技轉(zhuǎn)沒教的事?但,確實(shí)很多。主要是Genero它也是一個完整 的程式語言,光用兩天的時

24、間,除了講不了太多深入的東西,學(xué)員也不容易全部可以活用、 應(yīng)用,甚至一目十行,過目即忘因此只好把遺珠之處,匯整到BLOG內(nèi),供各位慢慢參 考。言歸正傳。程式開發(fā)完成后就是測試,測試程式有許多方法,包含使用Debug Tool,或自己寫display來顯示,本篇說明的是使用FGLSQLDEBUG環(huán)境變數(shù)來作Debug。當(dāng)程式是陣亡在某個深層的func tion或library時,若用debug tool要追入是一件麻 煩的事(對我來說是,若又不確認(rèn)發(fā)生位置時,可以考慮使用FGLSQLDEBUG環(huán)境變數(shù)。執(zhí)行程式前export FGLSQLDEBUG二n再執(zhí)行程式就可以了( Windows使用se

25、t FGLSQLDEBUG二n; WEB Mode請打消您的念頭,執(zhí)行的過程會顯示在背景畫面上,參數(shù)n值 如下:n=1,此時會將翻譯過的SQL stat men t (含程式所在module及行數(shù)、SQL code,傳 入傳出參數(shù)依照執(zhí)行的順序,一個一個列出n=2,上項(xiàng)外再增加ODI driver訊息,以xxx.c(2)表示xxx表資料庫代碼,如 0RA/MSV/DB2n=3,上項(xiàng)外再增加db connect driver訊息,以xxx.c(3)表示n=4 - 10, 上 項(xiàng)外再增加 ODI driver WARING 訊息,以 xxx.c(4)表示TIPTOP GP利用FGLSQLDEBUG

26、環(huán)境變數(shù)做r.r2d工具,主要即是設(shè)定成FGLSQLDEBUG=3 并將訊息就地導(dǎo)成log檔,做為判定問題之參考依據(jù)。Genero技轉(zhuǎn)沒教的事(07) -異質(zhì)資料庫使用,以SQLi te為例分類:Genero技轉(zhuǎn)沒教的事2009-12-24 15:40 186人閱讀 評論(0)收藏 舉報Genero語言有一些還不錯的功能,其中個人覺得算是不錯用的是它跨異質(zhì)資料庫的能 力。Genero在后臺預(yù)先準(zhǔn)備了多種資料庫的連接器(以下稱dbdrivers,除GeneroDB (FourJS 自行開發(fā)的資料庫系統(tǒng)、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 等三種連結(jié)在程式內(nèi),當(dāng)然也沒有限制只能連結(jié)一種資料庫。例如:我可以撰寫一支作業(yè),同時介接ORACLE及My SQL,從ORACLE端讀入作處理完 后拋入My SQL的資料庫內(nèi)?;蜃x取可離線裝置上的SQLi te資料,將之處理后匯回大型資料 倉儲內(nèi)(如ORACLE等。既然提到了 SQLite,也就來看一下它在Genero內(nèi)怎麼設(shè)定。SQLi

28、te是一套非常簡單的資料庫系統(tǒng),核心檔桉約1MB大小Windows平臺上一定要裝 SQLite3.exe及SQLite3.dll,以讓Genero認(rèn)得,操作介面可以考慮使用SQLiteSPY這套 免安裝軟體。SQLite3開資料庫:SQLi te3 pai track.dbFGLPROFILE 設(shè)定:dbi.da tabase.pai track.source二C:/paitrack/paitrack.dbdbi.da tabase.pai track.driver 二dbmsq t3xx接著就開始寫程式了。對,它沒得做fgldbschl r.s2,所以只能用CONNECT TO “paitrack”的方式進(jìn)行 連接。如果在PDA (WINDOWS MOBILE or ANORID上可執(zhí)行Genero程式的話,這個就會非 常好用。TIPTOP桉例探討-我的ACTION寫在sub或lib裡面,沒有轉(zhuǎn)換成中文?TIPTOP GP從1.0版本開始,就把a(bǔ)c tion的名稱代換交給4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論