0

ここでは、これに似た構文解析の質問がよく聞かれますが、しばらく検索したところ、役立つ答えが見つからなかったので、100万回前に答えられたものを尋ねないことを願っています。

次のようなテキストファイルがあります。

1 14 100
3 34 200
2 78 120

最初の数字はID番号、2番目の数字は年齢、3番目の数字は体重です。(これらは任意の説明です)私は次のような構造体も持っています:

struct myData{
    int ID;
    int age;
    int weight;
};

myData構造体の配列を作成した後、テキストを反復処理して、最終的にはテキストファイルの各行の各要素が配列の1つのインデックスに含まれるようにするにはどうすればよいですか?たとえば、配列にテキストファイルの要素を入力した後、次のように言うことができます。

cout << myData[0].ID << ", " << myData[0].age << ", " << myData[0].weight << "\n";

上記のコード行のインデックスが2の場合は、「1、14、100」が出力され、「3、78、120」が出力されます。getLine()やget()などを使って他の人の例を探してみましたが、コツがつかめないようです。このサイトのウィザードが簡単に回答できるように、質問に関する十分な情報を含めたことを願っています。前もって感謝します!

4

3 に答える 3

4

このようなものはどうですか:

struct myData
{
    int ID;
    int age;
    int weight;

    // Add constructor, so we can create instances with the data
    myData(int i, int a, int w)
        : ID(i), age(a), weight(w)
        {}
};

std::vector<myData> input;
std::ifstream file("input.txt");

// Read input from file
int id, age, weight;
while (file >> id >> age >> weight)
{
    // Add a new instance in our vector
    input.emplace_back(id, age, weight);

    // Skip over the newline, so next input happens on next line
    std::ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}

// Close the file after use
file.close();

// Print all loaded data
for (auto data : input)
{
    cout << "ID: " << data.ID << ", age: " << data.age << ", weight: " << data.weight << '\n';
}
于 2012-10-05T08:32:19.140 に答える
1

インクルードファイルを使用することができます: #include <fstream> そして単に同様のことをする

    std::ifstream infile("file.txt");
    int a, b, c;
    while (infile >> a >> b >> c)
    {
        // process (a,b,c)
    }

ストリームを閉じることを忘れないでください。

于 2012-10-05T08:29:07.090 に答える
0

ファイルを開き、ファイルを調べてすべての行を読み取ります。

//Opening File
FILE *trace;
trace=fopen("//path//to//yourfile","r");

// Read the file
myData list[N];
int count=0;
while(!feof(trace)){
    fscanf(trace,"%d %d %d\n", &myData[count].ID, &myData[count].age, &myData[count].weight);
    count++;
}

// now you have an array of size N go through it and print all
for(int i=0; i<count; i++)
    printf("%d %d %d\n", myData[i].ID, myData[i].age, myData[i].weight);
于 2012-10-05T08:30:22.270 に答える