c - 字符串/正则表达式字符 '[' , ']' , '{' , '}' 在大型机 TN3270(代码页 1047,1147,500,249)上用 C 语言替换为空格

标签 c character-encoding mainframe 3270

我用 C 语言创建了一个函数,用于使用正则表达式在某些条件下识别整数。 正则表达式在 UNIX 和其他平台上运行良好,但是当我在大型机 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 session 的终端设置以及您运行的代码的代码页。

对于 3270,我发现使用代码页代码页 1047 对我有用。该代码页将左括号和右括号分别映射到 0xAD [ 和 0xBD ]。还有各种其他代码页,但它们通常是为需要将其他字符转换为 Latin-1 的语言环境的编码需求而映射的。

为模拟器设置代码页。例如,我通过选择 session 中的属性来使用 HostOnDemand,然后: Setting 1047 Code page for terminal session

接下来您需要设置 ISPF。这是选择支持括号的终端类型。在 ISPF 中,通过选择菜单 -> 设置将您的终端类型设置为 3277A。 This screen shows the options in place for my session.  Note that I selected number 2

Showing the brackets correctly displayed.

最后一部分是 C 及其语言环境的设置。找到这个reference这应该可以帮助您完成最后的部分。

关于c - 字符串/正则表达式字符 '[' , ']' , '{' , '}' 在大型机 TN3270(代码页 1047,1147,500,249)上用 C 语言替换为空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52733821/

相关文章:

c++ - 使用 lex 和 yacc 解析文件的 C++ 程序中的编译错误

c - 指针地址相同但字段不同

php - 修复 PHP 中的字符

PHP、MySQL 和 XML = 乱码 HTML 输出

java - 使用 Jagacy jar 自动化大型机应用程序时,收到错误消息,指出 "KDB16104I Application has not been defined to CICS"

大型机内部

C - 'if' 之后的代码(以及 'while' 内部)不执行

c - 使用指针在 C 中删除重复项时出错

windows - Windows ANSI Western (cp 1252) 首先出现在哪个 Windows 版本中?

cobol - CICS 返回 VS GOBACK