リストジェネリッククラスを使って、テキストファイルから取得したたくさんのデータ(数がわからない)を整理しながら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++;
}
No.2ベストアンサー
- 回答日時:
>どうして、全く同じデータが収納されてしまうのか教えて頂けないでしょうか?
そのように処理するように、あなたが書いてるから。
同じインスタンス使い回してるんだから、そうなって当然。
>List<Wireless_unit_sig^>^ Wireless_ID_str02 = gcnew List<Wireless_unit_sig^>();
私はいったい何度「この意味を理解していますか」と書けばいいんだろう。
あなたが書いてるものを配列で書き直すと
Wireless_unit_sig^ Wireless_ID_str02[20000];
Wireless_unit_sig^ Wireless_unit_sig_temp = gcnew Wireless_unit_sig();
i = 0;
while ((data = reader->ReadLine()) != nullptr) {
array<String^>^ split = data->Split(separator);
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];
Wireless_ID_str02[i] = Wireless_unit_sig_temp;
i++;
}
になるんですが、これで何がおかしいのかわからないのであれば
「基本を勉強しなおしてこい」レベル(Listの使い方がわからないとか以前の話)
No.6
- 回答日時:
#5 へ
>ネイティブ配列にマネージ型を含むことはできません。
>コンパイルエラーです。
>C++/CLIを使ったことがあれば、一発で見抜けるデタラメです。
でたらめなのはわかってます。
できるだけ、わかりやすいように無理矢理、配列にしてるんですから。
C++/CLI使ってないのは認めますけどね
マネージ型使うならC#使う方が楽だし。
No.5
- 回答日時:
#2
>あなたが書いてるものを配列で書き直すと
>
>
>Wireless_unit_sig^ Wireless_ID_str02[20000];
>Wireless_unit_sig^ Wireless_unit_sig_temp = gcnew Wireless_unit_sig();
>i = 0;
>while ((data = reader->ReadLine()) != nullptr) {
>array<String^>^ split = data->Split(separator);
>
>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];
>
>Wireless_ID_str02[i] = Wireless_unit_sig_temp;
>i++;
>}
>
> になるんですが、
なりません。理由は簡単です。
>Wireless_unit_sig^ Wireless_ID_str02[20000];
ネイティブ配列にマネージ型を含むことはできません。
コンパイルエラーです。
C++/CLIを使ったことがあれば、一発で見抜けるデタラメです。
>「基本を勉強しなおしてこい」
まあ、あなたも同じ穴の狢でしょうなあ。
うっひゃっひゃ。
No.4
- 回答日時:
#3で完璧に補足されちゃってますが、「作ったオブジェクトを使い回す」のが問題なのだから使い回さないためには「その都度オブジェクトを作る」だけ。
#2でも言われてますが基本レベルのことなのでコードはいちいち書きません。書いてもらわなきゃわからないというなら「基本からやり直してこい」というだけのことです。
No.3
- 回答日時:
「使い回さないようにすればいいと思っている」という認識は, いつできましたか?
#1 の回答をよく読んでください. ちゃんと
「『最初に一回だけオブジェクトを作って』使い回している」のが問題だ
と書かれていますよ. この文章から「どうすれば使いまわさないようにできるのか」を読み取ってください.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
10進数からN進数に変換するプロ...
-
WindowsのCapsLock(キャップス...
-
プログラミング言語でアプリや...
-
【C言語】全角文字の配列を、全...
-
大量のデータを読み込んで表示...
-
c++の勉強方法を教えてくださ...
-
写真のプログラムは、1からnま...
-
C言語関数違いについて。
-
C言語について。
-
C言語 1から20までの逆数の和を...
-
Windows Formアプリからコンソ...
-
パソコン
-
今ってプログラミング言語は何...
-
2つほどお聞きしたいことがあり...
-
どうして+3
-
プログラミング言語についてc++...
-
次の記述について
-
UART通信の取説で,left floati...
-
C#でTreeViewのCheckBoxのサイ...
-
逆コンパイルと逆アセンブルの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
perlで複数行のデータを自由に...
-
時刻表を分でソートする方法を...
-
要素を削除する最適な方法
-
Perl ファイルを読込んで日付の...
-
データの日付でソートをしたい
-
<IN>; を単独で使う
-
CSVデータ「","」と「,」混在読...
-
ログファイルの指定行に書込み
-
Pythonの再帰関数の動作の流れ...
-
配列のソートについて質問です。
-
C言語でバイナリファイルの読み...
-
引数を受け取る@_について
-
csv元データーの数字の列が、""...
-
Listジェネリッククラスのやり...
-
エクセルVBA コードが同じでも...
-
ExcelをCSV書き出す場合のシー...
-
VBAでCSVファイルを途中行まで...
-
バッチファイルの作り方(CSV→...
-
batファイルでrenameができませ...
-
awkスクリプトでダブルクォーテ...
おすすめ情報