За последние 24 часа нас посетили 25264 программиста и 1565 роботов. Сейчас ищут 1009 программистов ...

год в заголовке dBase или замена байта в файле

Тема в разделе "Прочие вопросы по PHP", создана пользователем Ganzal, 24 мар 2012.

  1. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    всем здравствуйте!
    ситуация такая
    делаю выгрузку в dbf и все хорошо за исключением одной вещи
    в dbf байтами 01-04 записывается дата изменения файла в формате ГГММДД
    ГГ выглядит как 0x70, то есть 112, то есть столько лет с 1900 года. почти устраивает.
    но фокс работает "с 2000 года" и требует этот байт в значении 0x0C (то есть 12)

    можно ли dbase заставить работать "с 2000 года" или подскажите простой способ перезаписи одного байта в файле средствами php?

    связка fopen - fseek - freed - fseek - fwrite - fclose дописывает в конец.
    а перечитывать весть файл ради замены одного байта - убейте)))

    заранее спасибо за наводку
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    seek-нуть можно к любому байту
    только лучше заставь свой Fox/ODBC понимать что он работает с файлом dBase. разница между форматами dbf у разных языков этими байтами не ограничивается. должны быть настройки!
     
  3. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (PHP):
    1.         $f = fopen($file, 'ab+');
    2.         fseek($f, 1);
    3.         $y = ord(fread($f, 1));
    4.         var_dump($y);
    5.         if(100<=$y)
    6.         {
    7.             $y-=100;
    8.         }
    9.         fseek($f,1);
    10.         fwrite($f,chr($y));
    11.         fclose($f); 
    к сожалению, дописывает в конец файла. почти уверен что не прав именно я

    со стороны мамонтов не будет вноситься никаких изменений. либо я нахожу способ уменьшать значение байта (на 100, если оно больше 100), либо... смотреть первое либо))))

    форматы уже причесали. остался только этот байт. я могу взять первый байт + (второй минус 100) + с третьего оставшиеся и таким образом собрать правильный файл. но мне интересно как можно изменить только 1 байт в файле. настроек php dBase я так понял вообще никаких нет.

    Добавлено спустя 40 минут 9 секунд:
    да, именно я не прав. режим открытия файла надо, естественно не ab+ а rb+
    костыль готов)))
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    чудак, ищи настройки не в php, а там где читаешь файл — в винде
     
  5. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    еще раз говорю))) я не буду перенастраивать арм. ни винду в целом, ни фокс в частности))) моя задача положить в нужное место нужный файл. если файл не удовлетворяет готовый продукт - именно я должен либо признать невозможность выполнения задачи, либо выполнить ее доступными мне средствами. а гранью между первым и вторым вариантом был этот единственный байт. и я его уже подмениваю. значит я выполнил задачу)))
    это случай когда вклад разработчик:потребитель = 100:0. у потребителя просто появляется новый сервис при этом ему не нужно переписывать свои програмии и/или перенастраивать рабочие машины.