Главная страница
    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
9-1167753854
Fosgen
2007-01-02 19:04
2008.04.06
Проекту HOMESHIP требуются художники-моделлеры.


8-1175739163
Klopan
2007-04-05 06:12
2008.04.06
Flash


11-1186587889
BMouradov
2007-08-08 19:44
2008.04.06
PBitmap: запись и считывание из потока


15-1203770359
Kerk
2008-02-23 15:39
2008.04.06
[MySQL] .. как открыть?


2-1204980628
Kolan
2008-03-08 15:50
2008.04.06
Невставляются числа с точкой в SQLite.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский