質問編集履歴

1 誤字

NaokiPooh

NaokiPooh score 21

2016/11/07 14:30  投稿

ファイル読み込み方法
お世話になっております。
C++を学習中の学生です。
現在下記のような住所録アプリケーションを作成中です。
![イメージ説明](734e66e3a575148009ddaad3252b0a20.png)
写真右下にある読み込みボタンを押下し
![イメージ説明](dafa9b97d1bd2cff4590317e2a6ebd3a.png)
上記のテキストファイルの中身をアプリ起動時にリストコントロールに読み込ませたいのですが、どう記述すればいいのでしょうか。
上記のテキストファイルの中身をリストコントロールに読み込ませたいのですが、どう記述すればいいのでしょうか。
ご教授いただけると幸いです。
よろしくお願いいたします。
以下ソース
```C++
//------------------------------------------------------------------------------
// ダイヤログ初期化処理
//------------------------------------------------------------------------------
BOOL CZyuSyoDlg::OnInitDialog()
{
   CDialogEx::OnInitDialog();
   // "バージョン情報..." メニューをシステム メニューに追加します。
   // IDM_ABOUTBOX は、システム コマンドの範囲内になければなりません。
   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
   ASSERT(IDM_ABOUTBOX < 0xF000);
   CMenu* pSysMenu = GetSystemMenu(FALSE);
   if (pSysMenu != NULL)
   {
       BOOL bNameValid;
       CString strAboutMenu;
       bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
       ASSERT(bNameValid);
       if (!strAboutMenu.IsEmpty())
       {
           pSysMenu->AppendMenu(MF_SEPARATOR);
           pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
       }
   }
   // このダイアログのアイコンを設定します。アプリケーションのメイン ウィンドウがダイアログでない場合、
   // Framework は、この設定を自動的に行います。
   SetIcon(m_hIcon, TRUE);           // 大きいアイコンの設定
   SetIcon(m_hIcon, FALSE);       // 小さいアイコンの設定
   // TODO: 初期化をここに追加します。
   make_queue();
   m_List.InsertColumn(0, "No." , LVCFMT_CENTER, 35);    //No列を追加
   m_List.InsertColumn(1, "性別", LVCFMT_CENTER, 45);    //性別列を追加
   m_List.InsertColumn(2, "名前", LVCFMT_CENTER, 70);    //名前列を追加
   m_List.InsertColumn(3, "年齢", LVCFMT_CENTER, 35);    //年齢列を追加
   m_List.InsertColumn(4, "住所", LVCFMT_LEFT,  200);   //住所列を追加
   CEdit* pEditName = (CEdit *)GetDlgItem( IDC_NAME_I );
   CEdit* pEditHome = (CEdit *)GetDlgItem( IDC_HOME_I );
   CEdit* pEditTosi = (CEdit *)GetDlgItem( IDC_TOSI_I );
   //エディットボックスに入力できる文字数を設定する
   pEditName->LimitText(14);
   pEditHome->LimitText(70);
   pEditTosi->LimitText(3);
   return TRUE; // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
//------------------------------------------------------------------------------
// キューの生成
//------------------------------------------------------------------------------
void CZyuSyoDlg::make_queue()
{
   struct Queue *que;
   for( int count=0; count<256; count++ )
   {
       //キューの生成
      if( count == 0 )
      {
          que = (struct Queue*)malloc(sizeof(struct Queue));       // メモリの確保
          m_pQueue = que;                                          // 先頭をメンバ変数
      }
      else
      {
          que->next = (struct Queue*)malloc(sizeof(struct Queue)); // ポインタを繋ぐ
          que       = (struct Queue*)que->next;                   // nextの値をqueに
      }
      que->next = NULL;                                            // nextにNULL
      memset(que, 0, sizeof(struct Queue));                        // クリア
   }
}
//------------------------------------------------------------------------------
// キューの解放
//------------------------------------------------------------------------------
void CZyuSyoDlg::QueClose()
{
   struct Queue *que;
   que = m_pQueue;
   while( 1 )
   {
       m_pQueue = (struct Queue*)que->next;
       free( que );
       que = m_pQueue;
       if( que == NULL )
       {
           break;
       }
   }
}
//------------------------------------------------------------------------------
// キューの切り離し
//------------------------------------------------------------------------------
struct Queue* CZyuSyoDlg::QueCut()
{
   struct Queue *head;
   // キューを切り離す(先頭)
   if( m_pQueue != NULL )
   {
       head = m_pQueue;
       m_pQueue = (struct Queue*)head->next;                 //次の先頭
   }
   return( head );
}
//------------------------------------------------------------------------------
// データキューを繋ぐ
//------------------------------------------------------------------------------
void CZyuSyoDlg::QueData(struct Queue *head)
{
   if( m_pQueue2 == NULL )
   {
       m_pQueue2 = head;
   }
   else
   {
       struct Queue *data;
       data = m_pQueue2;
       while( 1 )
       {
           if( data->next == NULL )
           {
               data->next = head;
               break;
           }
           data = (struct Queue*)data->next;
       }
   }
   head->next = NULL;
}
//------------------------------------------------------------------------------
// 送信ボタン押下処理
//------------------------------------------------------------------------------
void CZyuSyoDlg::OnBnClickedGo()
{
   struct Queue *head;
   head = QueCut();
   CStdioFile ZyuSyoFile;
   //テキストファイルを開く
   ZyuSyoFile.Open("ZyuSyoData.txt",CFile::modeReadWrite |
       CFile::shareDenyNone | CFile::modeCreate | CFile::modeNoTruncate);
   ZyuSyoFile.SeekToEnd();
   //------------//
   //名前部の取得//
   //------------//
   CString strName;
   ((CEdit*)GetDlgItem(IDC_NAME_I))->GetWindowText( strName );
   //CString → charへの変換
   strcpy_s( head->data.name, strName );
   //------------//
   //住所部の取得//
   //------------//
   CString strHome;
   ((CEdit*)GetDlgItem(IDC_HOME_I))->GetWindowText( strHome );
   strcpy_s( head->data.home, strHome );
   //------------//
   //年齢部の所得//
   //------------//
   CString strTosi;
   ((CEdit*)GetDlgItem(IDC_TOSI_I))->GetWindowText( strTosi );
   strcpy_s( head->data.tosi, strTosi );
   //------------//
   //Noの所得   //
   //------------//
   CString strNo;
   m_Combo.GetLBText(m_Combo.GetCurSel(),strNo);
   strcpy_s( head->data.no, strNo );
   //----------------//
   //性別の取得(男性)//
   //----------------//
   CString strType;
   if( ( (CButton*)GetDlgItem(IDC_RADIO_B) )->GetCheck() == BST_CHECKED )
   {
       strType = ("男性");
       strcpy_s( head->data.type, strType );
   }
   //----------------//
   //性別の判定(女性)//
   //----------------//
   if( ( (CButton*)GetDlgItem(IDC_RADIO_G) )->GetCheck() == BST_CHECKED )
   {
       strType = ("女性");
       strcpy_s( head->data.type, strType );
   }
   //----------------//
   //リストへ追加   //
   //----------------//
   // リストコントロール 行の追加
   int count = m_List.GetItemCount();
   m_List.InsertItem(count, strNo);                             //No行を追加
   m_List.SetItem(count, 1, LVIF_TEXT, strType, 0, 0, 0, 0);     //性別行を追加
   m_List.SetItem(count, 2, LVIF_TEXT, strName, 0, 0, 0, 0);    //名前列を追加
   m_List.SetItem(count, 3, LVIF_TEXT, strTosi, 0, 0, 0, 0);    //年齢行を追加
   m_List.SetItem(count, 4, LVIF_TEXT, strHome, 0, 0, 0, 0);    //住所行
//   CDialog::OnOK();
   //----------------//
   //ファイル入出力 //
   //----------------//
   //テキストファイルに書き込む
   ZyuSyoFile.WriteString( "No:"  + strNo  + "|" );
   ZyuSyoFile.WriteString( "性別:" + strType + "|" );
   ZyuSyoFile.WriteString( "名前:" + strName + "|" );
   ZyuSyoFile.WriteString( "年齢:" + strTosi + "|" );
   ZyuSyoFile.WriteString( "住所:" + strHome + "\n" );
   //テキストファイルを閉じる
   ZyuSyoFile.Close();
   QueData(head);
}
//------------------------------------------------------------------------------
// クリアボタン押下処理
//------------------------------------------------------------------------------
void CZyuSyoDlg::OnBnClickedClear()
{
   //エディットボックス内をクリアする
   CEdit* pEdit = (CEdit *)GetDlgItem( IDC_NAME_I );
   CEdit* pEdit1 = (CEdit *)GetDlgItem( IDC_HOME_I );
   CEdit* pEdit2 = (CEdit *)GetDlgItem( IDC_TOSI_I );
   pEdit ->SetWindowText("");
   pEdit1->SetWindowText("");
   pEdit2->SetWindowText("");
}
```
  • C++

    8565 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • MFC

    188 questions

    MFC (Microsoft Fouondation Class)とは、MicrosoftがVC++用に開発したWindows用アプリケーションのフレームワークです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る