toAdifRSA = desc => {
const text2array = rows =>
((typeof rows === 'string') ? rows.trim().split('\n') : rows)
.map((row, i) =>
((typeof row === 'string') ? row.trim().split('|') : row)
.map(cell => cell.trim()));
const stringify = (fields, p) => fields
.split(/\s+/)
.map(e => {
const val = (p[e] || '???').toString().toUpperCase();
return '<' + e + ':' + val.length + '>' + val;
})
.join('') + '\n<EOR>';
let arr = text2array(desc);
return arr.map(e => {
const p = {};
p.QSO_DATE = e[0].replace(/-/g, '');
p.TIME_ON = e[1].replace(/:/, '');
p.CALL = e[2];
p.RST_RCVD = e[3];
p.RST_SENT = e[4];
p.GRIDSQUARE = e[5];
p.SAT_NAME = e[6];
switch (e[7]) {
case 'A': p.BAND = '2M'; p.FREQ = 146; p.BAND_RX = '10M'; p.FREQ_RX = 29.4; break;
case 'B': p.BAND = '2M'; p.FREQ = 146; p.BAND_RX = '70M'; p.FREQ_RX = 435; break;
case 'J': p.BAND = '70CM'; p.FREQ = 435; p.BAND_RX = '2M'; p.FREQ_RX = 146; break;
case 'Q': p.BAND = '13CM'; p.FREQ = 2400; p.BAND_RX = '3CM'; p.FREQ_RX = 10489; break;
}
p.MODE = (p.RST_SENT.length === 3) ? 'CW' : 'SSB';
p.PROP_MODE = 'SAT';
p.MY_GRIDSQUARE = 'KO34KI';
return stringify(
'QSO_DATE TIME_ON CALL MODE BAND FREQ BAND_RX FREQ_RX PROP_MODE SAT_NAME MY_GRIDSQUARE RST_RCVD RST_SENT GRIDSQUARE',
p
);
}).join('\n');
}