1. ホーム
  2. c++

[解決済み] C++でテキストファイルから数値データを読み込む

2022-03-04 14:49:27

質問

例えば、外部のテキストファイルのデータがこのようなものであった場合。

45.78   67.90   87
34.89   346     0.98

c++でこのテキストファイルを読み込んで、各数値を変数に代入するにはどうすればよいでしょうか? ifstreamを使って、テキストファイルを開き、最初の数字を変数に代入することはできますが、スペースの後の次の数字を読み取る方法がわかりません。

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    float a;
    ifstream myfile;
    myfile.open("data.txt");
    myfile >> a;
    cout << a;
    myfile.close();
    system("pause");
    return 0;
}

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    int data[6], a, b, c, d, e, f;
    ifstream myfile;
    myfile.open("a.txt");

    for(int i = 0; i << 6; i++)
        myfile >> data[i];

    myfile.close();
    a = data[0];
    b = data[1];
    c = data[2];
    d = data[3];
    e = data[4];
    f = data[5];
    cout << a << "\t" << b << "\t" << c << "\t" << d << "\t" << e << "\t" << f << "\n";
    system("pause");
    return 0;
}

解決方法は?

ループで >> を繰り返し読み込む。

#include <iostream>
#include <fstream>
int main(int argc, char * argv[])
{
    std::fstream myfile("D:\\data.txt", std::ios_base::in);

    float a;
    while (myfile >> a)
    {
        printf("%f ", a);
    }

    getchar();

    return 0;
}

結果

45.779999 67.900002 87.000000 34.889999 346.000000 0.980000

知っている場合 まさに という演算子を使うことで、ファイル内にいくつの要素があるのかを知ることができます。

int main(int argc, char * argv[])
{
    std::fstream myfile("D:\\data.txt", std::ios_base::in);

    float a, b, c, d, e, f;

    myfile >> a >> b >> c >> d >> e >> f;

    printf("%f\t%f\t%f\t%f\t%f\t%f\n", a, b, c, d, e, f);

    getchar();

    return 0;
}


編集する 本題のコメントに対して。

選択肢は2つです。

  • 例えば、ポイント (97, 60) の値が必要な場合、5996 (= 60 * 100 + 96) 個の値をスキップして、最後の値を使用しなければなりません。もし興味があれば、これはうまくいくでしょう のみ を指定します。
  • Jerry Coffinが提案したように、データを配列にロードすることができます。彼はすでにこの問題を解決するための素晴らしいクラスを提供してくれています。あるいは、単純な配列を使ってデータを格納することもできます。

編集する ファイル内の値をスキップする方法

1234番目の値を選択するには、次のコードを使用します。

int skipped = 1233;
for (int i = 0; i < skipped; i++)
{
    float tmp;
    myfile >> tmp;
}
myfile >> value;