我必须为外部实体准备一个文件,并且该实体使用带有COBOL的IBM主机并要求该文件在EBCDIC中编码.我在C#中创建文件.我想这是一个由两部分组成的问题......首先,下面的代码是否足以确保文件以他们可以读取的方式生成?
StreamWriter sw = new StreamWriter(@"C:\EBCDICFileEquivalent.txt", false, Encoding.GetEncoding(37));
Run Code Online (Sandbox Code Playgroud)
其次,文件中的几个字段需要压缩十进制,格式为S(9)13 COMP-3.由于我已经指定了EBCDIC编码,我可以使用以下方法将十进制数字(例如1234500000001)写入文件:
sw.WriteLine("1234500000001C");
Run Code Online (Sandbox Code Playgroud)
...并在生成的文件中正确显示?
从未对EBCDIC或COMP-3做过任何事情.
我有一个从Db2表中提取的平面文件,平面文件包含char格式的记录以及压缩十进制格式.将打包数据转换为java字符串.有没有办法转换整个平面文件到ASCII格式.
我有庞大的主机文件,该文件中有一些打包的数字.我想知道如何使用java解压缩后续数字?
打包数字: ?
我阅读了解包数字的教程,并找到了以下规则来计算解包数字所需的字节数:
total_number_of_bytes = (no. of digits + 1) / 2
我写了以下代码来解压缩数字:
public String unpackData(String packedData, int decimalPointLocation) {
String unpackedData = "";
char[] characters = packedData.toCharArray();
final int impliedPositive = 15;
final int positiveNumber = 12;
final int negativeNumber = 13;
for (int currentCharIndex = 0; currentCharIndex < characters.length; currentCharIndex++) {
byte[] unpackedDigits = unpackByte((byte) characters[currentCharIndex]);
if(currentCharIndex == (characters.length - 1)) {
if(unpackedDigits[1] == impliedPositive || unpackedDigits[1] == positiveNumber) {
unpackedData += String.valueOf(unpackedDigits[0]);
} else if(unpackedDigits[1] == …Run Code Online (Sandbox Code Playgroud) 新来的!
情况:我正在开发一个需要与AS/400服务器通信的项目.我的任务是基本上处理将发送到AS/400服务器的请求.为此,所有用户输入应为EDCDIC字节.
问题:
我已设法将压缩小数转换为String,其代码如下,在此论坛中找到:
public class PackedDecimal {
public static long parse(byte[] pdIn) throws Exception {
// Convert packed decimal to long
final int PlusSign = 0x0C; // Plus sign
final int MinusSign = 0x0D; // Minus
final int NoSign = 0x0F; // Unsigned
final int DropHO = 0xFF; // AND mask to drop HO sign bits
final int GetLO = 0x0F; // Get only LO digit
long val = 0; // Value to return
for (int i …Run Code Online (Sandbox Code Playgroud) 我正在传递ebcdic编码的数据。就像是:
s = u'@@@@@@@@@@@@@@@@@@@ÂÖÉâÅ@ÉÄ'
Run Code Online (Sandbox Code Playgroud)
尝试.decode('cp500')是错误的,但是正确的方法是什么?如果我将字符串复制到类似Notepad ++的文件中,则可以将其从EBCDIC转换为ascii,但是我似乎在python中找不到可行的方法来实现这一点。对于它的价值,正确的结果是:(BOISE ID加或减空格)。
该信息是从JSON对象行的文件中检索的。该文件如下所示:
{ "command": "flush-text", "text": "@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O" }
{ "command": "flush-text", "text": "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\u00C9\u00C4@\u00D5\u00A4\u0094\u0082\u0085\u0099z@@@@@@@@@@\u00D9\u00F5\u00F9\u00F7\u00F6\u00F8\u00F7\u00F2\u00F4" }
{ "command": "flush-text", "text": "@@@@@OmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmO" }
{ "command": "flush-text", "text": "@@@@@O@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@O" }
Run Code Online (Sandbox Code Playgroud)
处理循环如下所示:
with open('myfile.txt', 'rb') as fh:
for line in fh:
data = json.loads(line)
Run Code Online (Sandbox Code Playgroud) 如何使用RecordEditor从Cobol Copybook生成Java~JRecord代码 来读取/写入二进制 EBCDIC 大型机文件。
这是一个问题和答案,试图防止提出一些糟糕/误导性的问题或可以指出答案。
如何将具有cobol copybook作为记录布局信息的大型机二进制文件(EBCDIC)转换为ASCII文件,并记住使用任何Java API或开源工具的打包和分区十进制格式?
将 ASCII 字符串转换为 EBCDIC 时:
\n\nSystem.out.println(new String("0810C2200000820000000400000000000000052852304131419391011590620022300270".getBytes("UTF-8"), "CP1047"));\nRun Code Online (Sandbox Code Playgroud)\n\n我得到以下输出字符串:
\n\n\xc3\xa4??????\nRun Code Online (Sandbox Code Playgroud)\n\n但是,我想要的是:
\n\nF0 F8 F1 F0 C2 20 00 00 82 00 00 00 04 00 00 00 00 00 00 00 F4 F1 F0 F1 F1 F5 F9 F0 F6 F2 F0 F0 F2 F2 F3 F0 F0 F2 F7 F0\nRun Code Online (Sandbox Code Playgroud)\n\n我怎样才能实现它?任何帮助将不胜感激。
\n\n谢谢
\n对早期版本的评论这个回答我的提醒我的事实,我不能想当然地认为'A','B','C'等有连续的数值.我有点假设C或C++语言标准保证这是这种情况.
那么,我该如何确定连续字母字符的值本身是否连续?或者更确切地说,我如何确定单引号内可以表达的字符常量是否具有数字值的ASCII代码?
我问的是如何在C和C++中做到这一点.显然C语言也适用于C++,但是如果有一个C++ ish工具来做这个我也对它感兴趣.另外,我问的是最新的相关标准(C11,C++ 17).