1

ADIFは HAM Operator Radio の LOG の標準です。

<EOR> 

レコードの終わりを示します。1 つの 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!.

コードまたは正規表現を変更してこの問題を解決するにはどうすればよいですか?

4

1 に答える 1

0

解決済み:

            // workaround to prevent from '< something >'  inner ADIF Cell
            string[] x = Regex.Split(record.Replace("\n", "").Replace("\r", ""), @"<([^:]+):\d+[^>]*>").ToArray();
            List<string> l = new List<string>(x);
            l.RemoveAt(0);
            x = l.ToArray();
于 2013-01-19T07:56:22.020 に答える