Excel 自动将固定长度字符串转换为分隔字符串
我有许多文件包含这样的行:Excel 自动将固定长度字符串转换为分隔字符串,excel,vba,Excel,Vba,我有许多文件包含这样的行: 胡伊霍吉奥普卡酒店 ASOIJS AISJJ公司 阿斯克西阿西德亚酒店 我想将这些行转换成如下内容: 回族;HOJ;奥普卡;LK 麻生太郎;IJS;AISJJ;PL AOS;KSI;阿西德;YA 所以第一个字段是3个字符,第二个是4个字符,第三个是6个字符,第四个是1个字符,第五个是1个字符 我知道可以用excel手动执行,但我需要自动转换解决方案,因为我有许多文件的结构完全相同。在空间上拆分()后使用VBA,或者简单地用空格和分号替换()所有空间 dim str a
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
如果未绑定到Excel,则可以使用unix工具(也可以)通过一个命令非常高效地执行此操作:
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
VBA有一个简单的命令来格式化文本,所以您只需一行代码就可以相当轻松地完成这项工作
Function SpFmt(S As String) As String
SpFmt = Format(S, "@@@\;@@@@\;@@@@@@\;@\;@")
End Function
如果要使用工作表函数,可以使用工作表上的嵌套替换公式:
=REPLACE(REPLACE(REPLACE(REPLACE(A1,4,0,";"),9,0,";"),16,0,";"),18,0,";")
谢谢我在osx上,这将是完美的。我在一个名为fixed.txt的文件上尝试了您的命令,但我得到了一个错误:“剪切:非法选项---用法:剪切-b列表[-n][file…]剪切-c列表[file…]剪切-f列表[-s][d delim][file…]”好的,osx版本的剪切可能与Linux上的选项略有不同。它似乎不支持--output delimiter选项。您应该参考。此处的问题相同:。您可能必须替换默认的输出分隔符。有趣的是-我没有意识到您可以使用replace来插入这样的字符串,方法是对被替换的长度使用“0”。