perl - 如何在 Perl 中格式化输出?

标签 perl text formatting

我有一个 Perl 代码负责格式化输出。问题是我需要计算要在每个字符串中的一个特定字符之前放置的正确制表符数量(假设它是/)。因此,我不想获取不同长度的行,而是想要获取固定长度的字符串(但尽可能短,使用最长的字符串作为最大值)。我应该如何处理这个问题?

输出示例(格式已注释掉,只是原始数组):

Long title with some looong words / short text
Another title / another short text

我需要这样的:

title with some looong words / short text
Different title              / another short text

这是我的第一次尝试,但它不涉及在一个特定字符后使用制表符。

my $text = Text::Format->new;

$text->rightAlign(1);
$text->columns(65);
$text->tabstop(4);

$values[$i] = $text->format(@values[$i]);

最佳答案

在 Perl 中设置文本格式有两种普遍接受的方法,因此各列对齐:

  • 使用printfsprintf。这可能是最常见的方式。
  • 使用Perl Format能力。您定义线条的外观,然后使用 write打印为该格式。

我已经很多年没有看到人们使用 Perl 格式规范的东西了。这是 Perl 3.x 全盛时期的一个重要功能,因为 Perl 主要用作 super awk 替代语言(P实际 Extraction 和 R输出L语言)。不过,这个机制仍然存在,我相信学习起来会很有趣。


现在是您查询的第二部分。您确实不仅仅希望对文本进行格式化,还希望它使用制表符进行格式化

幸运的是,Perl 有一个内置模块,名为 Text::Tabs 。它是那些执行一两个模糊任务但做得很好的模块之一。

实际上,Text::Tabs 并不能很好地处理它所擅长的两项任务,但已经足够了。

使用 sprintf 或 Perl 格式化功能构建生成报告。将整个报告保存在数组中。它必须是一个数组,因为 Text::Tabs 不处理 NL。然后使用 unexpand 函数将该数组中的空格替换为另一个带有制表符的数组。

WORD 'O WARNING:Text::Tabs 做了一些非常顽皮的事情:它将变量 $tabstop 导入到您的程序中,而不询问您的允许。如果您使用名为 $tabstop 的变量,则必须更改它。您可以将 $tabstop 设置为制表符代表的空格数。默认设置为 8。

关于perl - 如何在 Perl 中格式化输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13271974/

相关文章:

perl - 当 local::lib 存在时,如何在站点范围内安装 CPAN 模块?

html - 自动调整最大宽度的div

c# - 打字时如何设置 VSCode 以在 C# 和 C++ 中的新行上放置花括号?

xml - 为什么使用 XML::Parser 在 UTF-8 字符中间会出现额外的换行符?

multithreading - Linux::Inotify2 和线程

解开文件句柄后,Perl 无法 Binmode STDOUT

linux - 在文本文件的第一行之后添加定义的变量

text - 如何增加 MPAndroid 条形图顶部文本值的大小?

datetime - 在 Lua 中将日期时间格式转换为另一种日期时间格式

vba - excel vba 插入带格式的行