代码之家  ›  专栏  ›  技术社区  ›  John Rose

导入列对齐文本时是否有合适的软件?

  •  0
  • John Rose  · 技术社区  · 17 年前

    这是多年来让我非常恼火的事情。我从未使用过任何软件,当从列对齐的文本文件导入数据时,可以正确地找出列分隔符。

    Excel2K3和许多其他的微软组件似乎共享一个共同的代码库(比如SQL2K的导入选项),它们试图为您计算出列分隔符。不幸的是,他们只看第一个 n 行,而且常常是完全错误的。

    OpenOffice.org 3.1有一个和Excel2K3几乎完全一样的导入对话框,但它甚至没有试图猜测列的分隔符。最新版本的数字似乎根本无法处理列对齐的导入。

    显然,列对齐数据是不受欢迎的,原因有很多,但许多旧软件(特别是内部软件,各公司都有浮动)都以这种格式导出数据,因此我确实需要经常处理它。当然,在某些地方,有些软件可以很好地导入它,而不需要我自己编写一个导入实用程序,或者手动指定十二个数不胜数的列从何处开始和停止?

    OSX,Windows,随便什么。我乐于接受建议。最终目标是将其放入SQL Server表中,但同时简单地将其放入excel/xml/tab分隔的/etc文件中就可以了,因为从那里很容易进入SQL Server。

    5 回复  |  直到 10 年前
        1
  •  1
  •   Randy Levy    17 年前

    我认为你的要求没有什么可取之处。我认为最好的方法是定义一次输入格式,当您再次收到具有相同格式的文件时,可以重用该格式。

    正如一张海报上提到的,你可以使用awk,或者,如果.net更适合你,那么你可以使用 FileHelpers . 它是一个开放源码.NET库,可以很好地读写固定长度和分隔的文件。缺点是,您将创建一个.NET应用程序来完成这项工作(或者直接插入到数据库中,或者创建一个输出文件)。另一方面,一旦创建了映射类,如果获得相同的文件格式,则可以再次重用这些映射类。

        2
  •  2
  •   user47559    17 年前

    在尝试将这些数据导入Excel之前,我倾向于使用awk规范化这些数据——可能生成一个csv文件。

    见 awk user's manual .

        3
  •  1
  •   David    17 年前

    显然,在猜测固定列文件的布局时,没有软件是完全正确的,因为没有分隔符(尽管最大长度更大的可变宽度列通常会在末尾产生足够的空间来开始猜测)。例如,以下可以是1-9列中的任何一列(我个人不得不想出一些这样的超级压缩固定列布局,只需要更长的时间)

    135464876
    647873159
    345467575
    

    如果SQL Server是最终目的地,您是否查看了SQL Server导入向导?

    右键单击Management Studio中的数据库,然后选择“任务”->导入数据。继续并选择“平面文件”作为数据源。在“格式”下拉列表中,从“分隔宽度”更改为“固定宽度”。在左侧,您现在可以使用列屏幕绘制列分隔符。还有一个高级和预览屏幕。

        4
  •  0
  •   Marc Bernier    17 年前

    试用这个演示(我是开发团队的成员):

    Personator 4

    安装,运行程序,转到工具ASCII转换从ASCII导入。

    导入将是dbf/foxpro,但您可以将该文件导出到您提到的格式之一。

    开始/停止猜测器使用一些统计公式来尝试获得正确的边界;您可以在分析后使用图形编辑器来验证和/或更正。

        5
  •  0
  •   A B    14 年前

    如果将文件保存为文本文件并尝试打开 在Microsoft Excel 2007中选择“固定宽度”, Excel将“猜测”中断发生的位置(基于 但实际上可以更改列的位置 将发生字段中断。应用程序有垂直线, 可以向左或向右移动x个字符。擅长 会“猜测”断裂发生在哪里,但如果它 猜测错误,您仍然可以更改字段的中断位置。 应该发生。在向导的第2步,只需移动 如有需要,可向左或向右竖线 更改Excel对字段断开位置的猜测 是。您可以看到字段的字符编号 导入前发生中断。