データを収納する方法について

このQ&Aのポイント
  • List<T> クラスでデータを入れても同じになる方法について教えてください。
  • Wireless_unit_sigクラスを使用してデータを収納しようとしていますが、エラーが出ています。どのようにすればデータを入れることができますか?
  • 作成したクラスはWireless_unit_sigであり、データを格納するためのプロパティを持っています。教えていただけると助かります。
回答を見る
  • ベストアンサー

List<T> クラスでデータを入れても同じになる

Wireless_unit_sigクラスというのにデータを入れていきたいのですが、読み込んだファイルの中にデータが20000データぐらいあるため、Listジェネリッククラスというので宣言してみました。 List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); この時に、 Wireless_ID_str02[i]->day_name = split[0]; Wireless_ID_str02[i]->month = split[1]; Wireless_ID_str02[i]->day = split[2]; Wireless_ID_str02[i]->time = split[3]; Wireless_ID_str02[i]->year = split[4]; Wireless_ID_str02[i]->cmd1 = split[5]; Wireless_ID_str02[i]->cmd2 = split[6]; Wireless_ID_str02[i]->ID = split[7]; Wireless_ID_str02[i]->sig1 = split[8]; Wireless_ID_str02[i]->sig2 = split[9]; Wireless_ID_str02[i]->batt_mount = split[10]; Wireless_ID_str02[i]->m_rssi = split[11]; Wireless_ID_str02[i]->s_rssi = split[12]; Wireless_ID_str02[i]->version = split[13]; このようにデータを入れていこうとしたのですが、エラーが出るのですが、データを収納していく方法というのはどのようにしていけばよいのでしょうか? 作成したクラスは次のようなものです。 どうぞ、教えて頂きますよう、お願い致します。 ref class Wireless_unit_sig { private: public: String^ day_name; String^ month; String^ day; String^ time; String^ year; String^ cmd1; String^ cmd2; String^ ID; String^ sig1; String^ sig2; String^ batt_mount; String^ m_rssi; String^ s_rssi; String^ version; String^ s_rssi_fixed; public: Wireless_unit_sig() { day_name = "test"; month = "test"; day = "test"; time = "test"; year = "test"; cmd1 = "test"; cmd2 = "test"; ID = "test"; sig1 = "test"; sig2 = "test"; batt_mount = "test"; m_rssi = "test"; s_rssi = "test"; version = "test"; s_rssi_fixed = "test"; } }; }

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1620/5655)
回答No.1

>このようにデータを入れていこうとしたのですが、エラーが出るのですが、データを収納していく方法というのはどのようにしていけばよいのでしょうか? エラーが出るなら出るで、そのエラーメッセージをそっくりそのまま書きましょう。 ただたんにエラーといわれたって、あなた以外には何の事かさっぱりわかりません。 Wireless_ID_str02.Add(gcnew Wireless_unit_sig()); を忘れてるだけのような気もしますが。 >List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); 何を意味するのか、ちゃんと理解してますか?

diy_sunny
質問者

お礼

Listジェネリッククラスというのを http://msdn.microsoft.com/ja-jp/library/6sh2ey19(v=vs.80).aspx このサイトをみて真似て見ました。 List<String^>^ dinosaurs = gcnew List<String^>(); これを >List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); このようにしているのですが、このような使い方は20000くらいあるデータをそれぞれのクラスに入れていくようなやり方というのはできないのでしょうか? string型などでしか使う方法しかないのでしょうか?

その他の回答 (3)

  • wormhole
  • ベストアンサー率28% (1620/5655)
回答No.4

>このようにしているのですが、このような使い方は20000くらいあるデータをそれぞれのクラスに入れていくようなやり方というのはできないのでしょうか? できます。 あなたが >List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); の意味を理解してないだけです。 真似ること自体には何ら問題はないですけど意味を理解していかないと同じ事を繰り返しますよ。 既に繰り返されてるようですが・・・ #1 に問題と思われる点も書いてるのに、なぜ無視するかなぁ

diy_sunny
質問者

