【发布时间】:2020-09-01 20:59:10
【问题描述】:
我正在尝试从 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 工作正常,第二个没有,第三个在数组中没有要打印的内容
谢谢,
尼克..
【问题讨论】:
-
您是否考虑过使用拆分 foreach 测验并再次使用 foreach 问题?
-
感谢 BalooRM 的回归 - 是的,我首先在 while 循环中尝试了一个 foreach,然后尝试将它们都设为 foreach 循环
-
您能否阅读整个文件,将文件拆分为单独的测验,遍历每个测验,并将每个测验拆分为多个问题?
-
好吧,你有没有尝试过——我们能看到代码吗?什么不工作?
-
一种方式:逐行阅读,在匹配
/(Quiz\s+[0-9]+)/时设置一个标志,为带有=s 的行取消设置。如果标志打开,则向字符串添加一行。在清除标志时将字符串添加到数组中。
标签: perl foreach while-loop cgi do-while