コード例 #1
0
        private void RegistQSO()
        {
            int iTmp; double dTmp;

            #region "交信開始時刻"
            {
                int iTz;
                if (txtTimeZone.Text.ToUpper() == "JST")
                {
                    iTz = 9;
                }
                else if (txtTimeZone.Text.ToUpper() == "UTC")
                {
                    iTz = 0;
                }
                else if (!int.TryParse(txtTimeZone.Text, out iTz))
                {
                    //DateTime dtU = DateTime.UtcNow;
                    //TimeSpan ts = DateTime.Now - dtU;
                    ErrMsg("Invalid timezone formatting.\nタイムゾーンの書式が不正です(JST:+9、UTC:0)。");
                }

                DateTime dtS;
                if (!DateTime.TryParse(txtDate_S.Text + " " + txtTime_S.Text, out dtS))
                {
                    ErrMsg("Invalid date formatting.\n日付の書式が不正です。"); return;
                }
                dtS         = dtS.AddHours(-iTz);
                _QSO.Date_S = dtS.Ticks;
            }
            #endregion
            _QSO.Prefix1 = txtPrefix1.Text;
            _QSO.Prefix2 = txtPrefix2.Text;
            if (txtCall.Text == "")
            {
                ErrMsg("Error:The callsign is blank.\nコールサインが空白です。"); return;
            }
            else
            {
                _QSO.Call = txtCall.Text;
            }

            _QSO.QRA      = txtQRA.Text;
            _QSO.DXCC     = txtDXCC.Text;
            _QSO.CityCode = txtCityCode.Text;
            _QSO.GL       = txtGL.Text;
            _QSO.QTH      = txtQTH.Text;
            _QSO.QTH_h    = txtQTH_h.Text;
            if (int.TryParse(txtRS_His.Text, out iTmp))
            {
                _QSO.RS_His = iTmp;
            }
            else
            {
                ErrMsg("Error: RS_His"); return;
            }
            if (int.TryParse(txtRS_My.Text, out iTmp))
            {
                _QSO.RS_My = iTmp;
            }
            else
            {
                ErrMsg("Error: RS_My"); return;
            }
            if (double.TryParse(txtFreq.Text, out dTmp))
            {
                _QSO.SetFreq(dTmp, _dcBand);
            }
            else
            {
                ErrMsg("Error: Freq"); return;
            }
            _QSO.Mode = txtMode.Text;
            if (double.TryParse(txtPwr_My.Text, out dTmp))
            {
                _QSO.Pwr_My = dTmp;
            }
            else
            {
                ErrMsg("Error: Pwr_My"); return;
            }
            #region "交信終了時刻"
            {
                if (txtTime_E.Text == "")
                {
                    _QSO.Date_E = -1;
                }
                else
                {
                    DateTime dtTmp;
                    if (DateTime.TryParse(txtDate_S.Text + " " + txtTime_E.Text, out dtTmp))
                    {
                        _QSO.Date_E = dtTmp.AddHours(-_QSO.TimeZone).Ticks;
                        if (_QSO.Date_E < _QSO.Date_S)
                        {
                            _QSO.Date_E = dtTmp.AddHours(24 - _QSO.TimeZone).Ticks;
                        }                                                                                                                  //零時またぎのQSO
                    }
                    else
                    {
                        ErrMsg("Error: Date_E or Time_E"); return;
                    }
                }
            }
            #endregion
            _QSO.QSLManager = txtQSLManager.Text;
            _QSO.Rig_His    = txtRig_His.Text;
            _QSO.Ant_His    = txtAnt_His.Text;
            #region "相手局出力"
            if (txtPwr_His.Text == "")
            {
                _QSO.Pwr_His = -1d;
            }
            else
            {
                if (double.TryParse(txtPwr_His.Text, out dTmp))
                {
                    _QSO.Pwr_His = dTmp;
                }
                else
                {
                    ErrMsg("Error: Pwr_His"); return;
                }
            }
            #endregion
            _QSO.Rig_My      = txtRig_My.Text;
            _QSO.Ant_My      = txtAnt_My.Text;
            _QSO.QTH_My      = txtQTH_My.Text;
            _QSO.Prefix_My   = txtPrefix_My.Text;
            _QSO.CityCode_My = txtCityCode_My.Text;
            _QSO.GL_My       = txtGL_My.Text;
            _QSO.CardMsg     = txtCardMsg.Text;
            _QSO.Remarks     = txtRemark.Text;
            _QSO.Card_Send   = chkCard_Send.Checked;
            _QSO.Card_Resv   = chkCard_Resv.Checked;
            _QSO.Except      = chkExcept.Checked;

            _QSO.LastUpdate = DateTime.UtcNow.Ticks;
            #region "QSLカード交換方法"
            if (rdoBureau.Checked)
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.B;
            }
            else if (rdoDirect.Checked)
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.D;
            }
            else if (rdoManager.Checked)
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.M;
            }
            else if (rdoNone.Checked)
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.N;
            }
            else if (rdo1way.Checked)
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.R;
            }
            else
            {
                _QSO.QSLMethod = (int)cQSO.enQSLMethod.X;
            }
            #endregion

            //新規QSO→更新履歴に追加する
            if (!_blAllQSO.Contains(_QSO) && _QSO.Call != "")
            {
                _blAllQSO.Add(_QSO);
            }

            //QSOを新規に
            _QSO = new cQSO(_QSO);
            RefleshForm();
        }
