1
ADIF是HAM運營商無線電記錄的標準。有問題的ADIF記錄
<EOR>
指示記錄的結束。我將一個ADIF文件分成多個記錄
以下記錄導致問題。
<CALL:6>SV2JAO<QSO_DATE:8:D>20101001<TIME_ON:4>1736<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:62>TNX QSO, 73 FROM GREECE <pse paper qsl card for my collection>
這裏是使用正則表達式將文件拆分爲多個記錄的代碼。
string[] x = Regex.Split(record.Replace("\n", "").Replace("\r", ""), @"<(.*?):.*?>([^<\t\n\r\f\v]+)").Where(S => !string.IsNullOrEmpty(S)).ToArray();
var dic = new Dictionary<string, string>();
for (int i = 0; i < x.Length; i++)
{
dic.Add(x[i].ToLower(), x[i + 1]);
i++;
}
這是問題與<和>內ADIF細胞<TAG:lenghtOfValue>Value
下面是樣本記錄。
<CALL:6>RK3DXB<QSO_DATE:8:D>20100926<TIME_ON:4>1334<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E
<CALL:6>EA1BRD<QSO_DATE:8:D>20100926<TIME_ON:4>1334<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E
<CALL:6>UV5EHT<QSO_DATE:8:D>20100926<TIME_ON:4>1334<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E
<CALL:5>G4MKI<QSO_DATE:8:D>20100926<TIME_ON:4>1536<BAND:3>30M<MODE:5>PSK31<RST_SENT:4>599 <RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:22>73, thanks for the QSO
<CALL:6>EA1BRD<QSO_DATE:8:D>20100926<TIME_ON:4>1636<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:19>TNX For QSO TU 73!.
<CALL:5>F5PEZ<QSO_DATE:8:D>20100926<TIME_ON:4>1705<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:29>Tnx for the QSO best 73 Andre
<CALL:6>UA3LSX<QSO_DATE:8:D>20100926<TIME_ON:4>1749<BAND:3>30M<MODE:5>PSK31<RST_SENT:3>599<RST_RCVD:0><QSL_SENT:1>Y<QSL_SENT_VIA:1>E<QSLMSG:19>TNX For QSO TU 73!.
如何修改我的代碼或正則表達式來解決此問題?
你的代碼示例給出了一個錯誤,指出索引超出陣列中界。這發生在最後一個元素上。信息的哪一部分應該是字典中的關鍵和價值? –
是的,但是如何使用正則表達式來防止(內部的ADIF單元格)? –
SQ7MRU
這個問題與'( inner ADIF cell)'無關。假設你的正則表達式返回2個字符串{「A」,「B」}的數組第一次迭代將一個項目添加到字典中,A作爲鍵,B作爲值。第二次迭代使用B作爲鍵向詞典中添加一個項目,並搜索數組中的第三個項目。但是該數組只包含2個字符串。這是造成這個問題的原因。你的問題沒有解釋你爲什麼這樣使用字典。 –