Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
2-1204485733
Дмитрий Патрушев
2008-03-02 22:22
2008.04.06
Net-статистика


2-1205407457
Кирей
2008-03-13 14:24
2008.04.06
Отображение значения вычисляемого поля в DBGrid


2-1205395591
kiberg
2008-03-13 11:06
2008.04.06
Вызов формы


15-1203524290
TwentyThird
2008-02-20 19:18
2008.04.06
Люксембург легализовал эвтаназию.


15-1203923348
Настёна
2008-02-25 10:09
2008.04.06
ос перезагружается?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский