在数据文件中手动定义固定宽度
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 中读取具有固定宽度和分隔符的文本文件