MasteringVFP/2/3/3

出自VFP Wiki

在2005年1月7日 (五) 02:08由Elleryq (對話 | 貢獻)所做的修訂版本
(差異) ←上一修訂 | 最新修訂 (差異) | 下一修訂→ (差異)
跳轉到: 導航, 搜尋

目錄

TEXT ... ENDTEXT 命令

用途

6.0 版:
輸出文字列、運算式和函數的結果及記憶體變數的內容。
8.0 版:
將指定的 TextLines 文字列傳送到目前輸出裝置。Visual !FoxPro 傳送文字列到目前輸出裝置,此動作會持續進行,直到碰到 ENDTEXT 敘述或到程式檔之盡頭為止。
此目前輸出裝置可包括 Visual FoxPro 的主視窗、一個使用者定義的視窗、一臺印表機、一個文字檔或一個低階檔案。

語法

6.0 版:
TEXT
 TextLines
ENDTEXT
7.0 版:
TEXT [TO VarName [ADDITIVE] [TEXTMERGE] [NOSHOW]]
 !TextLines
ENDTEXT
8.0 版:
TEXT [TO VarName [ADDITIVE] [TEXTMERGE] [NOSHOW] [PRETEXT eExpression]]
 TextLines
ENDTEXT

參數

!TextLines

  • 指定送到目前輸出裝置上的文字。TextLines 可以是文字、記憶體變數、陣列元素、運算式、函數或者它們的任何組合。
    • 注意
只有在 SET TEXTMERGE 設定為 ON,並且運算式、函數、記憶體變數和陣列元素中包含 SET TEXTMERGE DELIMITERS 指定的分隔符號時,才計算 !TextLines 所指定的值;若 SET TEXTMERGE 設定為 OFF,則輸出運算式、函數、記憶體變數和陣列元素,以及它們之間分隔符號的原義字串。
  • 例如:如果 SET TEXTMERGE 為 ON,並且文字列中包含 <<DATE( )>>,則輸出當天的日期;如果 SET TEXTMERGE 為 OFF,則 <<DATE( )>> 原樣輸出。
  • 如果在 TEXT 和 ENDTEXT 中或在「\」、「\\」之後放置註釋,則該註釋也一起輸出。

TO !VarName

  • 指定用於傳遞 TEXT...ENDTEXT 控制項敘述內容的記憶體變數名稱。該變數可以已經存在。
  • 如果該變數尚未定義,Visual !FoxPro 將自動建立為私有變數。TO 子句操作是不管 SET TEXTMERGE 的設定。如果 SET TEXTMERGE 設定到一個檔案而且包括了 TO 敘述,則 Visual !FoxPro 同時輸出到檔案和變數。

ADDITIVE

  • 決定 TO 所指定的變數內容是否覆蓋或附加到已存在的內容。
    • 注意
如果 TO VarName 不是一個字串,Visual FoxPro 總是覆蓋在 VarName 中的內容。

TEXTMERGE

  • TEXTMERGE 關鍵字允許計算分隔符號中包含的內容而不需要 SET TEXTMERGE ON。

NOSHOW

  • 禁止螢幕顯示合併文字。

PRETEXT eExpression

  • 指定在 TEXT...ENDTEXT 之間或一個數值運算式的每一文字列合併內容之前插入的字串。
  • 下表描述 PRETEXT 子句依據 eExpression 所指定的運算式之行為:
eExpression PRETEXT 行為
字元運算式 出現在 TEXT...ENDTEXT 敘述之間的每一文字列合併內容之前插入運算式。當在 TEXT...ENDTEXT 中使用 PRETEXT 時,eExpression 被限制在 255 個字元的最大長度。eExpression 覆蓋 _PRETEXT 系統變數的內容。當 eExpression 包含一個需要計算的運算式 (例如:一個使用者定義的函數) 時,Visual !FoxPro 僅在 TEXT 命令首次出現時評估一次。
數值運算式 指定追加的旗標值來決定出現在 TEXT...ENDTEXT 敘述之間文字合併內容的行為。舉例來說,7 (由 1 + 2 + 4 累加的) 這個值指定 Visual FoxPro 去除包括空格、TAB 鍵和換行符號 (CHR(13)) 的所有白色空格。落在 0-7 範圍之外的值會產生一個錯誤。注意:指定 0 這個值是不會去除白色空格的。當 eExpression 是一個數值運算式時,您可以使用 _PRETEXT 系統變數插入附加文字到 Visual !FoxPro 所去除的白色空格之後。
  • 下表列出您可使用在 eExpression 中的數值型態的附加旗標來指定其他的行為:
值(附加的) 描述
1 在每行之前除去空格。
2 在每行之前除去 TAB 鍵。
4 除去換行符號 (CHR(13))。例如:在每行之前的空白行。
    • 注意
