I'm trying to get some data from text file, those data are repeated every random line
I'm trying to get this from text file, and there are alot of 2/6 blocks. i need to get them all, using aloop.
Example data I need to get it.
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
from big file (1/6 ,3/6 ect..).
I tried doing like this
$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);
}
}
I get only one line from each block
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
I hope you get me well, I tried to find any answers but I couldn't find what I want.
One option is to use preg_match_all and file_get_contents and a pattern like:
^.*\d/\h*\d.*(?:\R.*)*?\REND OF REPORT\b
Or use the exact digits in the pattern
^.*2/\h*6.*(?:\R.*)*?\REND OF REPORT\b
^
Start of string.*\d/\h*\d.*
Match a line with a digit /
optional spaces and a digit, then the rest of the line(?:\R.*)*?
Repeat as least lines as possible\R
Match a newlineEND OF REPORT\b
Match END OF REPORT
and a word boundary to prevent a partial word match$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]);
Output will be an array with all the matched parts.
Or another variation:
^.*\d/\h*\d.*(?:\R(?!END OF REPORT).*)*\REND OF REPORT\b