是否可以在不知道每一列的宽度或列名并将其转换为CSV的情况下解析固定宽度的文件?

问题描述 投票:1回答:1

我想知道是否有可能在不了解任何内容并将其制成CSV的情况下解析any定宽文件。我的直觉说不,因为可能存在一些极端情况。如果您知道宽度,但不知道列名,那很好。如果您知道列名,则可以计算出宽度,这样就可以了。但是,如果您没有两者,那么我可以想象,如果您有足够的逻辑,那么在实际开始解析之前读取文件一次就可以做到。 也许。但是,如果这也是一个约束(必须读取一次文件),那么您就不走运了,对吗?还要假设正在流式传输,因为文件为50GB,无法加载到内存中。因此,要克服我的目标和限制:

目标:要成功地转换没有宽度信息的固定宽度文件,最明显的是列名和宽度长度

约束:1.我期望文件很大,所以我必须将其流化,而不是将其加载到内存中,并且两次读取该文件的效率极低。2.我没有有关列名,宽度或任何其他内容的信息-我只是收到一个固定宽度的文件。

鉴于这些限制,目标是否可能?我知道,在简单的情况下,可以这样说:

Love    Lucy    Is    Awesome    
data    datatat datad datadaa

嗯,随便吧。因为列名中没有空格,所以很容易。但是我无法真正弄清的是这样一个复杂的情况:

The   Swimming Pool  Is    Dirty
data  data           data  data
data  datada   data  data  data

我永远不知道“ Swimming Pool”是一栏,还是“ Swimming”和“ Pool”是两栏,直到通过该文件。如果我所有的行都指示四个记录,则“游泳池”是一列;五,那么它们是两列。

事实上,那只是一个假设;也许“ Pool”始终为空。我的意思是,即使是这种情况:

Swimming Pool  
datadatadatat

我对固定宽度的文件了解不多,但是两个记录之间是否至少要有空格?可以将其翻译为:

Swimming, Pool
datadatad,atat

所以,我的难题向你展现。老实说,我什至不确定这种简单的情况是否真的很简单。也许Lucy Is .是一列。第一次处理此文件类型(或什至真正听说过),并且想要专业人员的想法。

csv parsing fixed-width
1个回答
1
投票

!!!

这是最简单的固定宽度文件可以通过这种方式传递。固定宽度的文件可以

  • 具有多个记录布局
  • 二进制字段
  • 可能是Cobol文件
  • 对于某些字段,您需要知道正确的字段定义是什么解释它们。例如,可以假定小数点,即12345可以是123.45,1.2345等
  • 文本字段通常左对齐,

对于固定宽度的文件,您需要一个文件描述(chema)

Cobol文件

固定宽度文件的常见来源来自Cobol应用程序。Cobol定宽文件]

  • 从没有列标题
  • 通常字段之间没有空格
  • 可以有二进制字段
  • 假定小数点
  • 分区十进制

在此问题中查看文件

软件

  • Microsoft Excel / Access +大多数电子表格具有固定宽度导入向导
  • RecordEditor / Recsveditor具有固定宽度文件向导,可以编辑固定宽度文件
© www.soinside.com 2019 - 2024. All rights reserved.