簡體   English   中英

字符串/正則表達式字符'[',']','{','}'用C語言在大型機TN3270(代碼頁1047,1147,500,249)上替換為空格

[英]String/Regular expression characters '[', ']', '{', '}' replaced by spaces on Mainframe TN3270 (with code page 1047,1147,500,249) in C language

我用C語言創建了一個函數,用於使用正則表達式在某些條件下識別整數。 regex表達式在UNIX和其他平台上可以正常工作,但是當我在Mainframe TN3270上使用同一段代碼時,字符串/正則表達式中的字符,例如[[,']','{','}'被替換為編譯期間的空格。 我在regcomp期間嘗試在所有這些字符和REG_EXTENDED之前使用'\\',但結果沒有變化。

int VALNUM ()
{                                        
   regex_t s_regex, *ps_regex = &s_regex;
   char pc_regexpInt[ ] = "^[+-]{0,1}[0-9]{1,} *";
   printf("pc_regexpInt value:%s\n",pc_regexpInt);
   regcomp(ps_regex, pc_regexpInt, REG_EXTENDED)
   regexec(ps_regex, pc_buffer, 0, NULL, 0);
   regfree(ps_regex);
}

對我來說,printf返回:

pc_regexpInt value:^ +-  0,1  0-9  1,  *

並且regexec對於pc_buffer值(如+120或-3.1415)也失敗。

注意:代碼編譯沒有問題,這里我只寫了一段代碼。 聲明和所有內容都在這里丟失,這不是問題。

有人建議。

有幾個因素在起作用。 ISPF中編輯器的代碼頁(如果正在使用的話),ISPF中3270會話的終端設置以及正在運行的代碼的代碼頁。

對於3270,我發現使用代碼頁Codepage 1047對我有效。 該代碼頁將左括號和右括號分別映射到0xAD [和0xBD ] 還有許多其他代碼頁,但通常是將它們映射以滿足需要將其他字符轉換為Latin-1的語言環境的編碼需求。

設置仿真器的代碼頁。 例如,我通過選擇會話上的屬性來使用HostOnDemand,然后: 設置終端會話的1047代碼頁

接下來,您需要設置ISPF。 這是選擇支持括號的終端類型。 在ISPF中,通過選擇菜單->設置將終端類型設置為3277A。 此屏幕顯示適合我的會話的選項。請注意,我選擇了2號

顯示正確顯示的括號。

最后一部分是您對C及其語言環境的設置。 找到了該參考資料 ,可以幫助您完成最后一部分。

TN3270是用於連接到z / OS和其他操作系統的協議。 我假設您在這里使用z / OS。 通常,z / OS使用EBCDIC而非ASCII進行字符編碼。 正如@Ctx所說,不同的字符集具有不同的映射,並且TN3270客戶端需要與主機系統一起使用適當的映射。

因此,您需要使用其中包含{,},(和)的代碼頁。 代碼頁1047通常用於此目的。 但是,您需要確保可以在主機系統(可能是通過ISPF選項0設置)上以及在客戶端中都使用它,可以通過多種不同的方式進行操作。 有關更多信息,請參見https://www.askthezoslady.com/tag/setting-tso-code-page/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM