【发布时间】:2016-05-19 04:35:30
【问题描述】:
我正在尝试将一些数据写入 CSV 文件并读回这些数据。为了更好的可读性,我使用 Perl 格式来创建类似表格的外观,并且为了在 Excel 中打开时将数据显示在适当的列中,我使用逗号分隔列。我的表是具有各自属性的 ID 列表。下面是我用来显示每个 ID 的格式:
format TABLE =
@<<<<<, ^<<<<<<<<<<<<<<, ^<<<<, @<<<<, @<<<<<
$ID, $description, $att, $errors, $location
, ^<<<<<<<<<<<<<<, ^<<<<,
$description, $att
, ^<<<<<<<<<<<<<<, ^<<<<,
$description, $att
, ^<<<<<<<<<<<<<<
$description
, ^<<<<<<<<<<<<<<
$description
.
这种格式的问题是保留显示$description 和$att 的行数是固定的。如果我的字符串比那个长,它将被截断,如果短于 5 行,则总是会显示空行。由于$description 字符串的长度是不可预测的,有没有什么办法可以确保内容即使更长,也不会出现空行,即使它比格式中指定的行数短?
当前输出:
13_456, this is a examp, val1:, 3 , fold1
, le of a line th, x; va,
, at if follow th, l2: y,
, e current forma,
, t would be trun,
12_456, this is a short, val1:, 0 , fold2
, description , a; va,
, , l2: b,
, ,
, ,
期望的输出:
13_456, this is a examp, val1:, 3 , fold1
, le of a line th, x; va,
, at if follow th, l2: y,
, e current forma,
, t would be trun,
, cated ,
12_456, this is a short, val1:, 0 , fold2
, description , a; va,
, , l2: b,
为了从文件中读取,我可以逐行解析文件以匹配$ID 模式并检索该 ID 的所有信息($description、$att、$errors、$location) .但是由于我使用 Perl 格式打印数据,我只是想知道是否可以使用这种格式来读回数据,即 Perl 是否提供任何库/功能来帮助读取符合指定 Perl 格式的数据?我做了一些研究,但似乎没有找到,任何帮助都非常感谢。
【问题讨论】:
-
你能举一些输入和输出的例子吗?如果您有更复杂的格式要求,我通常建议您查看
sprintf。 -
我已经放入了当前和期望输出的示例。我真的不需要复杂的格式化,只是寻找一种可能更灵活的格式化输出的方式,这样我就可以完全显示数据而不会出现空行。
-
Perl 的
format系统很少使用,我建议你去Perl6::Form 模块,它是Perl 6 形式系统到Perl 5 的向后移植,并且做事“正确” ”。我不知道它是否符合您的要求,这就是为什么这是评论而不是解决方案,但我会尽快看看