各清單內的處理

因為 帳、檔、郵、註 四個清單的設計方向都一樣,所以把它擺在一起看,會更容易了解~

 

帳號清單

檔案清單 備註清單 郵件清單
參數?=1、2、3… ,指將清單之所有資料,以每?列下去分割,分割處會產生一個分隔符 AccountBreak(?) FileBreak(?) NoteBreak(?) MailBreak(?)
取出清單內的第一列資料,若清單裏已沒半筆資料,則前往標記處 GetACcount()

IFNo:標記

GetFile()

IFNo:前往標記

GetNote()

IFNo:前往標記

GetMail()

IFNo:前往標記

判斷目前清單裏的第一列是否為分隔符 ,若成立,將程序移往標記處 AccountBreakLoop:標記 FileBreakLoop:標記 NoteBreakLoop:標記 MailBreakLoop:標記
判斷清單內是否仍有資料,若還有則往標記(未指定標記則程序將移至第一行從頭開始) AccountLoop:標記 FileLoop:標記名稱 NoteLoop:標記名稱 MailLoop:標記名稱
※ 經Getxxxx( )宣告後,可運用之屬性變數 ***LoginID*** (指帳號)、***LoginPW*** (指密碼)

***AccountData***(帳號:密碼;專用於回傳已編碼之 帳:密 值)

***File*** (指完整路徑含檔名)、***FileName*** (單指檔名的部份) ***Note*** (指自備註清單取出的那列資料) ***Mail*** (指自郵件清單中取出的那列資料)

***MailUrl*** (指將***Mail*** 再過濾為 name@mail_url的格式)

各清單的"分隔符"表示 #BreakAccount #BreakFile #BreakNote #BreakMail
判斷清單內是否有無資料,並依結果將程序移往標記處 IfAccount:標記

IfNotAccount:標記

IfFile:標記

IfNotFile:標記

IfNote:標記

IfNotNote:標記

IfMail:標記

IfNotMail:標記

將符合或不符合過濾條件的資料自清單中刪除 ClearAccount:過濾字串

ClearNotAccount:過濾字串

ClearFile:過濾字串

ClearNotFile:過濾字串

ClearNote:過濾字串

ClearNotOut:過濾字串

ClearMail:過濾字串

ClearNotMail:過濾字串

即時動態加入一筆資料於清單內   (  <Crlf>  為換行字符 ) AddAccount:字串(可代變數),?
?為選擇性參數;預設從最後一行加起。若?=0 ,則從第一行加起
AddFile:字串(可代變數).?
?為選擇性參數;預設從最後一行加起。若?=0 ,則從第一行加起
AddNote:字串(可代變數),?
?為選擇性參數;預設從最後一行加起。若?=0 ,則從第一行加起
AddMail:字串(可代變數).?
?為選擇性參數;預設從最後一行加起。若?=0 ,則從第一行加起

 

輸出清單與暫存清單內的處理

  輸出清單 暫存清單
將符合或不符合過濾條件的資料自清單中刪除 ClearOut:過濾字串

ClearNotOut:過濾字串

ClearTemp:過濾字串

ClearNotTemp:過濾字串

將清單內的資料作重覆整理 OutDataRefresh()  
即時動態加入一筆資料於清單內   (  <Crlf>  為換行字符 ) AddOut:字串(可代變數),?
?為選擇性參數;預設從最後一行加起。若?=0 ,則從第一行加起
 
將清單中的第一筆資料移出並存入變數"***Out***"中,以供程式提用 GetOut()  
判斷清單內是否仍有資料,若還有則往標記(未指定標記則程序將移至第一行從頭開始) OutLoop:標記  

 

 

 

 

 

 

 

 

 

 

各清單間的處理

 MoveOneFileToTemp()   將【檔案清單】中的第一筆資料移動至【暫存清單】
 MoveOneTempToFile()   將【暫存清單】中的第一筆資料移動至【檔案清單】
 CopyAccountToTemp:過濾字串   將符合條件的【帳號清單資料】 拷貝至 【暫存清單】
 CopyTempToAccount:過濾字串   將符合條件的【暫存清單資料】 拷貝至 【帳號清單】
 CopyFileToTemp:過濾字串   將符合條件的【檔案清單資料】 拷貝至 【暫存清單】
 CopyTempToFile:過濾字串   將符合條件的【暫存清單資料】 拷貝至 【檔案清單】
 CopyNoteToTemp:過濾字串   將符合條件的【備註清單資料】 拷貝至 【暫存清單】
 CopyTempToNote:過濾字串   將符合條件的【暫存清單資料】 拷貝至 【備註清單】
 CopyMailToTemp:過濾字串   將符合條件的【郵件清單資料】 拷貝至 【暫存清單】
 CopyTempToMail:過濾字串   將符合條件的【暫存清單資料】 拷貝至 【郵件清單】
 CopyOutToTemp:過濾字串   將符合條件的【輸出清單資料】 拷貝至 【暫存清單】
 CopyOutToNote:過濾字串   將符合條件的【輸出單資料】 拷貝至 【備註清單】
 CopyTempToOut:過濾字串   將符合條件的【暫存清單資料】 拷貝至 【輸出清單】

 
 
 

接著我來舉個小例子,把帳號清單內的指令運用套上,大家就粉容了解懂囉~ (帳、檔、備、註四個清單的應用都一樣,依此類推)

相信大家小學時,都有參加過 大隊接力 吧!!

就一堆人排在那裏,然後會有個 裁判 放你入操場,從 起點 跑一圈回到 終點,再換下一個人跑,一直循環,直到沒選手了,比賽就結束了…

今天,GetACcount() 這個指令就相當於這個裁判,一次取一個帳號 (一位選手),而 AccountLoop:  就相當於是跑完一圈的終點地方。

