Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> php скрипт для HEX csv, пытаюсь преобразовать в читаемый формат
master77  
 ۩  [x]    Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 1
Пользователь №: 43007
На форуме: 1 год, 1 месяц, 22 дня
Карма:




Всем привет!

Небольшая предыстория:
Слетела база данных календаря 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

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

Это сообщение отредактировал master77 - 28.05.2016 - 18:03
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса