всем здравствуйте! ситуация такая делаю выгрузку в dbf и все хорошо за исключением одной вещи в dbf байтами 01-04 записывается дата изменения файла в формате ГГММДД ГГ выглядит как 0x70, то есть 112, то есть столько лет с 1900 года. почти устраивает. но фокс работает "с 2000 года" и требует этот байт в значении 0x0C (то есть 12) можно ли dbase заставить работать "с 2000 года" или подскажите простой способ перезаписи одного байта в файле средствами php? связка fopen - fseek - freed - fseek - fwrite - fclose дописывает в конец. а перечитывать весть файл ради замены одного байта - убейте))) заранее спасибо за наводку
seek-нуть можно к любому байту только лучше заставь свой Fox/ODBC понимать что он работает с файлом dBase. разница между форматами dbf у разных языков этими байтами не ограничивается. должны быть настройки!
Код (PHP): $f = fopen($file, 'ab+'); fseek($f, 1); $y = ord(fread($f, 1)); var_dump($y); if(100<=$y) { $y-=100; } fseek($f,1); fwrite($f,chr($y)); fclose($f); к сожалению, дописывает в конец файла. почти уверен что не прав именно я со стороны мамонтов не будет вноситься никаких изменений. либо я нахожу способ уменьшать значение байта (на 100, если оно больше 100), либо... смотреть первое либо)))) форматы уже причесали. остался только этот байт. я могу взять первый байт + (второй минус 100) + с третьего оставшиеся и таким образом собрать правильный файл. но мне интересно как можно изменить только 1 байт в файле. настроек php dBase я так понял вообще никаких нет. Добавлено спустя 40 минут 9 секунд: да, именно я не прав. режим открытия файла надо, естественно не ab+ а rb+ костыль готов)))
еще раз говорю))) я не буду перенастраивать арм. ни винду в целом, ни фокс в частности))) моя задача положить в нужное место нужный файл. если файл не удовлетворяет готовый продукт - именно я должен либо признать невозможность выполнения задачи, либо выполнить ее доступными мне средствами. а гранью между первым и вторым вариантом был этот единственный байт. и я его уже подмениваю. значит я выполнил задачу))) это случай когда вклад разработчик:потребитель = 100:0. у потребителя просто появляется новый сервис при этом ему не нужно переписывать свои програмии и/или перенастраивать рабочие машины.