UNPKG

modern-netcdf

Version:
69 lines (59 loc) 1.96 kB
#!/usr/bin/env node 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); }); }