perl代码将外部文件读取到特定点,然后从该点开始读取

问题描述 投票:0回答:1

我正在尝试从Perl脚本打开文件并搜索“ Quiz 2”(文本文件大约65行)。然后,从那一点开始直到找到“ ============(在每个“测验”的末尾),仅将这两个点之间的线推入数组然后在数组中的每个问题的末尾搜索“ ----”,然后一次将每个问题打印到屏幕上。

这是计划,这使我在晚上保持睡眠(课程的标准):-)

任何帮助都会很棒。...

open(QUIZ, "<Questions.txt");

foreach $line (<QUIZ>) {
  if ($line =~ "Quiz $QuizNumber") {
    ($dump,$Creator,$NumberOfQuestions) = split(/ !!! /,$line);
  }
} # foreach

foreach $line (<QUIZ>) {    
  if ($line =~ "=============") {
    last;
  } else {
    push(@Questions, $line);
  }
} # foreach 2

close(QUIZ);

foreach $Line (@Questions) {
  unless ($Line !~ "~~~") {
    print "<br>Line $Line";
  }
}

第一个foreach正常,第二个不正常,第三个在数组中没有要打印的内容谢谢,尼克。

perl foreach while-loop cgi do-while
1个回答
0
投票

也许代码可能如下:

将文件读入变量

(Quiz \d+.*?)============上分割为数组@quizes

