我正在尝试使用Apache Beam中JRecord中的CobolIoProvider类将EBCDIC文件转换为ASCII。
我正在使用的代码:
CobolIoProvider ioProvider = CobolIoProvider.getInstance();
AbstractLineReader reader = ioProvider.getLineReader(Constants.IO_FIXED_LENGTH, Convert.FMT_MAINFRAME,CopybookLoader.SPLIT_NONE, copybookname, cobolfilename);
代码根据需要读取和转换文件。我只能从本地系统读取cobolfilename和copybookname,它们基本上分别是EBCDIC文件和copybook的路径。但是,当我试图从GCS读取文件时,它失败了,FileNotFoundException--“文件名、目录名或卷标语法不正确”。
是否有使用CobolIoProvider类从GCS读取Cobol文件(EBCDIC)的方法?
如果没有,是否有其他类可以将Cobol文件(EBCDIC)转换为ASCII,并允许从GCS读取这些文件。
我正在使用的代码:
ICobolIOBuilder iob = JRecordInterface1.COBOL.newIOBuilder("copybook.cbl")
.setFileOrganization(Constants.IO_FIXED_LENGTH)
.setSplitCopybook(CopybookLoader.SPLIT_NONE);
AbstractLineReader reader = iob.newReader(bs); //bs is an InputStream html" target="_blank">object of my Cobol file
然而,这里有几个问题:-
1)我必须在本地保存我的copybook.cbl。有没有办法从GCS读取copybook文件。我尝试了下面的代码,试图从GCS读取copybook到Stream,并将Stream传递给LoadCopyBook()。但是代码不起作用。
下面的示例代码:
InputStream bs2 = new ByteArrayInputStream(copybookfile.toString().getBytes());
LayoutDetail schema = new CobolCopybookLoader()
.loadCopyBook( bs, " copybook.cbl",
CopybookLoader.SPLIT_NONE, 0, "",
Constants.USE_STANDARD_COLUMNS,
Convert.FMT_INTEL, 0, new TextLog())
.asLayoutDetail();
AbstractLineReader reader = LineIOProvider.getInstance().getLineReader(schema);
reader.open(inputStream, schema);
2)使用newReader从流中读取EBCDIC文件并没有将我的文件转换为ASCII。
谢了。
在新类型的基于文件的源中使用beam/dataflow的最简单方法是首先使用fileio
获取pcollection
,然后使用dofn
读取该文件。这将需要实现从给定通道读取的代码。类似以下内容:
Pipeline p = ...
p.apply(FileIO.match().filepattern("..."))
.apply(FileIO.readMatches(...))
.apply(new DoFn<ReadableFile, String>() {
@ProcessElement
public void processElement(ProcessContext c) {
try (ReadableByteChannel channel = c.element().open()) {
// Use CobolIO to read from the byte channel
}
});
问题内容: 我应该通过使用Java将EBCDIC文件转换为ASCII。到目前为止,我有以下代码: 文件描述如下: 我们可以忽略每一行的前2个字节。问题是字节存在USAGE IS COMP,因为读者无法正确转换它们,我想我应该将它们读取为字节或其他内容,尽管我不知道如何。 问题答案: 如果我正确地解释了这种格式,则您的二进制文件格式具有固定长度的记录。其中一些记录不是字符数据(COBOL计算字段?)
我们有PHP服务器代码,在iSeries中端执行SQL语句。 以下是SQL查询的简化版本 查询执行得很好,问题是当使用诸如“sometext”“title”这样的静态字段/值时,结果在PHP中返回时,它们不是所需的格式 谢了! 编辑 根据bucks的建议,我们将用户配置文件CCSID更改为37,而不是65535 解决方案是将用户配置文件改为使用CCSID37,并将服务器作业改为使用CCSID37。
问题内容: 我需要编写一个“简单”实用程序以将ASCII转换为EBCDIC吗? Ascii来自Java,Web和AS400。我周围有一个google,似乎找不到一个简单的解决方案(也许因为没有一个:()。我希望使用开源util或为已经编写的util付费。 这样吧? 谢谢, 史考特 问题答案: JTOpen是IBM Java工具箱的开源版本,它具有访问AS / 400对象的类的集合,包括用于访问本机
我尝试过使用python 2.6将EBCDIC转换为ASCII,但在这方面存在许多问题,比如压缩字段没有得到转换,记录计数增加。 是否有任何方法转换EBCDIC文件压缩字段到ASCII格式。