我是perl编程的新手,想了解用perl解析文本文件.我有一个文本文件,其中有不规则的格式,我想将其解析为三个.
基本上该文件包含类似这些文本:
;out;asoljefsaiouerfas'pozsirt'z
mysql_query("SELECT * FROM Table WHERE (value='true') OR (value2='true') OR (value3='true') ");
1234 434 3454
4if[9put[e]9sd=09q]024s-q]3-=04i
select ta.somefield, tc.somefield
from TableA ta INNER JOIN TableC tc on tc.somefield=ta.somefield
INNER JOIN TableB tb on tb.somefield=ta.somefield
ORDER by tb.somefield
234 4536 234
Run Code Online (Sandbox Code Playgroud)
并且列表以这种格式继续.
所以我需要做的是解析三个.即顶部的那个,获得哈希检查.第二个是mysql查询,第三个是解析这三个数字.出于某种原因,我不知道如何做到这一点.我在perl中使用'open'函数来从文本文件中获取数据.然后我尝试使用'split'函数进行换行,但事实证明查询不在一行或一个模式中,所以我不能像我想象的那样使用它.
假设:
考虑到这一点:
use strict;
use warnings;
use English qw<$RS $OS_ERROR>;
local $RS = "\n\n";
open( my $fh, '<', $path_to_file )
or die "Could not open $path_to_file! - $OS_ERROR"
;
while ( <> ) {
chomp;
my ( $hash_check_line
, @inner_lines
)
= split /\n/
;
my @numbers = split /\D+/, pop @inner_lines;
my $sql = join( "\n", @inner_lines );
...
}
Run Code Online (Sandbox Code Playgroud)
通过将$RS($/或$INPUT_RECORD_SEPARATOR)更改为双换行符,我们可以更改读取记录的方式.
这并不是那么奇怪,但在我使用Perl的那些年里,我不得不在记录分隔符中创建一些非常有趣的字符串,但有时只需要读取您想要读取的块就可以了.