@quizes圈入(Question #\d+)(.*?)----提取问题并将其散列

将结果推送到用$quizes变量引用的哈希中

此时,您可以通过索引访问任何测验的Quiz和任何Question

注意:OP没有提供测试数据,即兴使用了代码,Lorem Ipsum生成器用于填写问题的内容

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my $quizes;

my $data = do { local $/; <DATA> };
my @quizes = $data =~ /(Quiz \d+.*?)============/sg;

#say Dumper(\@quizes); exit;

for (@quizes) {
    /(Quiz \d+)/gs;
    my $id = $1;
    my %questions;
    %questions = $_ =~ /(Question #\d+)(.*?)----/sg;
    push @{$quizes->{$id}}, \%questions;
}

say Dumper($quizes);

__DATA__
Please answer every question of following quizes:

Quiz 1
Question #1
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Eu scelerisque felis 
imperdiet proin fermentum leo vel orci. Eget mi proin sed libero enim. 
Pulvinar mattis nunc sed blandit libero volutpat sed cras ornare. Sit 
amet cursus sit amet dictum sit. Nisi vitae suscipit tellus mauris a diam 
maecenas sed. Elementum facilisis leo vel fringilla est ullamcorper eget nulla. 
Duis convallis convallis tellus id interdum velit laoreet id. Sodales ut eu sem 
integer vitae justo eget magna. Nisi vitae suscipit tellus mauris a diam maecenas 
sed enim. Non pulvinar neque laoreet suspendisse interdum consectetur libero.
----
Question #2
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus in ornare 
quam viverra orci sagittis eu volutpat odio. Eget nunc lobortis mattis 
aliquam faucibus. Sit amet dictum sit amet justo donec enim diam. Vel 
quam elementum pulvinar etiam non quam lacus suspendisse faucibus. 
Neque vitae tempus quam pellentesque nec nam aliquam. Magna eget est 
lorem ipsum dolor. Pellentesque habitant morbi tristique senectus et netus. 
Erat imperdiet sed euismod nisi porta lorem mollis aliquam. Ut morbi tincidunt 
augue interdum velit euismod. Feugiat in fermentum posuere urna nec. Donec 
et odio pellentesque diam volutpat commodo sed egestas.
----
============

Quiz 2
Question #1
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus 
in ornare quam viverra orci sagittis eu volutpat odio. 
Eget nunc lobortis mattis aliquam faucibus. Sit amet dictum sit 
amet justo donec enim diam. Vel quam elementum pulvinar etiam 
non quam lacus suspendisse faucibus. Neque vitae tempus quam 
pellentesque nec nam aliquam. Magna eget est lorem ipsum dolor. 
Pellentesque habitant morbi tristique senectus et netus. Erat 
imperdiet sed euismod nisi porta lorem mollis aliquam. Ut morbi 
tincidunt augue interdum velit euismod. Feugiat in fermentum 
posuere urna nec. Donec et odio pellentesque diam volutpat commodo 
sed egestas.
----
Question #2
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus in ornare 
quam viverra orci sagittis eu volutpat odio. Eget nunc lobortis mattis 
aliquam faucibus. Sit amet dictum sit amet justo donec enim diam. Vel quam 
elementum pulvinar etiam non quam lacus suspendisse faucibus. Neque vitae 
tempus quam pellentesque nec nam aliquam. Magna eget est lorem ipsum dolor. 
Pellentesque habitant morbi tristique senectus et netus. Erat imperdiet sed 
euismod nisi porta lorem mollis aliquam. Ut morbi tincidunt augue interdum 
velit euismod. Feugiat in fermentum posuere urna nec. Donec et odio 
pellentesque diam volutpat commodo sed egestas.
----
============

输出

$VAR1 = {
          'Quiz 1' => [
                        {
                          'Question #2' => '
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus in ornare 
quam viverra orci sagittis eu volutpat odio. Eget nunc lobortis mattis 
aliquam faucibus. Sit amet dictum sit amet justo donec enim diam. Vel 
quam elementum pulvinar etiam non quam lacus suspendisse faucibus. 
Neque vitae tempus quam pellentesque nec nam aliquam. Magna eget est 
lorem ipsum dolor. Pellentesque habitant morbi tristique senectus et netus. 
Erat imperdiet sed euismod nisi porta lorem mollis aliquam. Ut morbi tincidunt 
augue interdum velit euismod. Feugiat in fermentum posuere urna nec. Donec 
et odio pellentesque diam volutpat commodo sed egestas.
',
                          'Question #1' => '
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod 
tempor incididunt ut labore et dolore magna aliqua. Eu scelerisque felis 
imperdiet proin fermentum leo vel orci. Eget mi proin sed libero enim. 
Pulvinar mattis nunc sed blandit libero volutpat sed cras ornare. Sit 
amet cursus sit amet dictum sit. Nisi vitae suscipit tellus mauris a diam 
maecenas sed. Elementum facilisis leo vel fringilla est ullamcorper eget nulla. 
Duis convallis convallis tellus id interdum velit laoreet id. Sodales ut eu sem 
integer vitae justo eget magna. Nisi vitae suscipit tellus mauris a diam maecenas 
sed enim. Non pulvinar neque laoreet suspendisse interdum consectetur libero.
'
                        }
                      ],
          'Quiz 2' => [
                        {
                          'Question #1' => '
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus 
in ornare quam viverra orci sagittis eu volutpat odio. 
Eget nunc lobortis mattis aliquam faucibus. Sit amet dictum sit 
amet justo donec enim diam. Vel quam elementum pulvinar etiam 
non quam lacus suspendisse faucibus. Neque vitae tempus quam 
pellentesque nec nam aliquam. Magna eget est lorem ipsum dolor. 
Pellentesque habitant morbi tristique senectus et netus. Erat 
imperdiet sed euismod nisi porta lorem mollis aliquam. Ut morbi 
tincidunt augue interdum velit euismod. Feugiat in fermentum 
posuere urna nec. Donec et odio pellentesque diam volutpat commodo 
sed egestas.
',
                          'Question #2' => '
Accumsan lacus vel facilisis volutpat est velit egestas. Libero 
nunc consequat interdum varius sit amet mattis. Feugiat in fermentum 
posuere urna nec tincidunt praesent semper feugiat. Faucibus in ornare 
quam viverra orci sagittis eu volutpat odio. Eget nunc lobortis mattis 
aliquam faucibus. Sit amet dictum sit amet justo donec enim diam. Vel quam 
elementum pulvinar etiam non quam lacus suspendisse faucibus. Neque vitae 
tempus quam pellentesque nec nam aliquam. Magna eget est lorem ipsum dolor. 
Pellentesque habitant morbi tristique senectus et netus. Erat imperdiet sed 
euismod nisi porta lorem mollis aliquam. Ut morbi tincidunt augue interdum 
velit euismod. Feugiat in fermentum posuere urna nec. Donec et odio 
pellentesque diam volutpat commodo sed egestas.
'
                        }
                      ]
        };

© www.soinside.com 2019 - 2024. All rights reserved.