お礼

回答頂きありがとうございます。いろいろとお世話になっております。 すみません。なんか頭がこんがらがってきたので・・・  一度仕切り直しさせてください・・・w

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

できました!じゃなかったんですか? http://okwave.jp/qa/q7443919.html #1でも言われてますが、Wireless_unit_sigのオブジェクトを作ってAdd、をしてないから失敗してんだとは思いますが。

diy_sunny
質問者

お礼

すみません。なんか頭がこんがらがってきたので・・・  一度仕切り直しさせてください・・・w 後で気づいたんですが、 Wireless_ID_str02->Add(Wireless_unit_sig_temp); このように入れていった時にWireless_ID_str02[1]~Wireless_ID_str02[20000]の中に入っているデータが全部同じデータ(しかもテキストファイルの最後の行のデータ)が入っているというのに気づきまして・・・

回答No.2

> エラーが出るのですが、 いやだから、どこで/どんなエラーが出るんだ、と。

diy_sunny
質問者

お礼

すみません。なんか頭がこんがらがってきたので・・・  一度仕切り直しさせてください・・・w

関連するQ&A

  • Listジェネリッククラスのやり方がわからない。

    リストジェネリッククラスを使って、テキストファイルから取得したたくさんのデータ(数がわからない)を整理しながらWireless_ID_str02というデータの中に整理しながら入れていきたいんです。 下のプログラムでビルドはできるのですが、デバッグで見ていくと、i=20000ぐらいまで行くのですが、すべてのデータが全く同じデータで、決まって、テキストファイル内の一番最後の行のデータになってしまってました。 どうして、全く同じデータが収納されてしまうのか教えて頂けないでしょうか? どうぞ、よろしくお願いします。 List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>(); Wireless_unit_sig^ Wireless_unit_sig_temp = gcnew Wireless_unit_sig(); i=0; while(( data = reader->ReadLine()) != nullptr ) { // カンマ区切りで分解 array<String^>^ split = data->Split( separator ); #if 1 Wireless_unit_sig_temp->day_name = split[0]; Wireless_unit_sig_temp->month = split[1]; Wireless_unit_sig_temp->day = split[2]; Wireless_unit_sig_temp->time = split[3]; Wireless_unit_sig_temp->year = split[4]; Wireless_unit_sig_temp->cmd1 = split[5]; Wireless_unit_sig_temp->cmd2 = split[6]; Wireless_unit_sig_temp->ID = split[7]; Wireless_unit_sig_temp->sig1 = split[8]; Wireless_unit_sig_temp->sig2 = split[9]; Wireless_unit_sig_temp->batt_mount = split[10]; Wireless_unit_sig_temp->m_rssi = split[11]; Wireless_unit_sig_temp->s_rssi = split[12]; Wireless_unit_sig_temp->version = split[13]; #endif Wireless_ID_str02->Add(Wireless_unit_sig_temp); i++; }

  • unsighed charの数値をstringに

    for(k=0;k < 6;k++) { Wireless_ID_str02[i]->Wireless_ID_str += Wireless_unit[i].wireless_id[k].ToString("X2"); } このようなブログラムを使ってWireless_unit[i].wireless_id[k] unsighed charの次の数値 Wireless_unit[i].wireless_id[0] = 1; Wireless_unit[i].wireless_id[1] = 1; Wireless_unit[i].wireless_id[2] = 1; Wireless_unit[i].wireless_id[3] = 1; Wireless_unit[i].wireless_id[4] = 1; Wireless_unit[i].wireless_id[5] = 1; これを stringの Wireless_ID_str02[i]->Wireless_ID_str この中に”111111” というように代入していきたいのですが、 実際に入ってきたのは Wireless_ID_str02[i]->Wireless_ID_str = ”test313131313131” となりました。 Wireless_ID_str02[i]->Wireless_ID_str = ”111111” という風に代入する方法はありませんでしょうか。 ”Wireless_unit”というのは Wireless_unit Wireless_unit; というので宣言しています。 struct Wireless_unit { unsigned char wireless_id[6]; unsigned char use; unsigned char tampa_sig_m1; unsigned char tampa_sig_m2; unsigned char tampa_sig_m34_set; unsigned char tampa_sig_m34_reset; unsigned char battlow_sig_m1; unsigned char battlow_sig_m2; unsigned char battlow_sig_m34_set; unsigned char battlow_sig_m34_reset; unsigned char sch_sig_m1; unsigned char sch_sig_m2; unsigned char sch_sig_m34_set; unsigned char sch_sig_m34_reset; unsigned char ch1_use; unsigned char ch1_emg_sig_m1; unsigned char ch1_emg_sig_m2; unsigned char ch1_emg_sig_m34_set; unsigned char ch1_emg_sig_m34_reset; unsigned char ch2_use; unsigned char ch2_emg_sig_m1; unsigned char ch2_emg_sig_m2; unsigned char ch2_emg_sig_m34_set; unsigned char ch2_emg_sig_m34_reset; }; また、 ”Wireless_ID_str02”は array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); このように宣言しています。 namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Wireless_unit_str { private: public: String^ Wireless_ID_str; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Wireless_unit_str() { Wireless_ID_str = "test"; } }; }

  • クラスを配列で宣言してデバッグ中にエラーが出る。

    今、"Wireless_unit_str"というクラスをWireless_ID_str02 で宣言してこれを32個分宣言して Wireless_ID_str02[i]->Wireless_ID_str = "test"; 32個分のWireless_ID_str の中に全部”test” と代入してみようとしたのですが、デバッグ最中にその文を実行しようとすると、つぎのようなエラーが出ます。 (エラー内容) ”'System.NullReferenceException' のハンドルされていない例外が HomeBank.exe で発生しました。 追加情報: オブジェクト参照がオブジェクト インスタンスに設定されていません。” 解決する方法はないでしょうか? array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); for(i=0; i < 32;i++) { Wireless_ID_str02[i]->Wireless_ID_str = "test"; } 作成したクラス”Wireless_unit_str”の内容 namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Wireless_unit_str { private: DateTime date; // 日付 String^ name; // 品名 String^ kind; // 分類 int money; // 金額 public: String^ Wireless_ID_str; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Wireless_unit_str() { Wireless_ID_str = "test"; } }; }

  • String文字列を16進数のint型に変換

    String^ test = Wireless_ID_str02[i]->s_rssi; このtestには"1c"という文字列が入っているのですが、この文字をint型の int rssi_dec = ****** この中に入れたいのですが、方法はないでしょうか? ちなみに、 rssi_dec = strtol(test, &endptr, 16); こんなことをやってみたのですが、こんなエラーがでました。 error C2664: 'strtol' : 1 番目の引数を 'System::String ^' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) 1> 使用可能なユーザー定義された変換演算子がない、または 1> マネージ型をアンマネージ型に変換できません。 どうぞ、よろしくお願い致します。

  • デバッグ時に中断してしまう。

    String^ test = Wireless_ID_str02[i]->s_rssi; このtestの中には”1c”という文字列が入っています。この文字列を数値としてしようしたいと思っています。 int rssi_dec = Convert::ToInt32(test, 16); このように数値に変換しようとしたのですが、ビルドではエラーはなかったのですが、デバッグ時にこのプログラムを通過すると中断してしまいます。 次のようなエラー内容がでます。 'System.FormatException' のハンドルされていない例外が mscorlib.dll で発生しました。 追加情報: 認識可能な数値が見つかりませんでした。 解決方法などありませんでしょうか? どうぞ、よろしくお願い致します。

  • PythonでXMLをcsvに変換したいです。

    pythonで、特定のファルダにXMLファイルが追加されるたびにCSVファイルを新しく作成してそこに書き込んでいくという事がしたいのですが、なかなかうまくいかず困っています。 下記のようなXMLなのですが、どうしたら良いのでしょうか? <?xml version="1.0" encoding="UTF-8"?> <file format="current_readings" version="1.25" name="test.xml" author="verxxx x.xx"> <base> <serial>563C10SS</serial> <model>XXX-XXXX</model> <name>ABC1</name> <time_diff>540</time_diff> <std_bias>0</std_bias> <dst_bias>0</dst_bias> <time_zone>(UTC+09:00) 大阪、札幌、東京</time_zone> <lan> <input>0</input> <output>0</output> </lan> </base> <group> <num>0</num> <name>Group1</name> <remote> <serial>AAAAAAA1</serial> <model>XXX-NNN</model> <num>1</num> <name>Unit01</name> <rssi repeater="0">5</rssi> <ch> <num>1</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008469</unix_time> <time_str>2018-09-27 09:34:29</time_str> <value valid="true">25.0</value> <unit>C</unit> <batt>5</batt> </current> <record> <type>13</type> <unix_time>1538007269</unix_time> <data_id>884</data_id> <interval>300</interval> <count>5</count> <data> 2a0f0a605f560== </data> </record> </ch> <ch> <num>2</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008469</unix_time> <time_str>2018-09-27 09:34:29</time_str> <value valid="true">61</value> <unit>%</unit> <batt>5</batt> </current> <record> <type>208</type> <unix_time>1538007269</unix_time> <data_id>884</data_id> <interval>300</interval> <count>5</count> <data> das54f0565== </data> </record> </ch> </remote> <remote> <serial>BBBBBBB1</serial> <model>XXX-NNN</model> <num>2</num> <name>Unit02</name> <rssi repeater="0">3</rssi> <ch> <num>1</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008192</unix_time> <time_str>2018-09-27 09:29:52</time_str> <value valid="true">26.0</value> <unit>C</unit> <batt>5</batt> </current> <record> <type>13</type> <unix_time>1538006992</unix_time> <data_id>883</data_id> <interval>300</interval> <count>5</count> <data> 54829652hughA== </data> </record> </ch> <ch> <num>2</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008192</unix_time> <time_str>2018-09-27 09:29:52</time_str> <value valid="true">58</value> <unit>%</unit> <batt>5</batt> </current> <record> <type>208</type> <unix_time>1538006992</unix_time> <data_id>883</data_id> <interval>300</interval> <count>5</count> <data> 481762opjuhgft== </data> </record> </ch> </remote> <remote> <serial>AAABB2</serial> <model>XXX-NNN</model> <num>3</num> <name>Unit03</name> <rssi repeater="0">3</rssi> <ch> <num>1</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008214</unix_time> <time_str>2018-09-27 09:30:14</time_str> <value valid="true">26.5</value> <unit>C</unit> <batt>5</batt> </current> <record> <type>13</type> <unix_time>1538007014</unix_time> <data_id>883</data_id> <interval>300</interval> <count>5</count> <data> 7wTvBPEE8gTxBA== </data> </record> </ch> <ch> <num>2</num> <scale_expr></scale_expr> <name></name> <current> <unix_time>1538008214</unix_time> <time_str>2018-09-27 09:30:14</time_str> <value valid="true">55</value> <unit>%</unit> <batt>5</batt> </current> <record> <type>208</type> <unix_time>1538007014</unix_time> <data_id>883</data_id> <interval>300</interval> <count>5</count> <data> f6a72f5aaa== </data> </record> </ch> </remote> </group> </file>

  • stringのデータではswitch文は使えない?

    String^ id_data_str というのに、"313131313131"というデータを入れて、下のGet_idというクラスを作って、”111111”というデータをとれるようにしたいと思ったのですが、 Get_id^ Get_id; Get_id_get(id_data_str); switch文は整数型出ないとダメだというエラーが出てきたのですが、このようなクラスのプログラムはダメなんでしょうか?何か解決方法などいただけませんでしょうか? namespace HomeBank { using namespace System; using namespace System::Collections::Generic; /** * 明細データクラス */ ref class Get_id { private: public: String^ ID_str; String^ ID_str_complete; //array<String^>^ Wireless_ID_str = gcnew array<String^>(32); public: Get_id() { ID_str = "test"; ID_str_complete = "test"; } void Get_id_get(String^ ID_str) { int i; String^ test_str; String^ str_data; Get_id(); ID_str_complete = ID_str; for(i=0;i<6;i++) { test_str = ID_str->Substring( i*2, 2 ); switch(test_str) { case "30": str_data = "0"; break; case "31": str_data = "1"; break; case "32": str_data = "2"; break; case "33": str_data = "3"; break; case "34": str_data = "4"; break; case "35": str_data = "5"; break; case "36": str_data = "6"; break; case "37": str_data = "7"; break; case "38": str_data = "8"; break; case "39": str_data = "9"; break; case "61": str_data = "A"; break; case "62": str_data = "B"; break; case "63": str_data = "C"; break; case "64": str_data = "D"; break; case "65": str_data = "E"; break; case "66": str_data = "F"; break; default; str_data = "_"; break; } if(i==0) ID_str_complete = str_data; else ID_str_complete += str_data; } } }; }

  • StreamReaderで読み込んだテキストの行数

    テキストファイルを読み込んで行数文のクラスの配列を宣言したいと思っているのですが、 Wireless_unit Wireless_unit[32]; array<Wireless_unit_str^>^ Wireless_ID_str02 = gcnew array<Wireless_unit_str^>(32); 行数がわからないので、StreamReader^で宣言したreadで知る方法はありませんでしょうか? 下のような関数でファイルを読み込んでいます。 private: bool LoadCsvFile02( String^ path ) { StreamReader^ reader = gcnew StreamReader( path, System::Text::Encoding::GetEncoding("shift-jis")); ----(中略)------------------------------------------------

  • ”_bstr_t”の使い方

    今structというのを使って struct Wireless_unit { unsigned char wireless_id[6]; }; こんな構造体を作成しました。 このunsigned char wireless_id[6];  この数値を後で文字列に変換してこの構造体の中に保存して起きたいと思っています。 _bstr_t というのを使ってみたのですが、 struct Wireless_unit { unsigned char wireless_id[6];     _bstr_t wireless_id_str; }; 次のようなエラーが出るのですが、どのように解決すればよいのでしょうか? 1>------ ビルド開始: プロジェクト: HomeBank, 構成: Debug Win32 ------ 1> HomeBank.cpp 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C2146: 構文エラー : ';' が、識別子 'wireless_id_str' の前に必要です。 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\test_class.h(156): error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません 1>c:\mywork\new_wireless_module\open\cc1101driver\trunk\vc_test\setting_check\homebank\Form1.h(545): warning C4244: '引数' : '__int64' から 'int' への変換です。データが失われる可能性があります。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

  • PHP4から5への移行に伴うFatal error:Cannot use string offset as an array というエラーについて、

    php4から5へ移行した際以下のエラーがでてしまいました、以前はうまく稼動したんですが・・・。どうしても原因がわからないのでどなたか教えていただけたら幸いです。 Fatal error: Cannot use string offset as an array in /home/.sites/106/site3/web/make_rss/lib/Init_class.php on line 344 ------------------------------------------------------ 332 $ex = "0"; 333 for($i=0; $i<$count; $i++){ 334 if($string[$i][4] == "1" or $string[$i][4] == "2"){ 335 $str[$ex][0] = $string[$i][0]; 336 $str[$ex][1] = $string[$i][1]; 337 $str[$ex][2] = $string[$i][2]; 338 $str[$ex][3] = $string[$i][3]; 339 $str[$ex][4] = $string[$i][4]; 340 $str[$ex][5] = $string[$i][5]; 341 $ex++; 342 } 343 } ---------------------------------------------------- ちなみに変数$stringは、print_r($string);で以下のように表示されます↓ Array ( [0] => Array ( [0] => 2006年10月31日PM05:59 [1] => test [2] => test [3] => test [4] => 1 [5] => 1 ) ) ---------------------------------------------------- 以上です。どうかお願いいたします。

    • ベストアンサー
    • PHP

専門家に質問してみよう