我有很多包含这些行的文件:
我想将这些行转换成这样的东西:
所以第一个字段是3个字符,第二个字段是4个字符,第三个字段是6个,第四个字符是第1个字符。
我知道可以使用excel手动完成,但我需要自动转换解决方案,因为我有很多文件具有完全相同的结构。
答案 0 :(得分:2)
VBA has a simple command to format text, so you can do this fairly easily, and with just a single line of code
Function SpFmt(S As String) As String
SpFmt = Format(S, "@@@\;@@@@\;@@@@@@\;@\;@")
End Function
If you want to use a worksheet function, you can do this with a nested replace formula on the worksheet:
=REPLACE(REPLACE(REPLACE(REPLACE(A1,4,0,";"),9,0,";"),16,0,";"),18,0,";")
答案 1 :(得分:0)
在空格上拆分(Join Function)后使用VBA Split function或者只需用空格&替换(Replace functoin)所有空格。分号。
dim str as string
str = range("A1").value2 'HUIHOJ OPKKA LK
range("A1") = Join(Split(str, char(32)), chr(32) & chr(59)) 'HUIHOJ ;OPKKA ;LK
str = range("A1").value2 'HUIHOJ OPKKA LK
range("A1") = Replace(str, chr(32), chr(32) & chr(59)) 'HUIHOJ ;OPKKA ;LK
答案 2 :(得分:0)
如果你没有受到Excel的限制,你可以使用unix工具(也是available for Windows)只用一个命令就可以非常高效地完成这项工作:
cut --output-delimiter=";" -c 1-3,4-7,8-13,14,15 fixed.txt > delimited.csv
循环中的相同命令:
for f in *.txt ; do
cut --output-delimiter=";" -c 1-3,4-7,8-13,14,15 "${f}" > "${f}.csv"
done
编辑:输出分隔符选项似乎不适用于每个平台。
或者,您可以使用sed
:
sed "s/^\(.\{3\}\)\(.\{4\}\)\(.\{6\}\)\(.\)\(.\)/\1;\2;\3;\4;\5/" fixed.txt > delimited.csv