@millimo

Кто может помочь в написании парсера на php?

Добрый день, пытаюсь написать парсер, но что-то не выходит. Может быть Вы поможите?
Есть куча файлов (внутри них скрипты) все в одной директории.
Нужно что-бы получилась таблица справа в колонке названия файла, а слева часть кода скрипта внутри него. Например:
есть файл к примеру: script.cmd
вот его содержимое:
call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s pp2  -x "WO: ОАСУБД: БД SARD (NyanCat) Backup Logs" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"


нужно вытащить из этой строки :
WO: ОАСУБД: БД SARD (NyanCat) Backup Logs


это я сделал с помощью:
$filestring = file_get_contents($file);
preg_match('~-x(.*)-c~Uis', $filestring, $result);
echo $result[1];

Список файлов вывожу в левую колонку вот так:
$dir=$_POST['load'];
        if (is_dir($dir)) {
           foreach (glob($dir . '/*') as $file) {
           <tr>
        <td style="color:red; border-collapse:collapse;"
		  echo $file;
          	  ?>

Но проблема в том, что таким способом выводятся только первая строка, а есть файлы где больше одного скприта и некоторые закоменчены например вот такие:

cd "%SD_EVENTHOME%bin"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s p2 -x "WO: ОАСУБД: БД AXBD StandBy" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s prp2 -x "WO: ОАСУБД: БД OPAL (NyanCAT) Backup Logs" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Prd -s pr2 -x "WO: ОАСУБД: БД RAIL, Мониторинг работоспособности" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s pr2 -x "WO: ОАСУБД: БД APATITE, Alert.log" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/P@ssw0rd -s prvspp2 -x "WO: ОАСУБД: БД JASPER Мониторинг работоспособности" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/P@ssw0rd -s prvspp2 -x "WO: ОАСУБД: БД OLIVIN (NyanCAT) Backup Logs" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Prd -s p2 -x "WO: ОАСУБД: БД OLIVIN, Alert.log" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Prd -s pr2 -x "WO: ОАСУБД: БД SARD (NyanCAT) Backup Logs" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Prd -s pr2 -x "WO: ОАСУБД:БДSARD,Мониторинг пропагации " -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s pr2 -x "WO: ОАСУБД: БД MALWTM, Alert.log" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"
rem call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s pr2 -x "WO: ОАСУБД: БД SMSCHP, Alert.log" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"


В конечном итоге, нужно что-бы в таблицу из двух колонок: в левую шли имена файлов (сделал), а в правую имена скпритов внутри этих фалов(только имена скриптов, как на примере выше) закоменченые строки, попадать не должны. Кто поможет буду очень благодарен, голову уже сломал себе
  • Вопрос задан
  • 248 просмотров
Решения вопроса 1
@KFan
Веб-программист
используйте preg_match_all
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@vshvydky
Эту задачу делает grep + awk, почитайте инструкцию к ним.
Ответ написан
Комментировать
@Hakhagmon
function antara($string, $start, $end){
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
$data = 'call addentry.bat c:\SD\RG "%SD_EVENTHOME%bin\sd_event.exe" -a wo/Pd -s pp2  -x "WO: ОАСУБД: БД SARD (NyanCat) Backup Logs" -c WO -m insert -l "C:\SD\wo_creation.log" -v "EXTID=REG%DATE% %TIME% %RANDOM%"';
echo antara($data,'-x "','"');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы