0

我一直在寻找一种方法来使用一些 if 参数重新格式化 CSV(管道分隔符)文件,我很确定这可以在 PHP(strpos 和 if 语句)或使用 XSLT 中完成,但想知道这是否是最好的/在我去学习一门新语言之前最简单的方法。这是我试图实现的那种事情的一个小例子(真实文件大约有 25000 行,这会改变答案吗?)

99407350|数学书#13(随机信息)|AB Collings|http:www.abc.com/ABC 497790366|英文书|Harold Herbert|http:www.abc.com/HH

转换成这样:

99407350|数学书|#13|AB Collings|http:www.abc.com/ABC 497790366|英文书||Harold Herbert|http:www.abc.com/HH

关于我需要朝哪个方向看的任何建议都会很棒。

4

1 回答 1

0

PHP 为此提供了 getcsv() (PHP 5) 和 fgetcsv() (PHP 4 和 5),因此如果您在 PHP 环境中工作,请使用它。参见例如http://www.php.net/manual/en/function.fgetcsv.php

如果您自己做某事,请记住处理“...|...”和/或 \| 有| 在一个领域内。或者进行测试以确保它不会发生 - 例如,如果发生这种情况,请检查将数据库导出到 CSV 的代码。

另请注意 - 在 Unix / Solaris / Linux / OS X 系统上,awk -F '|' '(NF != 9)' yourfile.csv | wc 将计算非 9 个字段的行数;如果你确定| 除非作为字段分隔符,否则永远不会出现,awk 也是一种非常好的语言,例如使用 awk -F '|' '{ gsub(/ [(].*[)]/, "", $1); 打印}' yourfile.csv

在这里,[(] 匹配 ( 以一种适用于不同版本的 awk 的方式,对于 [)] 也是如此。

于 2012-08-30T04:11:05.610 回答