【问题标题】:Concatenation overwrites string and is mixed up串联覆盖字符串并混淆
【发布时间】:2016-07-18 08:44:24
【问题描述】:

我最近编写了一个转换器,它将我们的旧 Wiki 页面转换为 SharePoint 页面。

这一切都是通过命令行完成的,但现在我用 Win32 切换到 GUI。

我还是 Perl 的新手,只是将我的工作代码复制到我的 new.pl 并使用精美的 GUI 东西。

一切正常都期待这一行:

$newFileName = 'Pages/'.$file.'.aspx';

它应该输出一个指向我的目录 (Pages/TheFileName.aspx) 的路径,用于存储转换后的页面。

但是当我打印 $newFileName 时我得到了这个:

.aspx/TheFileName

.aspx 覆盖页面而不是在末尾连接。

我尝试了数百种其他组合,但第二个连接只是覆盖了我的文本。这是完全相同的行,在我的其他脚本中工作。

【问题讨论】:

  • 我冒昧地猜测您已经从 STDIN 阅读了$file。如果是这样,您可能希望确保您 chomp; 它。如果您不小心在文件名中包含换行符或回车符,这看起来正是您得到的那种东西。
  • 它来自一个文本字段输入,用户在其中输入旧的 Wiki 网址。每行都存储在一个数组中,$file 是其中的一个元素。 chomp 没有帮助 :( 相同的行为 编辑:几周前我遇到了同样的问题,但不记得我是如何解决的。那里是 <STDIN>
  • 我们需要查看更多代码来提供帮助。可能想尝试用$file =~ s/[\r\n]//g; 剥离“换行/回车”,看看是否有用。
  • 我坚信问题出在$file 上。在分配给$newFileName之前尝试打印$file。我想你会知道问题所在。
  • $file =~ s/[\r\n]//g; 成功了!正如你们提到的问题来自 $file 本身,非常感谢!

标签: perl concatenation


【解决方案1】:

$newFileName 的确切内容似乎是

"Pages/TheFileName\r.aspx"

打印出来的样子

.aspx/TheFileName

因为包含“\r”(回车)导致光标移动到行首,因此“.aspx”会覆盖屏幕上的“Pages”。

如此简单的修复(如 cmets 中已经提到的)是从 $file 中删除“\r”,例如与

$file =~ s/\r//g;

这样的问题在 Windows 中很常见,因为在 Windows 中,换行符是“\r\n”,而许多类似 unix 的程序除了“\n”,因此很容易在字符串中留下额外的“\r”。

【讨论】:

    猜你喜欢
    • 2011-03-14
    • 2013-11-28
    • 1970-01-01
    • 2010-11-02
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多