无法使用Perl OPEN打开EMS文件类型 - 但在将内容复制到记事本时会打开

时间:2014-06-13 15:27:09

标签: perl

我无法使用Perl OPEN打开大型EMS格式文件。但是,当手动将相同内容复制到记事本时,记事本中的内容将打开。我不想做手动复制,请告诉我如何用EMS文件类型打开文件。

以下是我使用的代码,它适用于.txt文件,但不适用于.ems文件。

#!/usr/bin/perl
use strict;
use warnings;

# open a filehandle to data.txt
open( IN, "C:\\Users\\test\\Documents\\lOGS\\Testing\hourly.txt" ) || die('cannot open file: ' . $!);

my @Required = ( 28, 385, 38, 708, 722, 379, 380, 32, 76, 388, 389, 62, 739, 319, 83 );

for ( 1 .. 2 ) {
    <IN>;
}

while ( my $line = <IN> ) {
    my @fields = split( /:/, $line );

    for ( $count = 0 ; $count <= 15 ; $count++ ) {
        if ( $fields[0] == $Required[$count] ) {
            print $line;
        }
    }
}

# close the filehandle and exit
close(IN);
exit;

1 个答案:

答案 0 :(得分:0)

EMS格式不是简单的文本块。存在不同的文件格式,例如DOC,DOCX,EMS。您可以使用标准实用程序(如记事本和写字板)打开所有这些实用程序。但是,仅仅因为您看到文本显示,并不意味着这是这些文件中唯一的数据。什么使DOC文件成为DOC文件?有一个描述文件格式的标准规范,例如标题数据(如何告诉操作系统它是一个DOC文件?)以及存储数据的位置(在哪里存储页面数,使用的字体,实际的文字?)。

EMS文件也是这样的。我没有关于EMS格式的经验或简单规格表,但也许您可以使用http://perldoc.perl.org/functions/binmode.html打开文件并以字节为单位读取数据,然后搜索所需的文本信息。那是你的逆向工程。