1

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.

1 Answers1

0

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 newline
  • END OF REPORT\b Match END OF REPORT and a word boundary to prevent a partial word match

Regex demo | Php demo

$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

Regex demo

The fourth bird
  • 154,723
  • 16
  • 55
  • 70