【问题标题】:Removing line feeds or carriage returns from excel with perl使用 perl 从 excel 中删除换行符或回车符
【发布时间】:2011-06-22 14:26:28
【问题描述】:

每当我尝试读取 .csv 文件中的一行时,它都会停止将该行视为单行并将其存储在多个数组中,就像应该只有一个那样。我看到的是当我阅读一个 .csv 文件时,当我在记事本中打开它时,它似乎包含一些回车/这些奇怪的方块。我想从文件中删除这些字符,以便我可以正确读取 .csv 而不会过早退出。我将如何使用 perl 脚本来执行此操作。

【问题讨论】:

  • 如果没有看到您遇到问题的 .csv 格式示例,以及究竟是哪些字符导致 Excel 出现问题,很难回答。有了这些信息,就很容易编写一个 perl 脚本来从 .csv 中删除有问题的字符。
  • 你是如何“阅读”文件的?您使用的是Text::CSV 还是Text::CSV_XS

标签: perl newline carriage-return linefeed


【解决方案1】:

您可以使用 perl 中的 chomp() 函数清除尾随空格。您可以使用类似这样的东西来切掉所有尾随空格并将其替换为单个换行符:

perl -ne 'while(chomp) { } print "$_\n";' filename.csv

【讨论】:

  • -p 选项自动打印,如果您想手动打印,请改用-n 以避免混淆。或者$_ .= "\n";
  • 正确!谢谢你。 (编辑反映。)
【解决方案2】:

如果您希望将整个文件读取为一行,只需禁用输入记录分隔符:

local $/;
my $file = <>;

也就是说,如果您希望使用 perl 中的数据。如果您只是想更改输入文件以供其他程序使用,并且您不关心换行符/回车符:

perl -pi.bak -we 's/[\r\n]+//g' input.csv

这将对input.csv 进行就地编辑,并在input.csv.bak 中保存备份。请注意,如果您运行此命令两次,备份将被覆盖,因此请在其他地方保存适当的备份。

如果您知道这些符号不应该存在,我只会建议您这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2021-07-05
    • 2010-10-26
    • 1970-01-01
    • 2011-06-21
    相关资源
    最近更新 更多