Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Внизrecord => PHP Найти похожие ветки
← →
kernel © (2008-02-22 19:27) [0]Имеется вот такой Delphi`нский код:
type TMyRecord = record
MyInt : Integer;
MyString : string[5];
MyDate : TDate;
MyFlag : Boolean;
end;
Если записать [1 запись] данного типа в файл (...BlockWrite...), получаем немного читаемых слов плюс массу "крякозябликов". Но вопрос не в этом.
Как можно представить вышеописанный код в PHP скрипте с возможностью записи в файл (~так же, как это делается с помощью AssignFile, Rewrite, BlockWrite,CloseFile..)? И вообще, возможно ли это? :)
← →
kernel © (2008-02-22 20:19) [1]Кстати, может быть Perl как вариант замены PHP в данном случае :)
← →
homm © (2008-02-22 21:12) [2]serialize/unserialize
← →
palva © (2008-02-22 21:29) [3]Занести такую запись файл возможно и на PHP и на Perl. В основе лежит функция pack. При помощи этой функции возможно отдельные числа и символы упаковать в строку, которую затем вывести обычным образом.
← →
kernel © (2008-02-23 13:16) [4]Ничего не понимаю;
pack - упаковывает данные в бинарную строку
Т.е. мне нужно самому "высчитывать" и посимвольно записывать в каком-то специальном формате в файл?
Кто может, спасите, пожалуйста, примерчиком перевода record из [kernel © (22.02.08 19:27)] на PHP.
← →
palva © (2008-02-23 15:27) [5]Примерчик перевода. Он, конечно, сделан не до конца, но это ведь примерчик.
<?php
$MyInt = 47253;
$MyString = "q13x";
$f = fopen("out.bin", "wb");
$Trunked = substr($MyString, 0, 5);
$s = pack("ICa5", $MyInt, strlen($Trunked), $Trunked);
fwrite($f, $s);
fclose($f);
?>
← →
kernel © (2008-02-23 15:49) [6]palva, спасибо большое, но не понятно несколько моментов:
substr возвращает подстроку в строке, т.е. получается $Trunked = $MyString ? или я что-то не так понимаю?
> pack("ICa5", $MyInt, strlen($Trunked), $Trunked)
читал про пак я, ничего не понял >> ICa5 - это формат? т.е. получается
I - беззнаковое целое;
C - беззнаковый байт;
a - строка, свободные места в поле заполняются символом с кодом 0;
5- не понял :)
?
и в какой последовательности нужно записывать параметры формата и аргументы pack?
← →
Zeqfreed © (2008-02-23 15:53) [7]> kernel © (23.02.08 15:49) [6]
Ну как так-то? :)
a5 значит пять символов.
← →
palva © (2008-02-23 16:26) [8]> т.е. получается $Trunked = $MyString ? или я что-то не так понимаю?
Они равны, если длина $MyString не превышает 5 символов. В противном случае $Trunked это урезанный до 5 символов вариант $MyString. Именно так поступает паскаль с короткими строками, насколько я знаю.
> и в какой последовательности нужно записывать параметры формата и аргументы pack?
Сначала строку формата, а потом аргументы в том порядке в каком их запрашивает формат.
← →
kernel © (2008-02-23 16:31) [9]Понял, спасибо.
А мне теперь нужно будет pack вызывать для каждой переменной из TMyRecord? И что теперь делать с типами TDate и Boolean?
← →
palva © (2008-02-23 16:54) [10]> I - беззнаковое целое;
Здесь я неправильно выбрал формат. Вам наверно нужно i - знаковое целое.
Дату вам нужно как-то преобразовать в плавающее число, как это принято в делфи (например 39501.5 это сегодня полдень) а потом уложить в строку по формату d. Логическое значение должно быть представлено как 0/1 только какая должна быть длина числа в файле не знаю. Экспериментируйте.
← →
kernel © (2008-02-23 19:46) [11]Спасибо, буду разбираться :)
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2008.04.06;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c