在数据文件中手动定义固定宽度

Posted

技术标签:

【中文标题】在数据文件中手动定义固定宽度【英文标题】:Manually Define Fixed Widths in Data File 【发布时间】:2019-06-26 14:41:01 【问题描述】:

我有一个来自第三方的固定宽度数据文件,其中包含 1,000 条记录。它带有一个单独的文档,显示所有可用列、char start char end 和每列的 char length。它有数千列。

我的数据文件的每一行都没有数据,因此在 Excel 中定义固定宽度是不可行的,因为我可能会错误地跳过一列,因为我看不到它有数据。

是否有可让您手动输入/定义或导入宽度的文本编辑器?

【问题讨论】:

除空白行之外的所有行是否具有相同的数据字符开始、字符结束和字符长度?如果是这样,您可以删除空白行作为初步数据清理步骤。 这是真的,但有数百列需要解析,我正在寻找一种更自动化的方法。 【参考方案1】:

这个“单独的文档”是什么样的?假设我有一个文本文件,其中有一列要读取的宽度值,如下所示:

20

25

30

10

5

23

25

10

23

然后我可以将此文本文件中的值读取到 excel 中,并使用以下 vba 代码调整电子表格的列宽:

Sub colWidth()
    Dim widthArray() As String
    Dim myFile, textline As String
    Dim x, y As Integer


    'example text file containing column widths
    myFile = "C:\qqq\qqq\qqq\widths.txt"

    'loop through the file and store each column width in an array
    Open myFile For Input As #1
    x = 1
    Do Until EOF(1)
        Line Input #1, textline
        ReDim Preserve widthArray(1 To x)
        widthArray(x) = textline
        x = x + 1
    Loop
    Close #1

    'using the array of column widths to adjust columns
    For y = 1 To UBound(widthArray)
        Columns(y).ColumnWidth = Int(widthArray(y))
    Next y
End Sub

【讨论】:

这正是我的想法。单独的文本文件看起来像您在示例中显示的内容,有一列数字指示在哪个字符处结束/开始新列。两个问题:1)我可以用路径/文件名替换 myFile 引用并期望代码工作吗? 2) 我应该把代码放在 Excel 的什么地方? 您必须编辑一些内容才能使其正常工作。首先,这是目前假设文本文件中只有一列数据(如果无法手动完成,这是一个相当简单的修复,可以使多列文件工作)。其次,ColumnWidth 属性应该理论上等于单元格中的字符数(请参阅docs.microsoft.com/en-us/office/vba/api/excel.range.columnwidth),但是如果您更改了字体/字体大小,则可能会有放大/缩小。 要运行代码,请在 Excel 电子表格中按 alt + f11(在 Windows 上)以加载 VBA 控制台。然后,插入一个新模块,粘贴代码,然后按 f5 或绿色箭头运行它(见ablebits.com/office-addins-blog/2013/12/06/…) 数据文件有数百列需要解析,现在它以文本文件的形式存在。具有 columWidth 的参考文件只是一列数字。这两个文件都不包含任何文本格式。 假设参考文件中没有标题或任何内容或字体更改,那么您所要做的就是编辑文件路径

以上是关于在数据文件中手动定义固定宽度的主要内容,如果未能解决你的问题,请参考以下文章

R:如何读取固定宽度的数据文件,其中数据连接成两组,堆叠在一个文件的顶部

如何在SSIS中的每一行中生成具有不同数据类型的固定宽度文件

在 spark java 中读取具有固定宽度和分隔符的文本文件

Android中仿淘宝商品详情ViewPager页面数据手动滑动

将火花数据帧写入固定宽度文件java spark

如何在 R 中使用 laf_open_fwf 读取固定宽度文件时管理恶意数据行