четверг, 3 февраля 2011 г.

Работа с данными используя Human Emulator

Давичи передо мной встала задача в коде одной из моих программ поменять огромное количество строк. Я решил не заниматься этим в ручную и быстренько накатал скрипт на Хумане, который всё сделал за несколько секунд. В итоге написание скрипта и его выполнение заняло не более 5 минут.

Скрипт делает следующее берёт строку из файла logins.txt, которая выглядит так - pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,theApp.tr.GetString("&Zip and E-Mail All File To ...")); и подставляет значение ID_FILE_ZIP_AND_EMAIL_ALL_FILE после MF_BYCOMMAND, таким образом в результате мы имеем строку в таком вот виде pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,ID_FILE_ZIP_AND_EMAIL_ALL_FILE,theApp.tr.GetString("&Zip and E-Mail All File To ..."));.

код скрипта:

$xhe_host ="127.0.0.1:7010";

// The following code is required to properly run XWeb Human Emulator
require("../Templates/xweb_human_emulator.php");

// получить строки из файла в массив
$strings = file("logins.txt");

// получить линию в нужном нам виде
function get_line($str)
{
// префиксы для разбора
$pref1= "ModifyMenu(";
$pref2= "MF_";
$pref3= "theApp.tr.GetString(";
// находим префиксы
$ind = strpos($str,$pref1);
$ind1 = strpos($str,$pref2,$ind);
// получаем строку
$res = substr($str, $ind+ strlen($pref1),$ind1-$ind-strlen($pref1));
// выводим в окно отладки для контроля процесса
echo $res."
";
// получаем индекс префикса
$ind2 = strpos($str,$pref3);
// формируем нужную нам строку
$res = substr($str,0,$ind2).$res .substr($str,$ind2,strlen($str)-$ind2);
// выводим результат в окно отладки
echo $res."
";

return $res;
}
// переменная куда будем получать результат
$data="";
// пройтись по всем строкам
for($i=0;$i{
global $data;
// получить i-ю строку
$line = $strings[$i];
// добавим в результат изменённую строку
$data=$data.get_line($line);
}
// запишем результат в файл
$textfile->write_file("data.txt",$data,0) ;

// Quit
$app->quit();
?>


Для выполнения скрипта нужно создать файл login.txt который будет содержать строки типа pMenu->ModifyMenu(ID_FILE_ZIP_AND_EMAIL_ALL_FILE,MF_BYCOMMAND,theApp.tr.GetString("&Zip and E-Mail All File To ...")); в папке, в которой лежит скрипт.

Комментариев нет: