• ベストアンサー

C++でvectorにテキストファイルを読み込む

C++でテキストファイルを読み込んで平均、標準偏差などを表示するプログラムを作っているのですが、 vectorにテキストファイルを読み込ませる方法が分からないので教えていただけないでしょうか? int型の配列に読み込ませる方法もありますが、テキストファイルのデータ数が未知数のためvectorを使いたいです。

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

  • ベストアンサー
  • KoHal
  • ベストアンサー率60% (110/181)
回答No.2

ものごとは正確に認識し正確に表現しましょう。そうでなければプログラミングは出来ません。 >vectorにテキストファイルを読み込ませる きわめてあいまいな表現です。 これを文字通りに受け止めれば vector<char>にテキストファイルの内容を一文字ずつ読みこむということになりますが、違いますよね? 恐らく、そのテキストファイルには複数の数値が文字表現として記録されていて、その個々の数値をvector<int>(またはvector<double>他)に格納したいということでしょうね? さて、そのテキストファイルの書式は如何なるものでしょう? 数値と数値の区切りはスペースですか?カンマですか?改行ですか? これが判らなければソースコードは書けません。 このような詳細は回答者に補足要求される前にご自分で最初から明確にしたうえで質問すべきです。 さて、とりえあえず、テキストファイルには整数値がスペースを区切りとして並んでいる。 それをvector<int>に順に読みこむと言う仕様でサンプルを示します。 ヘッダ、ネームスペースは省略。 vector<int> array; ifstream file("filename.txt"); int buf; while ( file >> buf ) array.push_back(buf); 上の解答を書いてる間に質問者から補足がありましたね。 でもまぁ、この回答の趣旨に訂正は必要無いと思いますのでそのままアップします。 ファイル内の区切りがスペースでも改行でもこのサンプルで問題ありません。

DORASUKE3
質問者

お礼

お答えいただきありがとうございます。 質問の仕方に不備があり申し訳ありませんでした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.3

#include <iostream> #include <fstream> #include <vector> #include <iterator> int main() {  std::ifstream input("data.txt");  std::vector<int> v((std::istream_iterator<int>(input)),std::istream_iterator<int>());  for ( std::vector<int>::const_iterator iter = v.begin();     iter != v.end(); ++iter ) {   std::cout << *iter << std::endl;  } }

DORASUKE3
質問者

お礼

ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

テキストファイルの平均/標準偏差ってなんですか?

DORASUKE3
質問者

補足

