如何使用 php 从大文本文件中提取信息值
How can I Extract values with information from big text file using php
我正在尝试从文本文件中获取一些数据,这些数据在每一行随机重复
我正在尝试从文本文件中获取它,并且有很多 2/6 块。我需要使用 aloop 来获取它们。
我需要获取的示例数据。
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
SAMPLE DATE: FROM 2020-10-22 14:00:00:09
TO 2020-10-22 15:00:00:13
REGISTERED SUBSCRIBERS:
LOCATION AREA CODE CURRENT AVERAGE TMS1 TMS2 TMS3
UNKNOWN LAC 2 2 0 0 0
113 75868 75749 0 0 0
115 40627 40732 0 0 0
1102 70422 70489 0 0 0
1105 87075 87067 0 0 0
1117 56150 56180 0 0 0
1118 67175 67444 0 0 0
1120 74385 74381 0 0 0
1121 65034 65060 0 0 0
1122 21636 21407 0 0 0
1217 22944 22856 0 0 0
1218 49054 48993 0 0 0
1318 24283 24066 0 0 0
1418 16366 16350 0 0 0
2118 17812 17674 0 0 0
2120 79644 79489 0 0 0
TOTAL 768477 767939 0 0 0
PART 2/ 6
END OF REPORT
来自大文件(1/6 ,3/6 等..)。
我试过这样做
$lines = file($file,FILE_IGNORE_NEW_LINES);
foreach ($lines as $line){
if(strstr($line,'2/ 6')){
echo $line .'<br>';
}elseif (preg_match('/(\w+)\s+(\d\end\:\report\d)\s+-->/', $line, $match)){
print_r($match);
}
}
我每个块只得到一行
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS
PART 2/ 6
我希望你能让我好起来,我试图找到任何答案,但找不到我想要的。
一种选择是使用 preg_match_all and file_get_contents 和类似这样的模式:
^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b
或使用模式中的确切数字
^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b
^
字符串开头
.*\d/\h*\d.*
用一个数字匹配一行 /
可选空格和一个数字,然后是该行的其余部分
(?:\R.*)*?
尽可能少地重复
\R
匹配一个换行符
END OF REPORT\b
匹配 END OF REPORT
和单词边界以防止部分单词匹配
$file = "myfile.txt";
$str = file_get_contents($file);
$re = '`^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b`m';
preg_match_all($re, $str, $matches);
print_r($matches[0]);
输出将是一个包含所有匹配部分的数组。
或另一种变体:
^.*\d/\h*\d.*(?:\R(?!END OF REPORT).*)*\REND OF REPORT\b
我正在尝试从文本文件中获取一些数据,这些数据在每一行随机重复
我正在尝试从文本文件中获取它,并且有很多 2/6 块。我需要使用 aloop 来获取它们。
我需要获取的示例数据。
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS SAMPLE DATE: FROM 2020-10-22 14:00:00:09 TO 2020-10-22 15:00:00:13 REGISTERED SUBSCRIBERS: LOCATION AREA CODE CURRENT AVERAGE TMS1 TMS2 TMS3 UNKNOWN LAC 2 2 0 0 0 113 75868 75749 0 0 0 115 40627 40732 0 0 0 1102 70422 70489 0 0 0 1105 87075 87067 0 0 0 1117 56150 56180 0 0 0 1118 67175 67444 0 0 0 1120 74385 74381 0 0 0 1121 65034 65060 0 0 0 1122 21636 21407 0 0 0 1217 22944 22856 0 0 0 1218 49054 48993 0 0 0 1318 24283 24066 0 0 0 1418 16366 16350 0 0 0 2118 17812 17674 0 0 0 2120 79644 79489 0 0 0 TOTAL 768477 767939 0 0 0 PART 2/ 6 END OF REPORT
来自大文件(1/6 ,3/6 等..)。
我试过这样做
$lines = file($file,FILE_IGNORE_NEW_LINES);
foreach ($lines as $line){
if(strstr($line,'2/ 6')){
echo $line .'<br>';
}elseif (preg_match('/(\w+)\s+(\d\end\:\report\d)\s+-->/', $line, $match)){
print_r($match);
}
}
我每个块只得到一行
TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS PART 2/ 6 TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS PART 2/ 6 TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS PART 2/ 6 TRAFFIC MEASUREMENT REPORT PART 2/ 6 VLR MEASUREMENT VLRMEAS PART 2/ 6
我希望你能让我好起来,我试图找到任何答案,但找不到我想要的。
一种选择是使用 preg_match_all and file_get_contents 和类似这样的模式:
^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b
或使用模式中的确切数字
^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b
^
字符串开头.*\d/\h*\d.*
用一个数字匹配一行/
可选空格和一个数字,然后是该行的其余部分(?:\R.*)*?
尽可能少地重复\R
匹配一个换行符END OF REPORT\b
匹配END OF REPORT
和单词边界以防止部分单词匹配
$file = "myfile.txt";
$str = file_get_contents($file);
$re = '`^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b`m';
preg_match_all($re, $str, $matches);
print_r($matches[0]);
输出将是一个包含所有匹配部分的数组。
或另一种变体:
^.*\d/\h*\d.*(?:\R(?!END OF REPORT).*)*\REND OF REPORT\b