【发布时间】:2011-06-22 02:45:32
【问题描述】:
我有很多具有固定宽度字段的文本文件:
<c> <c> <c>
Dave Thomas 123 Main
Dan Anderson 456 Center
Wilma Rainbow 789 Street
其余文件采用类似的格式,<c> 将标记列的开头,但它们具有各种(未知)列和空间宽度。解析这些文件的最佳方法是什么?
我尝试使用Text::CSV,但由于没有分隔符,因此很难获得一致的结果(除非我使用的模块错误):
my $csv = Text::CSV->new();
$csv->sep_char (' ');
while (<FILE>){
if ($csv->parse($_)) {
my @columns=$csv->fields();
print $columns[1] . "\n";
}
}
【问题讨论】:
-
你为什么反对“解析”标签?这是一个解析问题。您需要 Perl 中的解决方案并不意味着它不是解析问题。
-
因为我不想要一个通用的解决方案
-
也许我误解了...我认为将“解析”放在那里会带来一大堆与我的情况无关的解决方案(即 python、php 等)...谢谢
-
我猜 CPAN 上有一个(或两个或三个或...)模块用于此目的?至于动态宽度,只需在读取标题后动态构建适当的“模板” - 或者 宽度是否取决于绝对疯狂的东西,例如每列数据的最大宽度?
-
@pst - 查看我的答案。 CPAN 有一个模块,不仅可以解析,而且可以自动为您确定宽度(启发式):)