C++ 从excel/文本文件中读取而不跳过空格,除非由选项卡创建

C++ 从excel/文本文件中读取而不跳过空格,除非由选项卡创建,c++,string,fstream,C++,String,Fstream,我有一个关于电厂监控的项目,它要求我从两个文件(excel文件或文本文件)中读取数据。数据由97列和515行组成,其中混合了整数和字符串。因此,我的想法是声明97个数组,将每列中的值存储到各自的数组中。但是,有些列包含多个单词的字符串。因此,一行在一列中可能有一个单词,而另一行可能有三个单词,等等。这是一个问题,因为当我在行中读取时,当我希望程序将整个短语作为一个字符串读取并将该字符串存储在为该列初始化的数组中时,每个字符串都被分配到不同的字符串数组。这会导致数据移动,一些数据没有分配到正确的数

我有一个关于电厂监控的项目,它要求我从两个文件(excel文件或文本文件)中读取数据。数据由97列和515行组成,其中混合了整数和字符串。因此,我的想法是声明97个数组,将每列中的值存储到各自的数组中。但是,有些列包含多个单词的字符串。因此,一行在一列中可能有一个单词,而另一行可能有三个单词,等等。这是一个问题,因为当我在行中读取时,当我希望程序将整个短语作为一个字符串读取并将该字符串存储在为该列初始化的数组中时,每个字符串都被分配到不同的字符串数组。这会导致数据移动,一些数据没有分配到正确的数组等

<>我有一个C++的基础知识,没有什么了不起的,但是如果我没有错的话,ISTRAMS在遇到一个空间时停止读取,并且不区分标签空间或普通空格空间。有谁能帮我解决这个问题,以便我能够正确存储数据并制定KPI

我已经包含了我的一部分数据,并且尝试读取代码的4列。请注意,在数据的文本文件版本中,每列由一个选项卡分隔

ID Com NID  Plant                    Operator
3   N       Rock                     Alabama Elec Co
3   N       Rock                     Alabama Elec Co
4   N       Walt Boulder Co          Alabama Elec Co
10  N   3   Greene County            Alabama Elec Co    
46  N   1   Browns Ferry             Tennessee Valley Authority
ID Com NID工厂操作员 3 N罗克阿拉巴马电力公司 3 N罗克阿拉巴马电力公司 4 N华特博尔德公司阿拉巴马州电气公司 10 N 3阿拉巴马州格林县电力公司
46 N 1布朗渡口田纳西河谷管理局

举例说明我遇到的问题,如果四列有4个字符串数组,在第一行中,3将分配给array1,N分配给array2,Rock分配给array3,Elec分配给array4。然而,在第3行中,4将分配给array1,N将分配给array2,Walt将分配给Array3,但Boulder将分配给Array4,而不是存储的整个植物名称。 第5行也出现了类似的情况,这会扰乱数据的组织,不允许我正确、准确地操作数据

//numLines is taken from previous code to determine the 
//number of lines in the file
std::string *ID = new std::string[numLines]; 
std::string *YN = new std::string[numLines];
std::string *nuclearID = new std::string[numLines];
std::string *plantName = new std::string[numLines];

std::ifstream infile;
infile.open("nocommagenerationdata.dat");
if (infile.is_open()) {
    int i = 0;
    while (i<numLines) {
        infile >> ID[i] >> YN[i] >> nuclearID[i] >> plantName[i];
        std::cout << ID[i] << YN[i] << nuclearID[i] << plantName[i] << std::endl;

        i++;
    }

}
infile.close();
//numLines取自前面的代码以确定
//文件中的行数
std::string*ID=newstd::string[numLines];
std::string*YN=新std::string[numLines];
std::string*nuclearID=new std::string[numLines];
std::string*plantName=new std::string[numLines];
std::ifstream-infle;
infle.open(“nocommagenerationdata.dat”);
if(infle.is_open()){
int i=0;
而(i>ID[i]>>YN[i]>>nuclearID[i]>>plantName[i];
std::cout只是一些提示

定义一个结构或类,该结构或类表示从文件中读取的记录。当记录是从文件中的每一行构造时,您只需要一个数组来保存这些记录

研究如何使用std::getline读取文件中的每一行,以及如何使用std::strtok解析记录数据的每一行

这将适用于制表符分隔的文本文件。如果excel文件不是制表符分隔的,则需要将副本另存为制表符分隔的文本文件

std::ifstream infile;
infile.open("nocommagenerationdata.dat");
if (infile.is_open()) {
    int i = 0; std::string temp;
    while (i<numLines) {
        infile >> temp;
        std::cout << i << "." << temp << std::endl;

        i++;
    }

}
infile.close();