0

我得到了这个包含 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
4

2 回答 2

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

于 2012-12-13T06:04:40.470 回答
0

不清楚的一件事是,您的字段是否都已知不超过特定长度。例如,第一个字段 (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

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

于 2012-12-12T17:44:04.270 回答