SQR中$char_tab = chr(9)的含义及输出定位技术问询
SQR制表符相关问题解答
1. $char_tab = chr(9)的含义
$char_tab = chr(9)是SQR中定义变量的语句,其中chr(9)对应ASCII编码为9的字符,也就是水平制表符(Tab)。定义这个变量是为了在后续输出代码中重复调用,避免每次都写chr(9),提升代码可读性和维护性。
2. WRITE语句的预期定位与实际空格不符的原因
先看你提供的WRITE语句片段:
WRITE 1 FROM record_type:4 $CHAR_TAB $DETSEQ:25 $CHAR_TAB $SUMSEQ:25 $CHAR_TAB $today_date:10 $CHAR_TAB
预期行为
这条语句的设计意图是输出一组用制表符分隔的字段,每个字段先按指定宽度格式化,再追加制表符:
record_type:4:将record_type字段格式化为4个字符宽度,不足部分用空格填充,之后输出一个制表符DETSEQ:25:将DETSEQ格式化为25个字符宽度,不足补空格,之后输出制表符- 后续字段以此类推
实际空格不符的原因
你看到的“数据间空格数和制表符定义不符”,是因为SQR的:n是固定宽度格式化规则:
- 如果字段实际内容长度小于指定的
n,会自动用空格填充到n位,之后再追加$CHAR_TAB(制表符)。所以你看到的间隔是「固定宽度填充的空格」+「制表符」的组合,而不是单纯的一个制表符,视觉上的空格数自然和纯制表符不一致。
解决方法
如果需要纯制表符分隔的输出(无固定宽度填充的空格),只需去掉字段后的宽度指定,修改后的语句如下:
WRITE 1 FROM record_type $CHAR_TAB $DETSEQ $CHAR_TAB $SUMSEQ $CHAR_TAB $today_date $CHAR_TAB
这样每个字段会原样输出内容,之后直接用制表符分隔,输出文件就是标准的制表符分隔格式,符合新供应商的复刻要求。
内容的提问来源于stack exchange,提问作者Okie4ever
相关产品推荐
相关产品推荐

