modern-netcdf
Version:
Modern NetCDF file reader and utilities
69 lines (59 loc) • 1.96 kB
JavaScript
const fs = require('fs');
const path = require('path');
const { NetCDFReader } = require('..');
function formatValue(value) {
if (Array.isArray(value)) {
// Handle large arrays by limiting output
if (value.length > 100) {
return `[${value.length} values]`;
}
return value.join(', ');
}
if (typeof value === 'string' && value.length > 1000) {
return `[string length ${value.length}]`;
}
return value;
}
function formatAttributes(attrs) {
return attrs.map(attr => ` ${attr.name} = ${formatValue(attr.value)} ;`).join('\n');
}
async function dump(filePath) {
const buf = fs.readFileSync(filePath);
const reader = await NetCDFReader.open(buf);
const fileName = path.basename(filePath, '.nc');
console.log(`netcdf ${fileName} {`);
console.log('dimensions:');
for (const dim of reader.dimensions) {
console.log(` ${dim.name} = ${dim.size} ;`);
}
console.log('variables:');
for (const [name, variable] of Object.entries(reader.variables)) {
const dimNames = (variable.dimensions || []).map((d) => d.name);
console.log(` ${variable.type} ${name}${dimNames.length ? `(${dimNames.join(', ')})` : ''} ;`);
if (variable.attributes.length) {
console.log(formatAttributes(variable.attributes));
}
}
console.log('\n// global attributes:');
console.log(formatAttributes(reader.globalAttributes));
console.log('\ndata:');
for (const [name, variable] of Object.entries(reader.variables)) {
const data = await variable.read();
console.log(`\n ${name} =`);
console.log(` ${formatValue(data)} ;`);
}
console.log('}');
reader.close();
}
if (require.main === module) {
const filePath = process.argv[2];
if (!filePath) {
console.error('Usage: node dump.js <path-to-netcdf-file>');
process.exit(1);
}
dump(filePath).catch(err => {
console.error(err);
process.exit(1);
});
}