15 34 8 12 17 というようなデータがテキストファイルにがあるときに そのデータの平均、標準偏差を求めるということです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C++ vectorに配列をプッシュしたい

    C++のstd::vectorが格納する要素として配列を指定することはできますか vectorを使って2次元配列を表現したいときは,たとえば std::vecor<std::vector<int>> v; とすれば2次元配列が表現できますよね. 2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました. (2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません) std::vector<int[2]> v; int a[2]; a[1] = 1; a[0] = 2; v.push_back(a); という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか. あるいは,もし可能ならどのように書けばよいのでしょうか. 結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます. 「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした. よろしくお願いします.

  • C言語でファイルの入出力

    C言語についての質問です。 統計学のシュミレータを作っていまして 大量の数値データ(1000程度)のデータを入力する必要があるのですが scanfなどで入力要求するには、数に無理がありますので 外部テキストファイルからプログラムに読み込みたいのですが 方法が分かりません。 希望としては、まずテキストファイルに 1000個の数値データを入力しておいて (数値データのみをコンマとか改行で区切ったものをあらかじめ作成しておく) それを1000個の配列 int data[1000]に 順番にインポートできるようにしたいです。 データ数は1000個で固定、すべてint型でOKです。 数値として処理したいので 文字列としてインポートしてしまうのはダメです。 あくまでint型の数値として考えてください。 回答よろしくお願いします。

  • Visual C++を 用いたテキストファイル読み込み(応用)

    Microsoft Visual C++ 2008 Express Editionを使っています。 テキストファイルは 約5000行×6列の数値(のみ)になっております。(列間にスペースあり) いくつかある5000×6行テキストファイルの中から、ファイル名を入力することで任意のテキストファイルにアクセスし、さらに6列のデータをそれぞれ別の配列に格納するコンソールプログラムを考えていますが行き詰まっています。例えば、1列目を配列1、2列目を配列2、・・・といった具合です。 詳しい方、どうかよろしくお願いいたします。

  • C++言語の配列の呼び方,動的・可変長の違い

    C++言語での配列の名称についての質問です. int Array[10]; みたいに宣言する普通の配列は「静的配列」と呼びますよね.コンパイル時に定数で要素数を指定しておかなければならないからですよね. これに対して,new[]演算子を用いて int *Array = new int[n]; といったように確保する配列はなんと呼ばれるのでしょうか. 実行後に変数を用いてその要素数を動的に指定できるので,「動的配列」と呼ぶ人が周りには多いです(「ポインタ配列」とも).しかし,C言語でのrealloc関数みたいに,直接に配列長を変化させるといったようなことはできませんよね. (改めてnew[]してmemcpy()すれば出来るのでしょうが) そこで,配列長をプログラム中で自在に変化させる方法としてstd::vectorを利用する方法がありますよね.このvectorを「動的配列」と呼ぶ人もいました. 私は,new[]したものは動的に要素数を指定できるがその後の配列長は固定であり,vectorはいつでも配列長が可変なので int Array[10]; ・・・静的固定長配列(静的配列) int n = 10; int *Array = new[n]; ・・・動的固定長配列 std::vector<int> v; ・・・可変長配列 と呼んでいるのですが,一般的にはそれぞれどのように呼ばれるのでしょうか. また,最近はstd::arrayをいうものを知りました.これについてもどのように呼ばれるのか,教えてください. よろしくお願いいたします.

  • テキストファイルにてデータ管理

    お世話になっております。 http://oshiete1.goo.ne.jp/qa4005498.html http://oshiete1.goo.ne.jp/qa4047511.html これまで上記ページにてDBを使わずにテキストファイルにてデータ管理するアドバイスをいただき、テキストエリアに入力したものをテキストファイルに登録することが出来ました。 こんな感じ。 01<>プログラム 01_01<>PHP 01_02<>javascript と入力したものを、テキストファイルに 01  プログラム 01_01 PHP 01_02 javascript に登録(半角数値と文字の間はスペース)。 そこで、テキストファイルに登録されたデータを修正・削除する管理画面を作っているのですが、テキストファイルからデータを呼び出し、file()を用いてデータを配列にし、for文で各データをテキストフォームに表示させるところまで出来ましたが、以下の点についてが分からず、アドバイスを頂ければと投函させていただきます。 1.修正する場合、テキストファイルのデータを配列にして各データをテキストフォームにて表示させているが、修正する場合、どのような流れになるのか?(テキストファイルのデータは改行にて登録されていますが、テキストファイルから読み込んだとき配列にしているので、適正な流れが分かりません) 2.テキストファイルのデータを配列にし、各テキストフォームに表示させた際、削除するための機能と考え、各データ毎にチェックボックスを設けていますが、配列データの任意の場所を削除したとき、再度テキストファイルに改行を含んだデータとして登録するには、どういった流れ(プログラム?関数?)になるのか? 以上、皆さんお忙しいとは思いますが、お知恵を頂戴出来れば幸いです。宜しくお願い致します!

    • ベストアンサー
    • PHP
  • 入力ファイルを読み込み,得点,データ数(N),得点の平均(mean)と

    入力ファイルを読み込み,得点,データ数(N),得点の平均(mean)と標準偏差(stdev),偏差値,偏差値の最小値(min)と最大値(max)を出力ファイルに書き込むプログラムを作りなさい.ただし,以下を守ること. 1 入力と出力のファイル名はキーボードから与えるようにすること. 2 入力ファイルを開くのは1回だけとし,1次元配列に読み込んで処理すること. という課題なのですが、この課題でint型とdouble型とchar型は使うと思うのですが 最低限定義すべき変数定義ってなにがありますか? 結構定義するものが多いと聞いたのですが何が必要かよくわかりません。

  • Objective C(iPhone SDK)でテキストファイルから一

    Objective C(iPhone SDK)でテキストファイルから一行毎データを読み出す方法を教えてください. つい最近Objective-Cを始めた初心者です. サーバ上にあるテキストファイルを読み込み,一行ごとデータを取り出し,その一行ずつ取り出したデータをTableViewの項目として表示したいと思っています.現在コンパイルが出来ているのは, NSString* text; NSString* path = @"(URL)test.txt"; NSError* error; text = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; までです.また,読み込むテキストファイルの内容は 0001 0002 0003 0004 [EOF] となっています.このデータの一行ずつを配列に格納する方法を教えてください,よろしくお願いします.

  • C#で、ファイルのデータを取得し、配列に格納

    C#を始めたばかりで分からないことも多いため、質問させていただきます。 C#で、テキストファイルにある2進数の数値 例: 00111100 11111100 00010100 のような8桁のデータをC#でテキストファイルから2進数のまま読み取り、 配列に格納したいです。 上の例で考えると、 byte[0]に 00111100 byte[1]に 11111100 byte[2]に 00010100  のデータが入力されているような感じです。 ArrayListを使用する方法や、 バイナリファイルで読み込む方法などもあると思うのですが、 データを1行ごとに配列に入力し、 それを見た目どおり2進数として格納する方法が分かりません。 やはり、文字コードなどを参考に、 1文字ずつ格納し、引き算していくしか方法はないのでしょうか? 文章が分かりにくくて申し訳ないのですが、回答いただけるとありがたいです! よろしくお願いいたします。

  • テキストファイルを標準出力したいのですが

    基本的な質問で申し訳ないのですが、デスクトップ上に作製したテキストファイル(test.txt)をリダイレクトでプログラムに入力し、標準出力(モニタに出力)したいのですがテキスト入力の方法がよく分かりません。 while、getcharを用いて1文字ずつファイルの終端になるまで読み込むので、次のものを書いたのですがテキストファイルの指定方法がわからず行き詰っております( 『 < 』 を使うようなのですが・・・) 使用しているソフトはCPad for Borland C++ Compilerで、書いたものは以下になります。 ご回答お願い致します。 ------------------------------------------------- #include<stdio.h> int main() { int c = 0; while(c = getchar()) != EOF{     printf("%c",c); } return 0; } -------------------------------------------------

  • 【C#】テキストファイルを2進数で取得&配列に格納

    http://okwave.jp/qa/q7812279.html 前回の質問が分かりにくかったため、もっと詳しく書いていこうと思います。 テキストファイルを1行ずつ読み取り、それをbyte型に保存したいです。 例:test.txt 01001000 01110000 01010100 11100110 01010101 ↑のような8桁の2進数がテキストファイルに記入されています。 そのテキストファイルを読み取り、 byte配列に格納したいです。 例: byte[0]に01001000 byte[1]に01110000 byte[2]に01010100 byte[3]に11100110 上記のようにデータが格納されるよう、 ファイルを読み取り、配列に入れたいと思っています。 C#初心者のため、右も左も分からないのですが、 とりあえず、やろうとしている流れを以下に書きます。 (1)ファイルを読み込む (2)ArrayListに格納 (3)データ変換(文字列を2進数に) (4)データの出力(byte型) ArrayListでなくても構わないのですが、 他にいい方法が思いつかなかったので…。 言いたいことがぐちゃぐちゃになってきたのでまとめると、 byte[0]にファイルから読み取った1行のデータ(01001011等)を byte型で入力したい。 ということです。 分からなければ、コメントお願い致します。 文章が雑で分かりにくいかもしれませんが、回答頂けると嬉しいです。