【问题标题】:Change position on multiple lines in a textfile更改文本文件中多行的位置
【发布时间】:2012-12-12 17:18:48
【问题描述】:

我得到了这个包含 18000 多行和 7 列的 CSV 文件。当我将它从 Excel 保存到 .txt 并在记事本中打开时,它显示如下:

10012   CITY    10012   CITY    RIKSDAGEN   CITY lokal  10

但我想更改它,所以可以说:第一个 CITY 从位置 6 开始(紧跟在 10012 中的 2 之后),第二个 10012 在固定位置(比如说 26)等。

我想我需要用常规空格切换“制表符”空格,但有 18000 多行......是的。 我不知道这是否可以在 vba 中完成,或者我是否可以在程序中完成?

编辑:我想要的职位是 6,26,31,51,81

10012CITY   10012CITY   RIKSDAGEN   CITY lokal  10
1    6      26   31     51          81

【问题讨论】:

    标签: vba csv excel text-files


    【解决方案1】:

    一种可能性是在 Excel 本身中准备数据:

    A2:H2: 字符串位置 (1;6;26..)
    A3:H3: 你的数据

    I3:=A3&REPT(" ";B$2-A$2-LEN(A3))
    公式可以向右和向下复制。

    结果将是添加了空格的单元格,这些单元格可以连接成一个单元格 (=I3&J3...&P3),在需要的位置有空格。连接单元格的内容可以直接复制粘贴到记事本中。

    电子表格示例:http://www.bumpclub.ee/~jyri_r/Excel/Getting_fixed_length_csv_file.xls

    【讨论】:

      【解决方案2】:

      不清楚的一件事是,您的字段是否都已知不超过特定长度。例如,第一个字段 (10012) 的长度是否总是 5 个字符或更少?假设是这样,最简单的方法是首先将文件保存为 CSV 文件。然后,您可以根据需要使用 awk 对其进行格式化。让我们调用保存的文件 foo.csv。然后,您将执行:

      gawk '{printf "%Ms%Ps%Qs%Rs%Ts%Us%Vs%Ws\n", $1, $2, $3, $4, $5, $6, $7, $8}' foo.csv

      在上述命令中,您需要用适当的数字代替 M、P、Q、R、T、U、V、W。由于(如果?)第一个字段已知不超过 5 个字符,您将 M 设置为 5。由于“CITY”有四个字符,并且您希望第二个“10012”从位置 20 开始,您需要“CITY”占据 15 个空格,并且在这个 15 个空格的字段中也是左对齐的。因此,您可以将 P 设置为 -15。 “-15”中的“-”确保“CITY”从该字段的左侧开始。继续,直到您完成所有字段。

      如果您将字段编号写在一张画了列的纸上,可能会更容易获得正确的字段编号。

      编辑: awk '{printf "%-5s%-20s%-5s%-20s%-30s%s %s %s\n", $1, $2, $3, $4, $5, $6, $7, $8}' foo.csv

      您尚未指定最后几个字段的位置,但以上内容应该为您提供了足够的信息来解决此问题。

      【讨论】:

      • 哦,对不起。是的,第一个字段始终是 5 个字符。我已经在原帖中编辑了我需要的特定位置
      • eer,我从未使用过 Gawk,但我只是安装了它。我该从哪里写下你的代码并执行?
      • @rob,如果你安装了 gawk,你只需要执行: gawk '{printf "%-5s%-20s%-5s%-20s%-30s%s %s %s\ n", $1, $2, $3, $4, $5, $6, $7, $8}' 来自命令行的 foo.csv。你用的是什么系统?
      • 我在 Windows 7 上安装了 gawk,但我也安装了 ubuntu。
      猜你喜欢
      • 1970-01-01
      • 2019-04-18
      • 2014-07-25
      • 2022-06-30
      • 1970-01-01
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多