В настоящее время я работаю (или, по крайней мере, планирую) пару проектов, которые работают с большими объемами повторяющихся данных. Тип данных, который хорошо работает в электронной таблице или базе данных, но неприятен в XML. :)
NetCDF кажется отличным вариантом для формата файла. Однако я работаю на C#, и "официальной" реализации NetCDF нет. Есть «официальная» версия Python, которую я потенциально мог бы использовать с IronPython. Другой вариант - это «Библиотека NetCDF для .Net» на CodePlex, но она кажется довольно тихой (http://www.codeplex.com/netcdf).
Кто-нибудь работал с любой из этих библиотек? Вы можете дать какие-нибудь рекомендации?





Во-первых, уверены ли вы, что NetCDF - правильный выбор? Если вы хотите взаимодействовать с другими программами, которым необходимо читать большие объемы данных, и они уже поддерживают NetCDF, то это, вероятно, отличный выбор. Не так много стандартных и хорошо поддерживаемых форматов файлов, которые поддерживают большие многомерные массивы. Но если вы собираетесь читать и писать файлы только с C#, это может быть не такой уж хороший выбор.
Я большой поклонник "классического" формата файлов NetCDF. Он компактен и чрезвычайно прост, но достаточно гибок, чтобы поддерживать множество распространенных видов многомерных хорошо структурированных данных. Мне потребовался всего один день, чтобы написать полный синтаксический анализатор для классического NetCDF, и мне потребовалось всего час, чтобы написать программу для вывода хорошо сформированного частного случая классического файла NetCDF. Вы можете реализовать чистую библиотеку NetCDF на C# самостоятельно, и это не составит особого труда. Вы можете легко начать с реализации только тех функций, которые вам нужны. Вот спецификация.
К сожалению, NetCDF-4 решил использовать HDF-5 в качестве формата данных. Это значительно усложняет процесс написания полного анализатора NetCDF на другом языке. HDF-5 очень универсален и, на мой взгляд, был чрезмерно спроектирован - он пытается быть слишком большим количеством вещей для слишком большого количества людей. Я бы не рекомендовал пытаться работать с ним напрямую, если вы не планируете потратить месяц на написание модульных тестов. Если вы должны использовать netCDF-4 / HDF-5 из C#, ваш единственный реальный вариант - обернуть библиотеку C с помощью SWIG или чего-то подобного.
Обратите внимание, что NetCDF для Python - это просто оболочка для кода C, так что на самом деле это не так уж и полезно; если вы собираетесь использовать обернутую библиотеку C, вы можете просто написать оболочку C#, а не использовать Python в качестве среднего уровня.
+1 Другой вариант помимо SWIG - использовать помощника взаимодействия PInvoke. Он был написан командой .NET framework. clrinterop.codeplex.com/releases/view/14120
В проекте мы используем реализацию ucar netcdf на C# с использованием ikvm. IKVM можно использовать для «преобразования» проектов Java в библиотеки .Net без использования виртуальной машины Java. Я не проверял производительность, но это простой способ получить netcdf на C# :).
http://www.ikvm.net/stories.html
http://www.unidata.ucar.edu/downloads/netcdf/netcdf-java-4/index.jsp
Я добавляю это сейчас, потому что это был главный ответ, когда я искал в Google по этой теме.
ETA Согласно ответу ниже, теперь доступна ДРУГАЯ библиотека Microsoft NetCDF:
https://www.nuget.org/packages/SDSLite
Научный набор данных Lite 1.4.0
Это кроссплатформенная библиотека для работы с файлами netCDF, CSV и TSV.
Поскольку этот вопрос был первоначально задан и дан ответ, Microsoft выпустила научную библиотеку DataSet, которая поддерживает NetCDF.
http://research.microsoft.com/en-us/downloads/ccf905f6-34c6-4845-892e-a5715a508fa3/
Описание Проекта
Библиотека SDS упрощает для разработчиков .Net чтение, запись и совместное использование скаляров, векторов, матриц и многомерных сеток, которые очень распространены в научном моделировании. Он поддерживает CSV, NetCDF и другие форматы файлов.
Программы, использующие библиотеку, хранят связанные данные и связанные метаданные в компактном самоописывающем пакете. Библиотеки поставляются с набором утилит и пакетов: служебной программой командной строки sds, приложением DataSet Viewer и надстройкой для Microsoft Excel 2007 (и более поздних версий). См. Подробности на странице выпуска.
А теперь Microsoft выпустила новую библиотеку для netCDF, доступную через NuGet:
https://www.nuget.org/packages/SDSLite
Научный набор данных Lite 1.4.0
Это кроссплатформенная библиотека для работы с файлами netCDF, CSV и TSV.
Я этим не пользовался, так что возьмите его там, где он есть. Ведущий разработчик проекта CodePlex (над которым он больше не работает) предлагает связь в качестве альтернативы. Название означает SDS: библиотека и инструменты Scientific DataSet и включает поддержку NetCDF. Похоже, что у него есть документация, и он вышел из бета-версии. Однако, когда я пишу этот 2011-10-14, последнее обновление вышло более года назад (2010-07-18).