掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CSVの読み書きについて (ID:70675)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
毎度お世話になります。 エクセルで作成したcsvの読み込み、書き出しの処理を作成しているのですが、わからないので質問させて頂きたく投稿しました。 あるuser.csvがあるとします。中身は ID NAME PASSWORD a 山田 a b 加藤 b c 田中 c d 石井 d みたいな感じです。 ゆくゆくはこれを読み込んでuser.xmlに書き込む、user.xmlをcsvとして書き出すということをやりたいのですが、一気にやると頭が混乱しますので、まずはcsvを読み込んでAfxMessageBoxで表示(とりあえず、一行単位で読み取ってそのまま表示)、次に読み込んだcsvをそのまま書き出すということをやろうと思っています。 で、現在ファイル選択ダイアログを作ってファイルパスを取得して、そこから中身を読み取る処理を作成中です。 以下ソースを張るので間違いやもっといい方法があればお教え願いたいのですが・・・・ //参照ボタン押下時 void CNoticeDlg::OnBnClickedCompare() { CString fileName; //ファイル名 CString fileTitle; //ファイルタイトル CString fileExt; //ファイルの拡張子 CString strBuf; POSITION pos = NULL; CFileDialog fileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY ); int err = 0; int lbErr = 0; // ファイル名リスト用メモリ確保 if(!err) { try { fileDlg.GetOFN().lpstrFile = strBuf.GetBuffer(MAX_PATH *100); fileDlg.GetOFN().nMaxFile = MAX_PATH *100; } catch(...) { err = 1; } } //ファイルパスを取得するには、CFileDialog::GetStartPosition()とCFileDialog::GetNextPathName()関数を使って一つずつ取得 if(!err) { if (fileDlg.DoModal() != IDOK) { err = 1; } } if(!err) { //GetStartPosition():リストの先頭にあるファイルのパス名の示す位置を取得 if((pos = fileDlg.GetStartPosition()) == NULL) { err = 1; } } if(!err) { m_filePath = fileDlg.GetPathName(); //GetPathName():ファイルのフルパスを取得 fileName = fileDlg.GetFileName(); //GetFileName():ファイル名を取得を取得 fileTitle = fileDlg.GetFileTitle(); //GetFileTitle():ファイルタイトルを取得 fileExt = fileDlg.GetFileExt(); //GetFileExt():ファイルの拡張子を取得 if(!err) { lbErr = m_lcFileList.InsertString(-1, m_filePath); if(lbErr == LB_ERR || lbErr == LB_ERRSPACE) { err = 1; } } AfxMessageBox( _T("ファイルのフルパス:") + m_filePath + _T("\r\nファイル名:") + fileName + _T("\r\nファイルタイトル:") + fileTitle + _T("\r\nファイル拡張子:") + fileExt ); //ダイアログ ボックスが初期化される:FALSE //データが取得される:TRUE UpdateData(FALSE); } //GetBufferしたのでReleaseBufferを行う。 strBuf.ReleaseBuffer(); return; } //表示ボタン押下時 void CNoticeDlg::OnBnClickedOutPutFileData() { CStdioFile stdFile; CString csText; CString csTempText; std::vector <CString> vcsTextList; if( !m_filePath.IsEmpty() ) { if( stdFile.Open( m_filePath , CFile::modeRead ) ) { while(stdFile.ReadString(csText)) { vcsTextList.push_back(csText); if(!csTempText.IsEmpty()) { csTempText += _T("\r\n"); } csTempText += csText; _tprintf(csText.GetBuffer()); _tprintf(_T("\n")); } stdFile.Close(); AfxMessageBox(csTempText); } else { AfxMessageBox( _T("ファイルを正常に開くことが出来ませんでした。") ); } } } ファイルパスから中身を読み取る部分がどうも間違えているような気がしてなりません。また、AfxMessageBoxで表示すると、日本語の部分が文字化け?みたいな感じでうまく表示されないです。 書き出し部分はこれを解決してから進みたいのですが、うまくいかず立ち往生です・・・・・・・。 どなたかアドバイス、または参考サイトなどを教えて頂けると助かります。 環境はvisual studio2005 VC++(MFC) vistaです。宜しくお願い致します。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.