【问题标题】:Perl appending (s)printf output to stringPerl 将 (s)printf 输出附加到字符串
【发布时间】:2013-03-18 22:25:11
【问题描述】:

我正在解析一些数据并组织它,现在我需要在一个变量中捕获它。

在此之前我从未使用过 printf 或 sprintf。

我正在以这样的方式使用 printf 来组织数据:

printf("%-30s %18s %18s\n", "$a", "$b", "$c\n");

现在我有一个存储字符串的变量,我想将组织好的数据附加到变量 $result。

我尝试了类似的东西

$result.printf("%-30s %18s %18s\n", "$a", "$b", "$c\n");

它不起作用。我也试过 sprintf。

有什么想法吗?

谢谢,S

【问题讨论】:

  • 当我说“不起作用”是有史以来第三个最没有帮助的诊断信息时,我想我代表这里的每个人。告诉我们您预期会发生什么,并告诉我们实际发生了什么。
  • @mob 我很好奇:前两个最没有帮助的是什么?
  • 人们可以停止用引号包裹单独的变量吗?你会用 C 还是 Python 来做呢?你为什么在 Perl 中这样做?让我们称之为“无用的变量插值”。此外,您的格式字符串和 printf 的最后一个参数中都有 \n。你真的想要在你的输出中有两个换行符吗?
  • @runrig 你可以在 shell 中完成,这比 python 更像 perl。

标签: perl


【解决方案1】:

printf 将构造的字符串输出到指定的句柄(或当前默认值,如果省略)并返回一个布尔值,指示是否发生 IO 错误。没用。 sprintf 返回构造的字符串,所以你想要这个。

要连接两个字符串(将一个附加到另一个),一个使用. 运算符(或join

$result . sprintf(...)

但你说这行不通。大概是因为您还想将生成的字符串存储在$result中,您可以使用

$result = $result . sprintf(...);

或更短的

$result .= sprintf(...);

【讨论】:

    【解决方案2】:

    不知道您所说的“也尝试过 sprintf”是什么意思,因为如果您做得对,它没有理由不起作用。虽然你展示的语法看起来不像 perl,更像是 python 或 ruby​​?

    my $foo = sprintf("%-30s %18s %18s\n", "$a", "$b", "$c\n");
    $result .= $foo;
    

    【讨论】:

    • 感谢您的帮助。是的,很抱歉“它不起作用”缺乏特异性。我应该更具体。它起作用了,或者我能够将 sprintf 格式保存在一个变量中以附加到 .txt 文件,方法是将变量附加到变量,就像你展示的那样,而不是将 sprintf 语句附加到一个变量,就像我试图做的那样。
    • @user1610717 $foo 只是一个转换变量,你可以很容易地附加sprintf
    • 非常感谢...按照 TLP 的建议将变量附加在一起效果很好。
    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 2012-09-09
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多