更改文本文件中多行的位置

时间:2012-12-12 17:18:48

标签: excel vba csv excel-vba text-files

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

10012   CITY    10012   CITY    RIKSDAGEN   CITY lokal  10

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

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

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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

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