我正在尝试从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正常,第二个不正常,第三个在数组中没有要打印的内容谢谢,尼克。
也许代码可能如下:
将文件读入变量
在
(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.
'
}
]
};