今、Visual C++2008 Express Editionを使用して、ファイルダイアログを使用して用意した配列にファイル内容を記憶させる簡単なプログラムを作成しています。
プログラムの流れは以下のとおりです。
1.ボタンをクリックする。
2.ファイルダイアログを表示する。
3.選択されたファイル名の内容を用意した配列に記憶する。
1,2はできたのですが、選択されたファイル(主にCSVファイル)の内容を配列に記憶させる方法がわかりません。
どうしたらよいのでしょうか。教えてください。
以下にボタンを押したときの動作を掲載しますのでお願いいたします。
=========================
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//ファイル内容を記憶させる配列
double x[1024], y[1024];
//ファイルを読み込むときのループインデックス
int i=0;
//ファイル名を格納する変数
String^ fname;
ファイルを開くためのダイアログを用意
OpenFileDialog^ dlg = gcnew OpenFileDialog();
//フィルターの内容を設定dlg->Filter::set("CSVファイル(*.csv)|*.csv");
//ダイアログタイトルの設定
dlg->Title::set("開くファイルを選択してください。");
//ダイアログの表示
dlg->ShowDialog();
//ファイル名を取得して格納
fname=dlg->FileName;
/**********************************************
ここに上記の「fname」のファイルを読み込む処 理がくる
********************************/ }
No.1ベストアンサー
- 回答日時:
こんにちは。
System::IO::StreamReaderで処理されては如何でしょう。「System::IO::StreamReader」
http://msdn.microsoft.com/ja-jp/library/system.i …
以下は「,」で区切って配列にしまっていきます。
なるべくCLIのarray<T, d>を使用して、拡張割り当てをさせるようにした方が、何かと安全で便利です。参考程度に。
array<System::String^>^ ArrayFromFile(System::String^ sFileName)
{
using namespace System::IO;
//配列のインスタンスだけは割り当てる
array<System::String^>^ arrStr = gcnew array<System::String^>(0);
try
{
StreamReader^ sr = gcnew StreamReader(sFileName);
while(!sr->EndOfStream)
{
//ライン読み込み
System::String^ sLine = sr->ReadLine();
int count = 0;
for each(System::Char wc in sLine)
{
//一致しないのでカウンタを回す
if(wc != ',')
{
++count;
continue;
}
//一致したので切り抜いて配列に入れる
//配列を+1拡張
array<System::String^>::Resize(arrStr, arrStr->Length + 1);
//,までの文字を切り抜いて配列に入れる(sLineは影響を受けないので改めて消す必要がある)
arrStr->SetValue(sLine->Substring(0, count), arrStr->Length - 1);
//,も含めた文字の分だけラインから消す
sLine = sLine->Remove(0, count + 1);
count = 0;
}
}
}
catch (Exception^ e)
{
//しくじった
}
return arrStr;
}
//使用する時
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
//ファイル内容を記憶させる配列
//double x[1024], y[1024];関数化したので此れはいらない
//ファイルを読み込むときのループインデックス
//int i=0;関数化したので此れはいらない
//ファイル名を格納する変数
String^ fname;
ファイルを開くためのダイアログを用意
OpenFileDialog^ dlg = gcnew OpenFileDialog();
/フィルターの内容を設定 dlg->Filter::set("CSVファイル(*.csv)|*.csv");
//ダイアログタイトルの設定
dlg->Title::set("開くファイルを選択してください。");
//ダイアログの表示
dlg->ShowDialog();
//ファイル名を取得して格納
fname=dlg->FileName;
/**********************************************
ここに上記の「fname」のファイルを読み込む処理がくる
***********************************************/
//しくじると長さ0の配列が返ってくる
array<System::String^>^ arrStr = ArrayFromFile(fname);
//しくじった
if(arrStr->Length == 0)
{
//何かする
}
//成功したので、arrStrを使う
}
回答ありがとうございます。
StreamReaderを使ったら、あっさりできるようになりました。
アドバイスありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動かなくなってしまった古いVBAを動くようにしたい 8 2022/09/20 13:57
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) エクセルVBAについて 8 2022/07/13 22:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/06 17:46
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイル内の(&H0A)を(&H0D0A)...
-
配列操作について
-
ファイル入力のデータを構造体...
-
バイト型のデータを16進表記で...
-
VB4.0の「LSet」と同等の機能を...
-
CSVファイルによる検索の高速化
-
グレースケール画像の画素値を得る
-
並び替え
-
ファイルのアクセス回数について
-
エクセルのプロパティーでセキ...
-
バッチファイル 二つ上のディ...
-
エクセルで複数のコメントのサ...
-
Windows10でコマンドプロンプト...
-
バッチファイル 別ファイルにリ...
-
エクセルvbaでdocuworksprinter...
-
VBAでパワーシェルを実行したい...
-
エクセル UserForm 呼び出しで...
-
ExcelブックをGoogleスプレッド...
-
初心者powershellのPS1ファイル...
-
csvファイル 項目数取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バイト型のデータを16進表記で...
-
VBAでテキストファイルを複数開...
-
RGBのバイナリデータをCImageに...
-
VBAでテキストファイルの改行を...
-
DXFファイルをVBで取り込み、図...
-
[VBS] 16進数でバイナリファイ...
-
ファイル内の(&H0A)を(&H0D0A)...
-
ファイルをメモリに出力する方法
-
テキストファイルを後ろから読...
-
Cで2次元配列にCSVファイルを...
-
ファイル入力のデータを構造体...
-
Excel VBAで画像解析
-
VBScriptの配列は、要素数を指...
-
ファイルからビット単位での読...
-
fread関数の使い方がわかりませ...
-
awk getlineをもう一度ファイル...
-
バイナリファイルでOutOfMemory...
-
VBSにてCSV読み込みし比較
-
バイナリファイルの一部分をカ...
-
日本語混じりのファイルをラン...
おすすめ情報