我正在尝试使用JRecord库在eclipse RCP应用程序中显示一个大型机文件。我已经将COBOL副本作为文本文件。 要做到这一点,
但是由于一些特殊的特征,我已经抵消了问题。 这是问题
代码段:
################################
#2nd tabpanel for Reactive Map
tabPanel("Reactive Map",
#SideBarLayout for sidebar Panel for the options of the map
sidebarLayout(
#SideBar Panel with options to adjust the map
sidebarPanel(
#Databases selection
selectInput("chDatabaseMap","Choose DataBase:",
choices = c("BPD 2013 Baltimore", "BPD 2014 Baltimore"))
),
###################################
#Main panel to put plots
mainPanel(
plotOutput("MapPr")
)
)
)
我在这里缺少什么?是否需要对从大型机传输的文件进行额外的预处理?
答案 0 :(得分:3)
如果是带有\ r \ n行分隔符的文本文件(无二进制数据),请尝试:
ArrayList<AbstractLine> lines = new ArrayList<AbstractLine>();
InputStream copyStream;
InputStream fis;
try {
copyStream = new FileInputStream(new File(copybookfile));
AbstractLineReader reader = CobolIoProvider.getInstance()
.newIOBuilder(copyStream, "REQUEST", ICopybookDialects.FMT_MAINFRAME)
.setFileOrganization(Constants.IO_STANDARD_TEXT_FILE)
.newReader(datafile);
AbstractLine line;
while ((line = reader.read()) != null) {
lines.add(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
注意: setFileOrganization 告诉JRecord 它是什么类型的文件。所以 .setFileOrganization(Constants.IO_STANDARD_TEXT_FILE)告诉JRecord它是一个带有\ n或\ r \ n行尾标记的文本文件。这是Description of FileOrganisation in JRecord。
特殊字符让我担心,如果'数据'中有\ n,它将被视为行尾。如果它是VB文件,您可能需要进行二进制传输并保留RDW(Record-Descriptor-Word)。
如果文件包含二进制数据,则需要:
我将使用 RecordEditor
为生成代码添加第二个答案如果您完全确定所有记录的长度相同,则可以使用低级例程进行阅读,请参阅https://sourceforge.net/p/jrecord/discussion/678634/thread/4b00fed4/中的ReadAqtrans.java程序
基本上你会这样做:
ICobolIOBuilder iobuilder = CobolIoProvider.getInstance()
.newIOBuilder("copybookFileName", ICopybookDialects.FMT_MAINFRAME)
.setFont("CP037")
.setFileOrganization(Constants.IO_FIXED_LENGTH);
LayoutDetail layout = iobuilder.getLayout();
FixedLengthByteReader br
= new FixedLengthByteReader(layout.getMaximumRecordLength() + 2);
br.open("...");
byte[] bytes;
while ((bytes = br.read()) != null) {
lines.add(iobuilder.newLine(bytes));
}
答案 1 :(得分:3)
如果文件包含二进制数据,则确实需要进行二进制传输。您可能会发现RecordEditor很有用。
RecordEditor 0.98有一个JRecord code Generation 功能。使用 RecordEditor生成功能的优点是
如果满意,请点击“生成”按钮, RecordEditor 将生成JRecord代码。有几个代码模板 可用的:
在 RecordEditor 中选择生成&gt;&gt;&gt; Cobol的Java~JRecord代码
输入Cobol CopyBook / Sample文件并根据需要调整属性
接下来,您可以选择代码模板
最后 RecordEditor 将根据输入的属性生成JRecord代码。