C 从TXT和分析到类结构

c++ read from txt and parse to class struct

本文关键字:结构 TXT      更新时间:2023-10-16

在一个项目上工作,我需要从txt文件中阅读,其中每三行都有我们所需的状态信息,我必须将信息解析到我创建的类中。我知道我需要一对循环,但不确定如何格式化代码。

如果TXT文件:

,这是格式
New Hampshire
Concord
9304 1788 9
Massachusetts
Boston
8257 1788 6
Vermont
Montpelier
9609 1791 14

每第三行都需要解析三个单独的INT。到目前为止,这是我的代码:

int main()
{
    ifstream file("Example_State_data.txt");
    string name;
    string capital;
    int area = NULL;
    int index = NULL;
    int addYear = NULL;
    int addOrder = NULL;
    hashFunc States;
    States.setStateInfo("Hawaii", "Honlulu", 0, 0, 0);
    States.printTable();
    if (file.is_open())
    {
        while (!file.eof())
        {
            file >> name;
            index++;
        }
        cout << index << " items found";
        file.close();
    }
    else
    {
        cout << "file is not open!";
    }
}
void hashFunc::setStateInfo(string name, string capital, int area, int 
admissionYear, int admissionOrder)
{
    int index = Hash(name);
    if (hashTable[index]->name == "empty")
    {
        hashTable[index]->name = name;
        hashTable[index]->capital = capital;
        hashTable[index]->area = area;
        hashTable[index]->admissionYear = admissionYear;
        hashTable[index]->admissionOrder = admissionOrder;
    }

如果您只需要一种读取数据并将其放置在结构中的方法,则这里有一个示例可以读取您的数据:

#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
    ifstream inFile("Example_State_data.txt");
    if(!inFile.good()) { cout << "File read error" << 'n'; exit(1); }
    struct data
    {
        string name;
        string capital;
        int area;
        int addYear;
        int addOrder;
    };
    vector<data> all_data;
    data one;
    while
    (
        getline(inFile, one.name)
        &&
        getline(inFile, one.capital)
        &&
        inFile
            >> one.area
            >> one.addYear
            >> one.addOrder
    )
    {
        all_data.push_back(one);
        getline(inFile, one.name); // pass third line
    }

    // ---- Read back ---------
    size_t n = all_data.size();
    for(size_t i = 0; i < n; ++i)
    {
        cout
            << all_data[i].name << 't'
            << all_data[i].capital << 't'
            << all_data[i].area << 't'
            << all_data[i].addYear << 't'
            << all_data[i].addOrder << 'n';
    }
    // --------------------------------------
}