我有一个非常简单的字典应用程序,可以搜索和显示。它是使用Win32::GUI
模块构建的。我将字典所需的所有纯文本数据放在__DATA__
部分下。脚本本身很小但是__DATA__
部分下的所有内容都是30 MB。为了与我的朋友分享工作,然后我使用具有最高压缩级别9的PAR::Packer
模块的PP实用程序将脚本打包到一个独立的可执行文件中,现在我有一个单文件字典应用程序的大小约为17MB。
但是虽然我对单文件脚本的想法非常满意,但是在脚本的DATA部分下放置如此大量的文本数据并不合适。首先,当我尝试在Padre中打开脚本时(Notepad ++没问题),我收到的错误如下:
Can't open my script as the script is over the arbitrary file size limit which is currently 500000.
我的问题:
如果我将DATA部分下的所有内容移到单独的文本文件中,除了消除Padre的文件打开问题外,它是否带给我额外的好处?
如果我这样做,我该怎么做才能减小单独文件的大小?拉链并在搜索和显示时将其解压缩?
人们通常如何格式化字典应用程序所需的文本数据?
有任何意见,想法或建议吗?总是如此谢谢:)
答案 0 :(得分:2)
由于您已经使用PAR::Packer
,为什么不将它移动到单独的文件或模块并将其包含在PAR文件中?
简单的方法(pp
没有额外的命令行选项,它会看到use
语句并做正确的事情):
words.pl
#!/usr/bin/perl
use strict;
use warnings;
use Words;
for my $i (1 .. 2) {
print "Run $i\n";
while (defined(my $word = Words->next_word)) {
print "\t$word\n";
}
}
Words.pm
package Words;
use strict;
use warnings;
my $start = tell DATA
or die "could not find current position: $!";
sub next_word {
if (eof DATA) {
seek DATA, $start, 0
or die "could not seek: $!";
return undef;
}
chomp(my $word = scalar <DATA>);
return $word;
}
1;
__DATA__
a
b
c
答案 1 :(得分:2)
如果我这样做,我该怎么做才能减小单独文件的大小?拉链并在搜索和显示时将其解压缩?
嗯,这取决于你想减小尺寸的原因。如果要最小化磁盘空间使用(这些天大部分时间都是奇怪的目标),那么zip / unzip就是最佳选择。
但是,如果目标是最小化内存使用,那么更好的方法是将字典数据拆分为更小的块(例如,由第一个字母索引),并且仅加载所需的块。
人们通常如何格式化字典应用程序所需的文本数据?
恕我直言,通常的方法就是上面提到的方法(分区和索引数据)的逻辑结束:使用后端数据库,它允许您只检索哪些数据实际上是需要的。
在你的情况下,像SQLite或Berkley DB / DBM文件这样简单的东西应该没问题。
如果我将DATA部分下的所有内容移到单独的文本文件中,除了消除Padre的文件打开问题外,它是否带给我额外的好处?
这在某种程度上取决于您的使用情况......如果这是一个由3人使用的永不改变的脚本,可能没有任何实际好处。
通常,它会使维护变得更加容易(您可以单独更改字典和代码逻辑 - 将病毒定义文件与防病毒可执行文件视为真实世界的示例)。
如果你采用我上面提到的方法,它也会减少进程内存消耗。