Работа с файлами определенного формата

Тема в разделе "PHP", создана пользователем HatoL, 25 сен 2012.

Статус темы:
Закрыта.
Модераторы: latteo
  1. HatoL

    HatoL

    Регистр.:
    5 фев 2008
    Сообщения:
    206
    Симпатии:
    36
    У меня есть описание одного формата файла. Там описывается как располагаются байты в файле, сколько по размеру занимает тот или иной блок. Первое решение писать программу в лоб. Файлы не очень большие, то есть можно прочитать весь файл с помощью file_get_contents(), а потом циклами и прочими штуками прочитывать информацию дальше.

    А как-нибудь более стандартизированно это делать можно? Чтобы человек, читающий программу, мог сразу понять, как устроен файл внутри. Слышал в Си как-то описывают это все структурами (struct), а потом читают файл.
     
  2. tirrex

    tirrex

    Регистр.:
    9 ноя 2008
    Сообщения:
    213
    Симпатии:
    60
    fread в сишнике вроде может
    примерно так:
    объявляем структуру в соответствии с устройством файла
    struct FileStruc
    {
    <type> <name>;
    <type> <name>;
    <type> <name>;
    };

    код

    FILE *fp;
    fp=fopen("file.dat", "r");
    FileStruc raws[1000];

    for(int i=0;i<1000;i++)
    fread(&raws[i], sizeof(raws), 1, fp);
    fclose(fp);
    это набросок, конечно, сначала надо б определить сколько строк в файле чтобы размер массива и цикла задать, но это уже детали)
     
  3. Горбушка

    Горбушка Ищу её...

    Регистр.:
    2 май 2008
    Сообщения:
    3.115
    Симпатии:
    2.130
    HatoL, ну других вариантов, кроме как в лоб я на PHP не вижу. Другой вопрос, надо ли проверять всё подряд: тут, скорее, большой и сложной регулярки хватит... В любом случае, без открытия файла и прохода по нему PHP его содержимое просматривать, увы, не умеет...
    Единственное исключение - есть готовые библиотеки, подгружаемые в сам PHP, которые позволяют проверять синтексис. Например, такая библиотека есть для проверки XML на валидантность...
     
  4. NDK13

    NDK13 Создатель

    Регистр.:
    31 авг 2012
    Сообщения:
    36
    Симпатии:
    14
    Насколько я знаю, с двоичными данными в PHP работа идет через
    Код:
    http://php.net/manual/ru/function.pack.php
    и
    Код:
    http://php.net/manual/ru/function.unpack.php
    Вот обсуждение применительно с структурами на буржуйском
    Код:
    http://stackoverflow.com/questions/3993762/php-passing-c-struct-data-throught-socket-programming
     
Статус темы:
Закрыта.