Существует ли упрощенная библиотека (для нескольких платформ), которая позволяет легко записывать данные массива в файлы? - PullRequest
0 голосов
/ 23 сентября 2010

например. у одного есть пара массивов целых чисел или чисел и несколько целых чисел для хранения. Существует ли упрощенный способ сохранить их для последующей перезагрузки без необходимости записывать формат данных с нуля и т. Д .?

Ответы [ 4 ]

1 голос
/ 23 сентября 2010

Самый простой вариант - использовать serialize() / unserialize() или json_encode() / json_decode().Они преобразуют любую структуру данных PHP в простую строку, которую вы можете прочитать в другом месте на любом компьютере с PHP или, по крайней мере, в библиотеке json.

1 голос
/ 23 сентября 2010
  • netcdf (более простой интерфейс)
  • hdf5 (более мощный)

они не простые, однако несколько часов вложений стоят

0 голосов
/ 23 сентября 2010

Вы всегда можете использовать наиболее переносимый способ, используя текстовое представление и записывая их в файл с помощью fprintf и используя% d для целых и% f (или% lf) для чисел с плавающей запятой.Это позволяет избежать любых двоичных несовместимостей между платформами и является Unix Way (TM).Перечитайте, используя scanf (или sccanf), и все.

0 голосов
/ 23 сентября 2010

Если их размер фиксирован, вы можете просто fwrite указать их в файле, фактически выгрузив представление их памяти на диск (вы можете сделать это, даже если их размер не фиксирован, но все становится немного сложнее).

int someInts[50];
double someDoubles[25];
FILE * fp;

/* Write */
fp = fopen(/* ... */);
fwrite(someInts, sizeof(someInts), 1, fp);
fwrite(someDoubles, sizeof(someDoubles), 1, fp);
fclose(fp);

/* Read */
fp = fopen(/* ... */);
fread(someInts, sizeof(someInts), 1, fp);
fread(someDoubles, sizeof(someDoubles), 1, fp);
fclose(fp);

(обработка ошибок для краткости опущена)

Я не думаю, что есть более быстрые или более простые методы, но имейте в виду, что, если это не просто игрушечный проект, вы должныдобавьте несколько заголовков (которые вы можете обрабатывать как структуру в fwrite / fread), чтобы убедиться, что вы читаете файл, сгенерированный вашим приложением.

Недостатком этого метода является то, что его сложнее редактироватьhand ", и, если такие файлы нужно будет передавать между разными платформами, у вас возникнут проблемы, если разные платформы будут иметь разные порядковые номера и разные размеры для сохраняемых типов.Обратите внимание, что вы можете обойти эти проблемы, но код станет более сложным.

Другой альтернативой (которая, тем не менее, будучи базой данных SQL воспринимается как «естественная» не во всех ситуациях), может быть использование базы данных SQLite : как говорится на их сайте:

SQLite - это встроенный движок базы данных SQL.В отличие от большинства других баз данных SQL, SQLite не имеет отдельного серверного процесса.SQLite читает и пишет напрямую в обычные файлы на диске.Полная база данных SQL с несколькими таблицами, индексами, триггерами и представлениями содержится в одном файле на диске. Формат файла базы данных - кроссплатформенный - вы можете свободно копировать базу данных между 32-разрядными и 64-разрядными системами или между архитектурами с прямым и младшим порядком байтов.Эти функции делают SQLite популярным выбором в качестве формата файла приложения .Подумайте о SQLite не как о замене Oracle, а как о замене fopen ()

(акцент сделан на функции, соответствующие вашим требованиям)

Возможно, вы захотитевзгляните на страницу « Подходящее использование для SQLite ».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...