- ベストアンサー
C++でのtxtファイル読み込みについて
- C++でのtxtファイル読み込みに関する質問です。特定のコードでtxtファイルを読み込もうとするとエラーが発生します。
- 問題があるtxtファイルの例も提示されており、その場合は正常に読み込めることがわかります。
- どの部分が間違っているのか、具体的なヒントや対策を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず読み込むtxtファイルの内容がよくわからないのですが 前半に記述されているtxtファイルの 行の先頭部分と数字と数字の間は、半角スペースでしょうか? string2->Split(' '); は、セパレータとして半角スペースしか 指定していませんから、もし行の先頭部分と数字と数字の間が TABとかになっていたら、sub_string2 は期待している 数値文字列の配列になりません。 また行の先頭部分と数字と数字の間が複数の半角スペースの場合 Splitは、複数のEmpty要素を返すので、 第2パラメータとして、StringSplitOptions::RemoveEmptyEntriesが 必要です。 Splitの仕様をよく確認してください。 サンプルコードは以下のとおり。 //x[i]の読み込み String^ delimStr = " \t"; array<Char>^ delimiter = delimStr->ToCharArray( ); String^ str; int count = 0; while ((str = din->ReadLine()) != nullptr) { string1=sreader1->ReadLine();//StreamReaderに1行読み込む //sub_string=string1->Split(' ');//コンマで分割する //x[count]=Convert::ToInt32(sub_string[1]); //y[count]=Convert::ToInt32(sub_string[2]); sub_string=string1->Split(delimiter,StringSplitOptions::RemoveEmptyEntries); x[count]=Convert::ToInt32(sub_string[0]); y[count]=Convert::ToInt32(sub_string[1]); count++; }
その他の回答 (2)
- Tacosan
- ベストアンサー率23% (3656/15482)
C++ というか「C++/CLI」ですね. 「”入力文字列の形式が正しくありません”と出てしまいます」の部分の判定がおかしいのかもしれません. しかし, sub_string=string1->Split(' ');//コンマで分割する とか sub_string2=string2->Split(' ');//コンマで分割する って何をしたいんだろう....
お礼
どうにか解決することができました。 ご回答ありがとうございました。
補足
ご回答ありがとうございます。 「”入力文字列の形式が正しくありません”と出てしまいます」の部分の判定がおかしいのかもしれません というのは具体的にどういう意味でしょうか? よろしくお願いします。
- nao-y
- ベストアンサー率58% (111/190)
現在、検証できる環境でないので推測でしかないので、 間違っていたら申し訳ありません。 > sub_string=string1->Split(' ');//コンマで分割する > x[count]=Convert::ToInt32(sub_string[1]); > y[count]=Convert::ToInt32(sub_string[2]); 読み込むtxtファイルにスペースがたくさん入っているので 意図したようにSplitできていないのでしょう。 sub_string[1]には数値じゃない何かが入っていると思われます。 どうしても 1 287 1 288 2 107 2 108 2 109 2 110 と桁ぞろえされたファイルでなければならないのなら、 Splitを使うのではなく、sub_stringを決まった桁数で 区切るようにしましょう。
お礼
txtファイルの出力を変えることで解決できました。 また質問させていただくとおもいますが、どうぞよろしくお願いします。 ご回答ありがとうございました。
補足
ご回答ありがとうございます。 C++について勉強不足で申し訳ないのですが、『sub_stringを決まった桁数で区切る』にはどのように書けばいいのでしょうか? よろしくお願いします。
お礼
こんにちは。 txtファイルの出力をいじることでどうにか解決できました。 C++についてはこれからしっかり勉強しようと思います。 ご回答ありがとうございました。
補足
ご返答ありがとうございます。 fortranでtxtファイルを書き出しているのですが、行の先頭部分、数字と数字の間ともに半角スペースになっているようです。 ちなみに、これがfortranのコードです。(一部のみ抜き出し) open(20, file ='outputy1.txt') do ay1 = 1, m do ay2 = 1, l if (sum2(ay1, 2, ay2) == 1) then write(20,*) ay1, ay2 endif enddo enddo close(20) ちなみにm=103,l=300です。 C++について勉強を始めたばかりでほぼ何もわかっていないのですが、hideishi様の書いてくださったコードを該当部に入れれば解決するでしょうか? よろしくお願いします。