轉換

CONVERT 動詞將 ASCII 字串轉換為 EBCDIC,或將 EBCDIC 字串轉換為 ASCII。 要轉換的字串稱為來源字串。 轉換後的字串稱為目標字串。

以下結構描述了 CONVERT 動詞所使用的動詞控制區塊(VCB)。

語法

  
struct convert {  
    unsigned short       opcode;  
    unsigned char        opext;  
    unsigned char        reserv2;  
    unsigned short       primary_rc;  
    unsigned long        secondary_rc;  
    unsigned char        direction;  
    unsigned char        char_set;  
    unsigned short       len;  
    unsigned char FAR *  source;  
    unsigned char FAR *  target;  
};  

成員

操作碼
提供的參數。 識別操作代碼的動詞 SV_CONVERT。

Opext
保留欄位。

後備隊2
保留欄位。

primary_rc
回傳參數。 指定 APPC 在動詞結束時設定的主要回傳代碼。 有效的回傳代碼會依 APPC 所發出的動詞而有所不同。 請參閱返回代碼以了解此動詞的有效錯誤代碼。

secondary_rc
回傳參數。 指定 APPC 在動詞完成時設定的次要回傳碼。 有效的回傳代碼會依 APPC 所發出的動詞而有所不同。 請參閱返回代碼以了解此動詞的有效錯誤代碼。

方向
提供的參數。 指定轉換方向。 若要從 ASCII 轉換成 EBCDIC,請使用 SV_ASCII_TO_EBCDIC。 要從 EBCDIC 轉換成 ASCII,請使用 SV_EBCDIC_TO_ASCII。

char_set
提供的參數。 指定用於轉換原始字串的字元集。 允許的值包括 SV_A(A 型字元集)、SV_AE(AE 型態字元集)和 SV_G(使用者自訂型別 G 字元集)。

len
提供的參數。 指定要轉換的字元數量。

此長度加上從來源或目標緩衝區起始點的偏移量不得超過區段邊界。


提供的參數。 指定包含要轉換字元字串的緩衝區位址。

目標
提供的參數。 指定緩衝區的位址以包含轉換後的字串。

此緩衝區可能與 來源 參數指向的緩衝區重疊或重合。 在這種情況下,轉換後的資料字串會覆蓋原始資料字串。

返回碼

SV_OK
主要退稅代碼;動詞成功執行。

SV_PARAMETER_CHECK
主要退稅代碼;該動詞因參數錯誤而未執行。

SV_CONVERSION_ERROR

次要回傳代碼;來源字串中的一個或多個字元未在轉換表中找到。 這些字元被轉換成空值(nulls,0x00)。 動詞仍然執行。

SV_INVALID_CHARACTER_SET

次要回傳代碼; char_set 參數包含無效值。

SV_INVALID_DATA_SEGMENT

次要回傳代碼;包含來源或目標字串的資料緩衝區無法容納在同一區段,或目標區段並非讀寫區段。

SV_INVALID_DIRECTION

次要回傳代碼;該指示包含無效值。

SV_INVALID_FIRST_CHARACTER

次要回傳代碼;A 型原始字串的第一個字元無效。

SV_TABLE_ERROR

次要回傳代碼;以下其中一次發生:

  • 包含使用者撰寫的類型 G 轉換表的檔案並未由環境變數 CSVTBLG 指定。

  • 表格格式不正確。

  • 找不到 CSVTBLG 變數指定的檔案。

    SV_COMM_SUBSYSTEM_NOT_LOADED
    主要退稅代碼;在處理動詞時,必須的元件無法被載入或終止。 因此,無法進行溝通。 請聯絡系統管理員以採取糾正措施。

    SV_INVALID_VERB
    主要退稅代碼; 操作碼 參數與任何動詞的操作碼不符。 沒有執行動詞。

    SV_INVALID_VERB_SEGMENT
    主要退稅代碼;VCB 的範圍超出資料區段的末端。

    SV_UNEXPECTED_DOS_ERROR
    主要退稅代碼;以下情況之一發生:

  • Microsoft Windows 系統在處理動詞時遇到錯誤。 作業系統的回傳碼則是透過次要回傳碼回傳。 如果問題持續,請聯絡系統管理員以取得糾正處理。

  • CSV 是從訊息迴圈中發出,該迴圈由另一個應用程式呼叫 Windows SendMessage 函式所觸發,而非較常見的 Windows PostMessage 函式呼叫。 動詞處理無法進行。

  • SendMessage 啟動你的應用程式時,已經發出了一份 CSV 文件。 你可以透過 Windows API 函式呼叫來判斷你的應用程式是否被 SendMessage 呼叫。

備註

A 型字元集包含:

  • 大寫字母。

  • 數字 0 到 9。

  • 特殊字元$、#、@和空格。

    此字元集由系統提供的 A 型轉換表支援。

    來源字串的第一個字元必須是大寫字母或特殊字元 $、# 或 @。 僅允許在後方位置使用空格。 當指令是 ASCII 轉為 EBCDIC 時,小寫 ASCII 字母會被轉換成大寫的 EBCDIC 字母。

    AE 字元集類型包含:

  • 大寫字母。

  • 小寫字母。

  • 數字 0 到 9。

  • 特殊字元 $、#、@、句點和空格。

    此字元集由系統提供的 AE 轉換表支援。

    來源字串的第一個字元可以是字元集中的任何字元,唯獨空格除外。 僅允許在後方位置使用空格。

    在轉換過程中,嵌入的空白包(包括第一位置的空白包)會被轉換成0x00。 雖然此類轉換會完成,但CONVERSION_ERROR會作為次要回傳代碼,表示 CSV 函式庫已完成對所提供資料的不可逆轉換。

    對於 Windows 來說,COMTBLG 的描述應該指向 Windows 登錄檔的 \SnaBase\Parameters\Client 下。

    G 型轉換表的資料必須是長達 32 行的 ASCII 檔案。 每行必須由32位十六進位數字組成,代表16個字元,並以回車和換行作為結尾。 前 16 行(256 個字元)指定 EBCDIC 字元,ASCII 字元被轉換成哪些字元;剩餘 16 行則指定 EBCDIC 字元轉換成的 ASCII 字元。

    十六進位數字 A 到 F 可以是大寫或小寫。 不過,你可能想將這些數字改為大寫,以確保與 IBM ES for OS/2 版本 1.0 的相容性。

備註

你可以用 GET_CP_CONVERT_TABLE 在記憶體中建立一個 Type G 的使用者撰寫轉換表,然後將該表存入檔案中。