- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Copybook 的帮助下读取 EBCDIC 文件并将其转换为 Java 中的 ASCII 格式。我正在使用 JRecord 来阅读字帖。那么现在,如何使用 JRecord 从抄写本中获取字段级别?
编辑1:
请原谅我问一个模糊的问题。我没有大型机或 cobol 方面的经验。如果有帮助的话,我将添加更多详细信息。
我的源文件包含多个交易详细信息。该副本包含有关交易的信息以及与该特定交易相关的字段。
我必须将每笔交易及其字段拆分为一个单独的文件(包含一个交易和相应的字段)。
在附加的抄写本中,第 1 行中的字段可以具有从第 2 行到第 4 行的值。如果 EXTRA-TYPE 是 01,那么我必须读取第 6 行到第 11 行中的字段。同样,如果 EXTRA-TYPE 是 01,那么我必须读取第 6 行到第 11 行中的字段。是02,那么我必须读取第12行到第16行中的字段。我正在尝试动态分割事务类型及其各自的字段。(我需要获取第 1 行中相对于事务类型的字段的开始和结束位置)如何在 Java 中实现此目的?
感谢您的帮助。
最佳答案
为什么需要获得现场等级???。要将文件转换为 ascii,您不需要字段级别。
<小时/>要将 Cobol 文件转换为 ascii,您可以使用以下实用程序之一:
如果您想对文件进行一些处理,可以使用生成RecordEditor的功能生成样本JRecord Cobol copybook 中的代码。
如果您使用标准模板,RecordEditor将生成如下代码:
AbstractLine line;
int lineNum = 0;
try {
ICobolIOBuilder iob = JRecordInterface1.COBOL
.newIOBuilder(copybookName)
.setFont("cp037")
.setFileOrganization(Constants.IO_FIXED_LENGTH)
.setSplitCopybook(CopybookLoader.SPLIT_NONE)
;
FieldNamesDtar020.RecordDtar020 rDtar020 = FieldNamesDtar020.RECORD_DTAR020;
AbstractLineReader reader = iob.newReader(dataFile);
while ((line = reader.read()) != null) {
lineNum += 1;
System.out.println(
line.getFieldValue(rDtar020.keycodeNo).asString()
+ " " + line.getFieldValue(rDtar020.storeNo).asString()
+ " " + line.getFieldValue(rDtar020.date).asString()
+ " " + line.getFieldValue(rDtar020.deptNo).asString()
+ " " + line.getFieldValue(rDtar020.qtySold).asString()
+ " " + line.getFieldValue(rDtar020.salePrice).asString()
);
}
reader.close();
} catch (Exception e) {
System.out.println("~~> " + lineNum + " " + e);
System.out.println();
e.printStackTrace();
}
AbstractLine line;
int lineNum = 0;
try {
ICobolIOBuilder iob = JRecordInterface1.COBOL
.newIOBuilder(copybookName)
.setFont("cp037")
.setFileOrganization(Constants.IO_FIXED_LENGTH)
.setSplitCopybook(CopybookLoader.SPLIT_NONE)
;
LineDtar020JR lineDtar020JR = new LineDtar020JR();
AbstractLineReader reader = iob.newReader(dataFile);
while ((line = reader.read()) != null) {
lineNum += 1;
lineDtar020JR.setLine(line);
System.out.println(
lineDtar020JR.getKeycodeNo()
+ " " + lineDtar020JR.getStoreNo()
+ " " + lineDtar020JR.getDate()
+ " " + lineDtar020JR.getDeptNo()
+ " " + lineDtar020JR.getQtySold()
+ " " + lineDtar020JR.getSalePrice()
);
}
reader.close();
} catch (Exception e) {
System.out.println("~~> " + lineNum + " " + e);
System.out.println();
e.printStackTrace();
}
<小时/>
如果您想做更多通用处理,您可以使用fieldIterator:
FieldIterator fieldIterator = line.getFieldIterator("Record-Name");
<小时/>
在最新版本的JRecord中0.81.4 Source/JRecord_IO_Builder_Examples/src 目录中有示例
<小时/>如果您需要使用 JRecord 访问级别编号,请使用 CobolSchemaReader.newCobolSchemaReader(...) 接口(interface)。
您还可以查看 Cobol2Xml 的代码子项目。它通过扩展CobolSchemaReader来进行树
处理
关于java - 如何使用 Java 中的 JRecord 识别抄写本中字段的级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45529152/
我正在尝试将文件上传到 scribd。它说:“要上传的文件的内容。这需要表示为多部分 HTTP POST 的一部分”。 有人知道这是什么意思吗? 它应该看起来像这样:http://api.scribd
我有一些与 dropox 交互的代码。在这里: package rest; import com.google.gson.Gson; import com.google.gson.GsonBuilde
我是一名优秀的程序员,十分优秀!