當程序(比賽) 走到 AccountLoop: (終點)  時,若還有帳號(選手)的話,就往標記(起跑點)走,若沒有就往下一行命令(結束比賽)…

其中,當裁判【 GetACcount() 】  唱名某選手進場後,這名選手的資料【***LoginID*** (指帳號)、***LoginPW*** (指密碼)】是被大會所記錄的~

所以我們可以自由調用它~ (癈話,若不驗明選手資料,那我就找隻狗來代跑,不就鐵贏的 )

最後,結束比賽 的條件除了都沒人了以外,還有突發的情況。比如突然 天空下起冰苞(AccountBreakLoop:) … 

在這種情況下,當然是結束比賽速速往 逃難地點(標計處) 前進…

 

看完了以上的例子後,相信你已懂了七、八成。打鐵趁熱,再用一個實例來說明…

以下是MyShareBox 這個免註冊空間的上傳GDL檔…

Label:mybox-up                                    <--- 起跑點
GetFile()                                       <--- 裁判
========= 賽跑中 ==============
go:http://www.mysharebox.com/
SetFileValue:file=***File***
PostForm:[0]
LinkValueToVariable:dl.php,key=,***Variable1***
Output:http://www.mysharebox.com/dl.php?key=***Variable1***|***FileName***
FileBreakLoop:BREAK    <-- 天空下冰包
=========== 賽跑中 ============
FileLoop:mybox-up                <--- 終點
Output:所有選手已跑完囉
EXIT()
Lable:BREAK
Output:比賽中斷
EXIT()

這個例子非常的容易,先把要上傳的檔全部放入【檔案清單】中

設定一個起始點  Label:mybox-up

然後用 GetFile() 一次叫一個檔進來。宣告後就可以使用它的屬性變數 ***File*** (指完整路徑含檔名)、***FileName*** (單指檔名的部份)

再來就是整個上傳的過程: 進上傳頁--> 把檔案填入上傳那欄 --> 開始上傳 --> 取得下載連結 --> 記錄該連結到【輸出清單】中

其中每個檔案上傳完成後,先判斷一下現在【檔案清單】中的第一列資料,是否符合臨時脫離的條件,即其值為 #BreakFile。

若是,程序將移往標記名為 BREAK 的地方,反之則再往下走… 

最後,走到 FileLoop:mybox-up  時,會查看【檔案清單】中還有沒有檔。

若還有,程序將移往標記名為 mybox-up 處,即我們最初設定的起始點,繼續循環整個上傳的過程。

若已無資料的話,程序就往下走,碰到 EXIT( ) ,到此整個程序就會終止!!  意即所有選手已跑完的意思囉!!

 


所謂的Msg 窗就是在執行窗上面再蓋上一層窗口!!

藉由特定的指令來觸發此窗口後,便可將我們要表達的訊息顯示到三個列表中!! 讓GDL的執行不再是千篇一律的看著WEB在跑…

  輸出列表 錯誤列表 訊息來源列表 記錄列表
觸發指令 OutMsg:字串(可代變數)

字串支援 <Crlf>換行字符

OutErr:字串(可代變數)

字串支援 <Crlf>換行字符

當MSG檔伴隨著同名稱之GDL被載入時,訊息來源列表裏便會列出MSG檔裏的資料 OutRecord:字串(可代變數)

字串支援 <Crlf>換行字符

使用時機 傳達當下想表達的即時訊息 同輸出列表功用,只是特意用"錯誤"來命名,以利辨識。可用來傳達一些比較特別的即時訊息 主要因為GDL的編碼模式需排除非標準ASCII碼的部份。所以針對此部份,我們可將其寫在Msg檔內來相對完成同樣的效果 用來記錄一些重要、必需的訊息。與其它兩列表最大不同處在於有事後性資料彙整的相關指令可運用
運用指令    

      ***Msg?***  ?=1、2…
     表Msg檔的第?列

     GetMsg:?,***Variable?***
     取出Msg檔的第?列 之值存入
     自定變數中

 CopyOutToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 MoveOutToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 CopyNoteToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 MoveNoteToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 CopyAccountToRecord:符合條件的一部份
 MoveAccountToRecord:符合條件的一部份
 CopyFileToRecord:符合條件的一部份
 MoveFileToRecord:符合條件的一部份
 CopyMailToRecord:符合條件的一部份
 MoveMailToRecord:符合條件的一部份
 CopyTempToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 MoveTempToRecord:符合條件的一部份,第幾個參數(選擇性參數)
 ClearRecord:符合條件的一部份
 ClearNotRecord:符合條件的一部份

 WriteRecordFile:檔案儲存位置

 

例:

 TEST.GDL OutMsg:***Msg2***
GetMsg:2,***Variable32***
GetMsg:4,***Variable33***
OutMsg:***Variable32***
Outerr:***Msg2***<Crlf>***Variable33***
AddNote:測試備註清單資料複制到Msg窗口的功能
CopyNoteToRecord:
over()

 
TEST.MSG 請問誰是世界上最漂亮的女生??
聰明漂亮美
找死呀!! 不要命了…
算哪根蔥呀!!
 

 

以上面這個例子來說,當程式載入TEST.GDL時, 與其同名的TEST.MSG 便會一起被自動加載~

所以我切換到 Msg 窗口的【 訊息來源列表】,內容就如下圖示 ~

其中,  ***Msg?*** 就是第?列的值,比如 ***Msg2*** 也就代表"聰明漂亮美"

當然我們也可以用下面的方式來完成同樣的效果~

GetMsg:2,***Variable32***
OutMsg:***Variable32***

底下便是各列表的輸出結果~

     

 

 

 

Free Web Hosting