[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php скрипт для HEX csv
master77
Всем привет!

Небольшая предыстория:
Слетела база данных календаря windows live mail 2012. Календарь вёлся офлайн, и его нет на сервере microsoft.
По пути “C:\Users\USENAME\AppData\Local\Microsoft\Windows Live Mail” нашлась папка DBStore с пустым файлом “WLCalendarStore.edb” (два мегабайта)
Там же нашлась папка, где лежит повреждённый файл WLCalendarStore.edb с большим весом, попытка его подменить приводит к сообщению: "Calendar contains corrupt data that is forcing Window Live Mail to close. (0x8E5E0226)"
А кроме того, нашёлся старый файл WLCalendarStore.edb от 2013 года, и если подставить его, то календарь открывает старые данные, естественно, за 2013 год. То есть текущий файл WLCalendarStore.edb от 2016 года повреждён, иначе б сработало.

Поиски привели меня сюда:
http://blog.jamesrossiter.co.uk/2013/02/28...database-files/

где человек пытался вынуть данные, и у него вроде как получилось сделать html файл с понятными людям словами. Я скачал NirSoft ESEDatabaseView, сохранил .csv файл, но проблема в том, что он HEX. Автор статьи предлагает php скрипт, который конвертирует hex csv в нормальный понимаемый формат.
<?php

// helper function to convert hex value to string
function hex2str($hex) {
for($i=0;$i<strlen($hex);$i+=2) $str .= chr(hexdec(substr($hex,$i,2)));
return $str;
}

// show appointments as easy to read HTML
echo "<h1>Appointments</h1>";

if (($handle = fopen("calendaritem.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000000, ",")) !== FALSE) {

// get the ServerIcal column
$ical = $data[17];

// strip out all '00' and ' ' strings from the output
$ical = str_replace(" 00 ","",$ical);
$ical = str_replace(" ","",$ical);

// convert to string
$line = hex2str($ical);

// tidy up HTML to make it easily human readable
$line = substr($line,strpos($line,"DTSTART"));
$line = substr($line,0,strpos($line,"UID"));
$line = str_replace("SUMMARY:","SUMMARY: <strong>",$line);
$line = str_replace(PHP_EOL,"</strong>" .PHP_EOL,$line);
$line = str_replace("DTSTART;VALUE=DATE:","DTSTART;VALUE=DATE: <strong>",$line);
$line = str_replace(" DTEND;","</strong> DTEND;",$line);
$line = str_replace("DTEND;VALUE=DATE:","DTEND;VALUE=DATE: <strong>",$line);
$line = str_replace(" SUMMARY: ","</strong> SUMMARY: ",$line);
$line = str_replace("DTSTART;VALUE=DATE:","Start Date:",$line);
$line = str_replace("DTEND;VALUE=DATE:","End Date:",$line);

// output as HTML
echo "<br/>$line";
}

fclose($handle);
}

// show raw appointment data
echo "<h1>Raw Data</h1>";

if (($handle = fopen("calendaritem.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000000, ",")) !== FALSE) {

// get the ServerIcal column
$ical = $data[17];

// strip out all '00' and ' ' strings from the output
$ical = str_replace(" 00 ","",$ical);
$ical = str_replace(" ","",$ical);

// convert to string
$line = hex2str($ical);

// output as HTML
echo "<br/><br/>$line";
}

fclose($handle);
}

?>

Вот только моя Убунта при попытке проделать это, выдаёт кучу строк: "<br/><br/>PHP Notice: Undefined variable: str in /home/user/Desktop/php.php on line 6" и дальше ничего не происходит.

Я сделал csv также из того WLCalendarStore.edb от 2013 года, который рабочий. И ошибка при конвертации через php та же самая. То есть не в файле дело.

"PHP Notice: Undefined variable" - это переменная не объявлена, дописал $str="";

function hex2str($hex)
{ $str="";
for($i=0;$i<strlen($hex);$i+=2) $str .= chr(hexdec(substr($hex,$i,2)));
return $str;
}


Но html файл не создаётся, а терминал выводит кучу строк:
<h1>Appointments</h1><br/><br/><br/><br/><br/><br/>& amp; lt;br/><br/><br/><br/><br/><br/><br/><br/><br/>< ; ;br/><br/> (много)

У меня программирование было давно в институте на делфи, не помню уже... Я также попытался переменную объявить до функции, сделав глобальной, терминал тогда на 8 строку ругается, где return $str;

Вот ссылка на сам csv файл, форум не даёт его прикрепить:
https://cloud.mail.ru/public/7pNp/8kiaRCwM3

Если есть и другие способы, как сконвертировать, направьте! Или вдруг есть ещё какие способы решения проблемы...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.