gpt4 book ai didi

perl - Perl中不规则文本文件的解析

转载 作者:行者123 更新时间:2023-12-01 08:17:48 25 4
gpt4 key购买 nike

我是 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

并且列表继续使用这种格式。

所以我需要做的是将它解析为三个。即最上面的那个,得到哈希检查。第二个是 mysql 查询,第三个是解析这三个数字。出于某种原因,我不知道如何做到这一点。我使用 perl 中的“打开”函数从文本文件中获取数据。然后我尝试对换行符使用 '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 );

    ...
    }

    通过更改 $RS ( $/ $INPUT_RECORD_SEPARATOR )双换行,我们改变了记录的读取方式。

    这并不奇怪,但在我使用 Perl 的那些年里,我不得不将记录分隔符制作成一些非常有趣的字符串,但有时只需要读取您想要读取的块即可。

    关于perl - Perl中不规则文本文件的解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6064928/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com