Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.06;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.006 c
2-1205341444
Resident
2008-03-12 20:04
2008.04.06
Undo Redo


15-1202845913
Kostafey
2008-02-12 22:51
2008.04.06
Средства проектирования БД


2-1204867209
alshtam
2008-03-07 08:20
2008.04.06
проблема с локальной переменной типа Pchar


15-1203158175
Ламот
2008-02-16 13:36
2008.04.06
Аудио аппаратура.


2-1205054963
Kolan
2008-03-09 12:29
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский