• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++でのtxtファイル読み込みについて)

C++でのtxtファイル読み込みについて

このQ&Aのポイント
  • C++でのtxtファイル読み込みに関する質問です。特定のコードでtxtファイルを読み込もうとするとエラーが発生します。
  • 問題があるtxtファイルの例も提示されており、その場合は正常に読み込めることがわかります。
  • どの部分が間違っているのか、具体的なヒントや対策を教えていただけると助かります。

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

  • ベストアンサー
  • hideishi
  • ベストアンサー率55% (5/9)
回答No.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++; }

cap13
質問者

お礼

こんにちは。 txtファイルの出力をいじることでどうにか解決できました。 C++についてはこれからしっかり勉強しようと思います。 ご回答ありがとうございました。

cap13
質問者

補足

ご返答ありがとうございます。 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様の書いてくださったコードを該当部に入れれば解決するでしょうか? よろしくお願いします。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

C++ というか「C++/CLI」ですね. 「”入力文字列の形式が正しくありません”と出てしまいます」の部分の判定がおかしいのかもしれません. しかし, sub_string=string1->Split(' ');//コンマで分割する とか sub_string2=string2->Split(' ');//コンマで分割する って何をしたいんだろう....

cap13
質問者

お礼

どうにか解決することができました。 ご回答ありがとうございました。

cap13
質問者

補足

ご回答ありがとうございます。 「”入力文字列の形式が正しくありません”と出てしまいます」の部分の判定がおかしいのかもしれません というのは具体的にどういう意味でしょうか? よろしくお願いします。

  • nao-y
  • ベストアンサー率58% (111/190)
回答No.1

現在、検証できる環境でないので推測でしかないので、 間違っていたら申し訳ありません。 > 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を決まった桁数で 区切るようにしましょう。

cap13
質問者

お礼

txtファイルの出力を変えることで解決できました。 また質問させていただくとおもいますが、どうぞよろしくお願いします。 ご回答ありがとうございました。

cap13
質問者

補足

ご回答ありがとうございます。 C++について勉強不足で申し訳ないのですが、『sub_stringを決まった桁数で区切る』にはどのように書けばいいのでしょうか? よろしくお願いします。

関連するQ&A