Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 自动将固定长度字符串转换为分隔字符串_Excel_Vba - Fatal编程技术网

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

我有许多文件包含这样的行:

  • 胡伊霍吉奥普卡酒店
  • ASOIJS AISJJ公司
  • 阿斯克西阿西德亚酒店
  • 我想将这些行转换成如下内容:

  • 回族;HOJ;奥普卡;LK
  • 麻生太郎;IJS;AISJJ;PL
  • AOS;KSI;阿西德;YA
  • 所以第一个字段是3个字符,第二个是4个字符,第三个是6个字符,第四个是1个字符,第五个是1个字符

    我知道可以用excel手动执行,但我需要自动转换解决方案,因为我有许多文件的结构完全相同。

    在空间上拆分()后使用VBA,或者简单地用空格和分号替换()所有空间

    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”。