コード例 #2
0
ファイル: frmInport.cs プロジェクト: JG2HNC/OpenLog
        //WSJT-XのLogプレビュー作成
        private void PreviewWSJT()
        {
            List <string> lsErr = new List <string>();
            int           iDc   = 0; //Dupeの件数
            int           iL    = 0;

            using (StreamReader sr = new StreamReader(txtSetInCSV.Text, Encoding.ASCII)) {
                while (-1 < sr.Peek())
                {
                    iL++;
                    cQSO q = new cQSO();

                    //自局情報
                    if (txtPrefix_My.Text != "")
                    {
                        q.Prefix_My = txtPrefix_My.Text;
                    }
                    if (txtQTH_My.Text != "")
                    {
                        q.QTH_My = txtQTH_My.Text;
                    }
                    if (txtDcode.Text != "")
                    {
                        q.CityCode_My = txtDcode.Text;
                    }
                    if (txtGL.Text != "")
                    {
                        q.GL_My = txtGL.Text;
                    }
                    if (0 <= cboQSL.SelectedIndex)
                    {
                        cQSL qs = (cQSL)cboQSL.SelectedItem; q.QSLMethod = qs.QSLMethod;
                    }

                    //QSO情報
                    string[] sL = sr.ReadLine().Split(',');
                    DateTime dtS, dtE;
                    int      iV; double dV;
                    if (!DateTime.TryParse(sL[0].Replace("-", "/") + " " + sL[1], out dtS))
                    {
                        lsErr.Add(string.Format("Line:{0} 開始時刻の書式が不正", iL));
                    }
                    if (!DateTime.TryParse(sL[2].Replace("-", "/") + " " + sL[3], out dtE))
                    {
                        lsErr.Add(string.Format("Line:{0} 終了時刻の書式が不正", iL));
                    }
                    q.Date_S   = dtS.Ticks;
                    q.Date_E   = dtE.Ticks;
                    q.TimeZone = 0;
                    q.Call     = sL[4];
                    q.GL       = sL[5];
                    if (double.TryParse(sL[6], out dV))
                    {
                        q.SetFreq(dV, _dcBand);
                    }
                    else
                    {
                        lsErr.Add(string.Format("Line:{0} 周波数の書式が不正", iL));
                    }
                    q.Mode = sL[7];

                    string[] sCalls = q.Call.Split('/');
                    #region "移動運用対策"
                    if (sCalls.Length == 3)
                    {
                        q.Prefix1 = sCalls[0]; q.Call = sCalls[1]; q.Prefix2 = sCalls[2];
                    }
                    else if (sCalls.Length == 2)
                    {
                        if (sCalls[0].Length < sCalls[1].Length)
                        {
                            q.Prefix1 = sCalls[0]; q.Call = sCalls[1];
                        }
                        else
                        {
                            q.Call = sCalls[0]; q.Prefix2 = sCalls[1];
                        }
                    }
                    #endregion



                    //デフォルト設定のリグ
                    if (chkUseDefault.Checked && _dcDefault.ContainsKey(q.Band))
                    {
                        if (q.Prefix_My == "")
                        {
                            q.Rig_My = _dcDefault[q.Band].RigHome; q.Ant_My = _dcDefault[q.Band].AntHome;
                        }
                        else
                        {
                            q.Rig_My = _dcDefault[q.Band].RigMobile; q.Ant_My = _dcDefault[q.Band].AntMobile;
                        }
                    }

                    if (int.TryParse(sL[8], out iV))
                    {
                        q.RS_His = iV;
                    }
                    else
                    {
                        lsErr.Add(string.Format("Line:{0} 相手RSの書式が不正", iL));
                    }

                    if (int.TryParse(sL[9], out iV))
                    {
                        q.RS_My = iV;
                    }
                    else
                    {
                        lsErr.Add(string.Format("Line:{0} 自局RSの書式が不正", iL));
                    }

                    if (double.TryParse(sL[10], out dV))
                    {
                        q.Pwr_My = dV;
                    }
                    else
                    {
                        if (sL[10] != "")
                        {
                            lsErr.Add(string.Format("Line:{0} 出力の書式が不正", iL));
                        }
                    }

                    q.Remarks = sL[11];
                    q.QRA     = sL[12];

                    //重複判別
                    bool bDupe = false;
                    foreach (cQSO pq in _blDest)
                    {
                        if (pq.Date_S == q.Date_S && pq.Call == pq.Call)
                        {
                            bDupe = true; iDc++;
                        }
                    }
                    if (bDupe && chkExceptDupe.Checked)
                    {
                        continue;
                    }

                    #region "DXCC"
                    {
                        string sPrefix = q.Call;
                        if (1 < q.Prefix1.Length)
                        {
                            sPrefix = q.Prefix1;
                        }
                        if (1 < q.Prefix2.Length)
                        {
                            sPrefix = q.Prefix2;
                        }
                        Dictionary <string, string> dcDx = GetDXCC(sPrefix);

                        if (dcDx.Count == 1)
                        {
                            var kv = dcDx.FirstOrDefault();
                            q.DXCC = kv.Key;
                        }
                    }
                    #endregion

                    _blPreview.Add(q);
                }
            }

            if (lsErr.Count != 0)
            {
                string sErr = string.Join("\n", lsErr);
                MessageBox.Show("エラーがありました。\n\n" + sErr, "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            if (iDc != 0)
            {
                MessageBox.Show("重複件数: " + iDc.ToString(), "重複がありました", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
コード例 #3
0
ファイル: frmInportLogcs.cs プロジェクト: JG2HNC/OpenLog
        private void cmdSetInCSV_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if (Directory.Exists(txtSetInCSV.Text))
            {
                ofd.InitialDirectory = txtSetInCSV.Text;
            }
            ofd.Filter = "Logcs CSV file(*.csv)|*.csv|All files(*.*)|*.*";
            if (ofd.ShowDialog() != DialogResult.OK)
            {
                return;
            }
            txtSetInCSV.Text = ofd.FileName;

            List <string> lsErr = new List <string>();

            dgvInport.SuspendLayout();
            using (StreamReader sr = new StreamReader(txtSetInCSV.Text, Encoding.GetEncoding(932))) {
                int iL = 0;
                while (-1 < sr.Peek())
                {
                    iL++;
                    string[] sL = sr.ReadLine().Split(',');

                    List <string> lsL = new List <string>();
                    #region "カンマ区切り対策"
                    lsL.AddRange(sL);

                    // 項目分繰り返す
                    for (int i = 0; i < lsL.Count; ++i)
                    {
                        //先頭のスペースを除去して、ダブルクォーテーションが入っていないか判定する
                        if (lsL[i] != string.Empty && lsL[i].TrimStart()[0] == '"')
                        {
                            // もう一回ダブルクォーテーションが出てくるまで要素を結合
                            while (lsL[i].TrimEnd()[lsL[i].TrimEnd().Length - 1] != '"')
                            {
                                lsL[i] = lsL[i] + "," + lsL[i + 1];

                                //結合したら要素を削除する
                                lsL.RemoveAt(i + 1);
                            }
                        }
                    }
                    for (int i = 0; i < lsL.Count; i++)
                    {
                        lsL[i] = lsL[i].Trim().Replace("\"", "");
                    }
                    #endregion

                    cQSO q = new cQSO();

                    int    iV;
                    double dV;
                    q.Prefix1  = lsL[0];
                    q.Call     = lsL[1];
                    q.Prefix2  = lsL[2];
                    q.CityCode = lsL[3];
                    q.QTH      = lsL[4];
                    q.QTH_h    = lsL[6];
                    q.QRA      = lsL[7];
                    if (int.TryParse(lsL[8], out iV))
                    {
                        q.RS_His = iV;
                    }
                    else
                    {
                        lsErr.Add(string.Format("{0} RS_His={1}", iL, lsL[8]));
                    }
                    if (int.TryParse(lsL[9], out iV))
                    {
                        q.RS_My = iV;
                    }
                    else
                    {
                        lsErr.Add(string.Format("{0} RS_My={1}", iL, lsL[9]));
                    }
                    if (double.TryParse(lsL[10], out dV))
                    {
                        q.SetFreq(dV, _dcBand);
                    }
                    q.Mode = lsL[11];
                    if (double.TryParse(lsL[12], out dV))
                    {
                        q.Pwr_My = dV;
                    }
                    else
                    {
                        q.Pwr_My = -1d;
                    }

                    DateTime dtS;
                    if (lsL[16] == "J")
                    {
                        q.TimeZone = 9;
                    }
                    else if (lsL[16] == "U")
                    {
                        q.TimeZone = 0;
                    }
                    else
                    {
                        lsErr.Add(string.Format("{0} TimeZone={1}", iL, lsL[16]));
                    }
                    if (!DateTime.TryParse(string.Format("{0} {1}", lsL[13].Replace("-", "/"), lsL[14]), out dtS))
                    {
                        lsErr.Add(string.Format("{0} Day={1} Time={2}", iL, lsL[13], lsL[14]));
                    }
                    else
                    {
                        q.Date_S = dtS.AddHours(-q.TimeZone).Ticks;
                    }

                    q.QTH_My    = lsL[21];
                    q.Prefix_My = lsL[22];
                    if (Regex.IsMatch(lsL[23], @"^\d{4}"))
                    {
                        q.DXCC = "JA"; q.CityCode_My = lsL[23];
                    }
                    else
                    {
                        q.DXCC = lsL[23];
                    }
                    q.GL_My  = lsL[24];
                    q.Rig_My = lsL[25];
                    q.Ant_My = lsL[26];

                    #region "カード交換方式"
                    q.QSLMethod = (int)cQSO.enQSLMethod.N;
                    if (lsL[29] == "J")
                    {
                        q.QSLMethod = (int)cQSO.enQSLMethod.B;
                    }
                    else if (lsL[29] == "D")
                    {
                        q.QSLMethod = (int)cQSO.enQSLMethod.D;
                    }
                    else if (lsL[29] == "M")
                    {
                        q.QSLMethod = (int)cQSO.enQSLMethod.M;
                    }
                    #endregion
                    if (lsL[30] == "*")
                    {
                        q.Card_Send = true;
                    }
                    else
                    {
                        q.Card_Send = false;
                    }
                    if (lsL[31] == "*")
                    {
                        q.Card_Resv = true;
                    }
                    else
                    {
                        q.Card_Resv = false;
                    }

                    _blPreview.Add(q);
                }
                dgvInport.ResumeLayout();
            }
            MessageBox.Show("プレビューされた交信リストを確認のうえ、問題が無ければ登録を押してください。", "確認", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }