首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.net读取Cobol文件字段(纯二进制、EBCDIC、压缩)

VB.net读取Cobol文件字段(纯二进制、EBCDIC、压缩)
EN

Stack Overflow用户
提问于 2021-06-17 21:30:08
回答 1查看 114关注 0票数 0

我需要将Cobol文件读入VB.net。以下是文档中对数据类型的描述:

代码语言:javascript
复制
All Magnetic tape files are recorded in 9-track, 8OOBPI mode with odd parity. They are created IBM equipment disk operating system.  IBM System 360 Standard. 

Binary - Data is coded in pure binary code.

BCD - Data is coded in binary coded decimal format. (Primarily
for files created by the IBM 1401 System).

EBCDIC - Data is coded in extended binary coded decimal interchange code. :(An IBM developed code.)

Packed - Data is coded in packed decimal format. 

File Format:
1-2 Record Count [Numeric] (Binary)
3-4 Filler (Binary)
5-5 Record Type [B or R] (EBCDIC)
6-10 Sales Location Numeric [9 digit number] (Packed)
11-13 Sales Identifier (3 character Alpha) (EBCDIC]
etc

所以,我知道我应该将整个文件读入一个字节数组,这是我所知道的极限……A)我在EBCDIC对话上看到另一篇帖子,使用

代码语言:javascript
复制
System.Text.Encoding.GetEncoding(37) 

但它是针对整个文件的。如果我运行整个文件,我会看到可理解的文本,但当然其他字段都是垃圾。我不知道正确解码单个字段的语言。B)我不知道如何处理纯二进制格式。C)我不知道如何读取Packed,特别是作为单个字段

我已经尝试了纯二进制的各种解码选项,但我得到的第一个字段的数字与文档中声明的行长不一致。

EN

回答 1

Stack Overflow用户

发布于 2021-06-18 07:38:49

压缩十进制格式:

对于s9(5)V9(4) comp-3,123.45以字节格式表示为

代码语言:javascript
复制
      00 12 34 50 0c

每个数字由4位表示,末尾有4位符号(c),3后面有一个假定的十进制。

大多数语言都提供了将字节/字节转换为字符串的例程,即byte x'34‘-->> string '34’。因此,您可以:

  1. 将字节转换为字符串,将
  2. 中的小数点去掉末尾的符号字符,并将相应的符号添加到前面的

还有其他方法:

其他字段

  • 第一个字段(二进制)可以是高字节顺序的二进制整数或另一个压缩十进制。.net中可能内置了一个实用程序,用于从ebcdic到ascii的字符字段执行this.
  • Convert操作,一次处理一个字段

在VBA中,你不需要读取整个文件,你可以逐条记录地读取它。我假设您可以在vb.net中做同样的事情

有用的实用程序

这些工具可能对测试很有用。

  • RecordEditor应该能够显示该文件。布局向导应该能够确定文件的格式。或者使用

下面的Cobol copybook

  • Java程序CobolToCsv应该能够将文件转换为Csv

01录音带。05记录-计数图片s9(3) comp.05填充图片x(2)。05记录类型图片x。05销售地点图片s9(9) comp-3。05销售-标识符图片x(3)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68020404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档