不像 _PRETEXT 系統變數, PRETEXT 子句並不是全域範圍而且僅用於 TEXT...ENDTEXT 敘述出現之中。
  • 使用 PRETEXT 子句來移除字元僅適用於 TEXT...ENDTEXT 敘述中的文字,而且無法評估來自 cExpression 中的合併文字。
在下列範例中,在 myvar 記憶體變數中的空格,當合併到 TEXT...ENDTEXT 中的文字時是不會被移除的:
myvar = "   AAA"
TEXT TO x NOSHOW ADDITIVE TEXTMERGE PRETEXT 7
Start Line
<<myvar>>
   BBB
  CCC
ENDTEXT

附註

  • 預設情況下,TEXT ... ENDTEXT 的輸出送到 Visual FoxPro 的主視窗或作用視窗。使用 SET CONSOLE OFF 命令可禁止輸出到 Visual FoxPro 主視窗或作用視窗。使用 SET PRINTER 命令可以輸出到印表機或文字檔案。
  • TEXT ... ENDTEXT 的輸出也可以送到由 FCREATE( ) 或 FOPEN( ) 函數建立或開啟的低階檔案中。如果把 FCREATE( ) 或 FOPEN( ) 函數傳回的檔案控制碼儲存到 _TEXT 系統記憶體變數中,那麼將直接輸出到相對應的低階檔案中。
    • 注意
合併文字通常處理包括任何在一個 TEXT...ENDTEXT 敘述中的每行之前出現的白色空格。然而,與白色空格共用可能導致合併文字失敗,舉例來說,當 XML 被使用於網頁瀏覽器中時,您必須移除白色空格以避免不正確地格式化的 XML。

範例

範例 1 下面的範例演示了建立一個名為 myNamesFile.txt 低階檔案,將其檔案控制碼存入 _TEXT 系統記憶體變數中。如果不能建立 myNamesFile.txt 檔案,程式將退出。 Visual FoxPro 開啟 customer 資料表格,把最前面的 10 個連絡人輸出到 myNamesFile.txt 檔案中,Visual FoxPro 輸出文字和函數的結果到文字檔案中。此範例使用 MODIFY FILE 命令來開啟 myNamesFile.txt。

CLEAR
CLOSE DATABASES
SET TALK OFF
SET TEXTMERGE ON              && 啟用運算式和函數嵌入
STORE FCREATE('myNamesFile.txt') TO _TEXT && 建立低階檔案
IF _TEXT = -1               && 不能建立低階檔案則退出程式
 WAIT WINDOW '不能建立輸出檔案,按一鍵退出。'
 CANCEL
ENDIF

CLOSE DATABASES
OPEN DATABASE (HOME(2) + 'Data\testdata')
USE customer                && 開啟 Customer 表

TEXT
     CONTACT NAMES
  <<DATE( )>>  <<TIME( )>>
ENDTEXT
WAIT WINDOW '按一鍵來產生前十個名字。'
SCAN NEXT 10
  TEXT
   <<contact>>
  ENDTEXT
ENDSCAN
CLOSE ALL
MODIFY FILE myNamesFile.txt
ERASE myNamesFile.txt

範例 2 下面的範例顯示一個使用 TEXT...ENDTEXT 去儲存一個 XML 資料集到一個變數的自定程序。在範例中,所有的空格、TAB 鍵和換行符號會被去除掉。

PROCEDURE myProcedure
 DO CASE
 CASE nValue = 1
   TEXT TO myVar NOSHOW TEXT PRETEXT 7
    <?xml version="1.0" encoding="utf-8"?>
    <!DataSet xmlns="http://tempuri.org">
    <<ALLTRIM(STRCONV(leRetVal.item(0).xml,9))>>
    </!DataSet>
   ENDTEXT
 OTHERWISE
 ENDCASE
ENDPROC

範例 3 下面的範例顯示一個使用 TEXT...ENDTEXT 去儲存一段要顯示在 MESSAGEBOX 中的訊息到一個變數的程式碼。本範例不是 VFP 本身提供的,而是來自「梅子論壇」、狐友:huangdehua 所提供的 。

* 以下是引用 jiangbin 在 2004-8-7 11:27:10 的發言:(梅子論壇)
* 以前,總是用CHR(13)之類來控制換列,很不好用,現在知道了.........
* 原來 MESSAGEBOX 可以這樣用:

TEXT TO messageinfo NOSHOW
請檢查以下項目:
    1、網絡連接的基本參數設計是否正確(通知管理員檢查)
    2、資料服務器是否開機。
    3、你的計算機和資料庫服務器的網絡連接是否正常。
    4、其它原因
請查明原因或重新選擇本地資料使用本程式。
ENDTEXT
=MESSAGEBOX(messageinfo,64,"提示")