fixed parser

pull/27/head
accius 2 months ago
parent 4ea71af1e8
commit 7cc1081c67

@ -131,64 +131,49 @@ function parseOutputFile(outputPath) {
raw: output.substring(0, 3000) // Include raw for debugging raw: output.substring(0, 3000) // Include raw for debugging
}; };
let headers = [];
let inDataSection = false; let inDataSection = false;
for (const line of lines) { for (const line of lines) {
const trimmed = line.trim(); const trimmed = line.trim();
if (!trimmed || trimmed.startsWith('-') || trimmed.startsWith('*')) {
continue;
}
// Look for CSV header line // Look for "Calculated Parameters" section
if (trimmed.includes('Freq') || trimmed.includes('FREQ') || trimmed.includes('frequency')) { if (trimmed.includes('Calculated Parameters') && !trimmed.includes('End')) {
headers = trimmed.split(/[,\t]+/).map(h => h.trim().toLowerCase());
inDataSection = true; inDataSection = true;
console.log('[Parse] Found headers:', headers);
continue; continue;
} }
// Parse data lines (CSV or space-separated) // Stop at end of data
if (inDataSection) { if (trimmed.includes('End Calculated') || trimmed.includes('*****')) {
let parts; if (inDataSection && results.frequencies.length > 0) {
if (trimmed.includes(',')) { break;
parts = trimmed.split(',').map(p => p.trim());
} else {
parts = trimmed.split(/\s+/);
} }
}
if (parts.length >= 2 && !isNaN(parseFloat(parts[0]))) { // Parse data lines: "02, 05, 2.000,-120.29, -16.04, 0.00"
const freqResult = { // Format: Month, Hour, Freq, Pr, SNR, BCR
freq: parseFloat(parts[0]) if (inDataSection && trimmed && !trimmed.startsWith('*') && !trimmed.startsWith('-')) {
}; const parts = trimmed.split(',').map(p => p.trim());
// Map based on headers or position if (parts.length >= 6) {
if (headers.length > 0) { const freq = parseFloat(parts[2]);
headers.forEach((h, i) => { const pr = parseFloat(parts[3]);
if (i < parts.length) { const snr = parseFloat(parts[4]);
const val = parseFloat(parts[i]); const bcr = parseFloat(parts[5]);
if (!isNaN(val)) {
if (h.includes('snr')) freqResult.snr = val; if (!isNaN(freq) && freq > 0) {
else if (h.includes('bcr') || h.includes('rel')) freqResult.reliability = val; results.frequencies.push({
else if (h.includes('pr') || h.includes('power')) freqResult.sdbw = val; freq: freq,
else if (h.includes('muf')) freqResult.muf = val; sdbw: pr,
} snr: snr,
} reliability: bcr
}); });
} else { console.log(`[Parse] Freq ${freq} MHz: SNR=${snr} dB, BCR=${bcr}%`);
// Fallback positional parsing
if (parts.length >= 2) freqResult.reliability = parseFloat(parts[1]) || 0;
if (parts.length >= 3) freqResult.snr = parseFloat(parts[2]) || null;
if (parts.length >= 4) freqResult.sdbw = parseFloat(parts[3]) || null;
} }
console.log('[Parse] Frequency result:', freqResult);
results.frequencies.push(freqResult);
} }
} }
} }
// Also look for MUF in header section // Extract MUF from header section
const mufMatch = output.match(/(?:BMUF|MUF|Operational MUF)\s*[:=]?\s*([\d.]+)/i); const mufMatch = output.match(/(?:BMUF|MUF|Operational MUF)\s*[:=]?\s*([\d.]+)/i);
if (mufMatch) { if (mufMatch) {
results.muf = parseFloat(mufMatch[1]); results.muf = parseFloat(mufMatch[1]);

Loading…
Cancel
Save

Powered by TurnKey Linux.