变量VAR中的值为-1,当我尝试写入文件时,它显示为J(字符模式),相当于-1。
VAR在Cobol程序字帖中定义如下:
10 VAR PIC S9(1)。
有没有办法在输出文件中将显示格式从字符“J”更改为-1。
我通过谷歌搜索找到的信息如下:
值+0字符{
值-0字符}
值+1字符A
要将由EBCDIC到ASCII字符转换产生的分区ASCII字段转换为前导符号数字字段,请检查字段中的最后一位数字。如果是“{”则用0替换最后一位数字并使数字为正数。如果是“A”,则用1替换最后一位数字并将数字设为正数,如果是“B”则用2替换最后一位数字并将数字设为正数等,等等。如果最后一位是“ “用0替换最后一位数字并将数字设为负数。如果它是“J”,则将最后一位数字替换为1并将数字设为负数,如果是“K”则将最后一位数字替换为2并将数字设为负数,等等。遵循这些规则以获取所有可能的值。您可以使用查找表或IF或CASE语句执行此操作。使用适合您所用语言的最佳方法。在大多数情况下,您应该将符号放在字段中第一个数字的前面。这称为浮动符号,是大多数PC程序所期望的。例如,如果您的字段是6个字节,则值-123应为“-123”而不是“ - 123”。
答案 0 :(得分:1)
将它移动到EBCDIC输出(显示)字段以使其只是EBCDIC字符,然后将其转换为ASCII并写入它可能更简单。
例如
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
currentElement = true;
db = new DatabaseHelper(thecontext);
if (qName.equals("Asa.Amms.Data.Entity.User")) {
int length = attributes.getLength();
for (int i = 0; i < length; i++) {
String name = attributes.getQName(i);
if (name.equals("Id")) {
id = Integer.parseInt(attributes.getValue(i));
}
if (name.equals("Login")) {
LoginID = attributes.getValue(i).toString();
}
if (name.equals("Name")) {
Name = attributes.getValue(i).toString();
}
if (name.equals("Password")) {
Password = attributes.getValue(i).toString();
}
if (name.equals("ProgramOfficerId")) {
user_ProgramOfficerId = Integer.parseInt(attributes.getValue(i).toString());
}
}
Log.i("Baal dhukbe", id + LoginID + Name + Password);
db.insertUser(id, LoginID, Name, Password, user_ProgramOfficerId);
}
}
然后使用标准查找表将WS-OUT转换为ASCII并将其写入文件。
答案 1 :(得分:1)
如果要将数据从EBCDIC机器发送到ASCII机器,或者反之亦然,到目前为止,最好的方法是仅处理字符数据。然后,您可以让传输/通信机制在记录/文件级别执行ASCII / EBCDIC转换。
字段级翻译是可能的,但更容易出错(必须为所有内容准确定义字段)并且速度较慢(许多翻译与一个翻译)。
SIGN子句是一种非常好的方法。没有必要重新定义该字段(再次遇到字段定义问题,如果更改大小,则需要更改两个位置)。
小数位存在类似的问题。在源和数据定义不相同的情况下,必须提供显式小数点,或单独的缩放因子。
这两个问题和原始问题也可以通过使用数字编辑的定义来处理。
01 transfer-record.
...
05 numeric-edited-VAR1 PIC +9.
...
如果是肯定的,则会包含+1
,其中包含{1}},其中包含-1
。
取一个金额字段:
01 VAR2 PACKED-DECIMAL PIC S9(7)V99.
...
01 transfer-record.
...
05 numeric-edited-VAR2 PIC +9(7).99.
...
对于4567.89,为正,新字段将包含+0004567.79
。对于相同的值,但为负值,-0004567.79
。
Source-machine上的代码是:
MOVE VAR1 TO numeric-edited-VAR1
MOVE VAR2 TO numeric-edited-VAR2
在目标上(在COBOL中)
MOVE numeric-edited-VAR1 TO VAR1
MOVE numeric-edited-VAR2 TO VAR2
如果您对没有小数位的字段使用SIGN子句(或者如果您希望隐含关于它的危险,请使用小数位),代码是相同的。
现场级翻译的另一个问题是审核员不喜欢/不喜欢它。 &#34;当数据到达时你做的第一件事就是更改它?真正&#34?;审计员说。