我正在尝试将一些数据写入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
,{{ 1}},$errors
)。但是由于我使用Perl格式打印数据,我只是想知道我是否可以使用这种格式来读回数据,即Perl是否提供了有助于读取符合指定Perl格式的数据的任何库/功能?我做了一些研究,但似乎没有找到一个,非常感谢任何帮助。
答案 0 :(得分:1)
我上次查看format
后大约五年了,但我认为您需要的是自动重复标记~~
,表示应重新使用格式行直到变量被清空
您已经很难写出有效的内容,因为您没有给我们任何数据,并且您显示的格式声明无法生成该输出,因为字段宽度不同。您还必须与$:
($FORMAT_LINE_BREAK_CHARACTERS
)混淆,以使您的输出分组,但您没有提及
这里有一些代码可以生成您要求的内容,但限制输出行数除外。您无法进行多行自动填充以及限制行数,如果超出substr
,您似乎需要使用$description
来限制use strict;
use warnings 'all';
my ( $ID, $description, $att, $errors, $location );
format STDOUT =
@<<<<<, ^<<<<<<<<<<<<<<, ^<<<<, @<<<<, @<<<<<
$ID, $description, $att, $errors, $location
, ^<<<<<<<<<<<<<<, ^<<<<, ~~
$description, $att
.
local $:;
( $ID, $description, $att, $errors, $location ) = (
'13_456',
'this is a example of a line that if follow the current format would be truncated at the end of the fifth line',
'val1:x; va12: y',
3,
'fold1',
);
write STDOUT;
( $ID, $description, $att, $errors, $location ) = (
'12_456',
'this is a shortdescription',
'val1:a; val2: b',
3, 'fold2',
);
write STDOUT;
的长度75个字符(5行,15个字符)
13_456, this is a examp, val1:, 3 , fold1
, le of a line th, x; va,
, at if follow th, 12: y,
, e current forma, ,
, t would be trun, ,
, cated at the en, ,
, d of the fifth , ,
, line , ,
12_456, this is a short, val1:, 3 , fold2
, description , a; va,
, , l2: b,
var $animation_elements = $('.animation-element');
var $window = $(window);
function check_if_in_view() {
var window_height = $window.height();
var window_top_position = $window.scrollTop();
var window_bottom_position = (window_top_position + window_height);
$.each($animation_elements, function() {
var $element = $(this);
var element_height = $element.outerHeight();
var element_top_position = $element.offset().top;
var element_bottom_position = (element_top_position + element_height);
//check to see if this current container is within viewport
if ((element_bottom_position >= window_top_position) &&
(element_top_position <= window_bottom_position)) {
$element.addClass('in-view');
} else {
$element.removeClass('in-view');
}
});
}
$window.on('scroll resize', check_if_in_view);
$window.trigger('scroll');
答案 1 :(得分:-2)
不要试图重新发明轮子,使用专门用于手头任务的模块:Text::CSV。