使用shell命令执行字符操作


Perform character operations with shell commands

我需要将从Mac Excel 2011导出的CSV文件转换为CMS可以识别的可导入格式(解决方案不应该相关,但是导入格式是针对Drupal Feeds模块的,尽管目标)。

为了做到这一点,目前我需要在Vim中执行以下操作:

:%s/'r/'r/g
:w ++enc=utf8

意思是:

  1. 将回车转换为某种通用格式
    • 最初当Excel导出它们时,回车字符由^M
    • 表示。
    • Vim命令:%s/'r/'r/g将它们全部转换为CMS识别的回车格式
  2. 将字符编码转换为UTF8。
    • 最初导出时,字符集是ASCII Extended或类似的。

理想情况下,这个过程需要在上传文件作为导入的一部分时触发,这意味着PHP将触发该过程,无论这是否对该过程有任何影响。不过,现在我觉得用shell脚本或类似的东西来处理这个解决方案更舒服,当然,如果我能弄清楚如何将它挂钩到Drupal 7 Feeds中,PHP解决方案是受欢迎的。

未测试代码:

#!/bin/php
<?php
$replacements = array(
    // Adjust destination char to your liking
    "'r'n" => "'n",
    "'r" => "'n",
    "'n" => "'n",
);
// No risk to split chars: input is single byte
while( $line = fread(STDIN, 10240) ){
    // Normalize line feeds
    $line = strtr($line, $replacements);
    // Convert to UTF-8 (adjust source encoding to your needs)
    $line = iconv('CP1252', 'UTF-8', $line);
    fwrite(STDOUT, $line);
}

用法:

./fix-csv < input.csv > output.csv