2

我有一个大约 50k 行的大文件。仅当下一行中有某个单词时,我才需要将一行中的数据输入到数据库中。例如

00:00:01   Request from 1.1.1.1 for A-record for www.website1.com
00:00:01   Sending reply to 1.1.1.1 about A-record for www.website1.com:
00:00:01   -> Answer: A-record for www.website1.com = 999.999.999.999
00:00:02   Request from 1.1.1.1 for A-record for www.website2.com
00:00:02   Plug-in "Domain Blacklist1" matched A-record for www.website2.com
00:00:03   Request from 1.1.1.1 for A-record for www.website3.com
00:00:04   Sending reply to 1.1.1.1 about A-record for www.website3.com:
00:00:01   -> Answer: A-record for www.website3.com = 888.888.888.888

我只想从第 4 行输入数据,因为第 5 行中有“域黑名单”。

关于我如何解决这个问题的任何想法?

保罗

4

1 回答 1

2

使用File 函数循环遍历文件,一次一行。使用单独的变量来跟踪“上一个”行(在每次迭代结束时更新它)。在循环中,检查当前行是否有魔法短语。如果找到,将前一行变量附加到结果数组。完成后,根据需要使用行数组。

<cfscript>
   matched = [];
   previousLine  = "";
   theFile  = fileOpen("c:/path/to/your/file.txt");

   try {
       while(!fileIsEOF(theFile))  {
           currentLine = fileReadLine(theFile);

           // if phrase is found in *this* line, store *previous* line 
           if (reFindNoCase("(Domain Blacklist)", currentLine)) {
               arrayAppend(matched, previousLine );
           }

           // update previous line
           previousLine  = currentLine;
       }
   }
   finally {
       theFile.close();
   }

   // do something with the results
   writeDump(var=matched, label="Matched Lines");
</cfscript>
于 2019-03-12T16:49:29.370 回答