如何从C ++中的文本文件读入?

时间:2014-09-09 02:48:14

标签: c++ file input

我正在尝试从文本文件中读取。我相信打开文件的语法是:

ifstream file("Info.txt");
file.open("Info.txt");

如果文件格式化为:

戴夫 加布8 Ryan 10 Green

我可以创建3个这样的变量吗?

    string name;
    int age;
    string color; 

然后从这样的文件中读取信息?

    file >> name >> age >> color;

如果文件中的某些行没有年龄和/或颜色,该文件如何读取?

1 个答案:

答案 0 :(得分:0)

我当然不太熟悉c ++字符串函数,但这是我的尝试:

#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

int main()
{
     std::ifstream fin("Info.txt");
     if(!fin)
     {
             std::cout << "Error opening the file" << std::endl;
             return(1);
     }
    char* line_cstr = new char[1000];
    char name[1000];
    int age;
    char color[1000];
    char* rest = new char[1000];

    fin.getline(line_cstr, 1000);
    while ( strlen(line_cstr) != 0 ) {
        int numTokensRead = sscanf(line_cstr, "%s %d %s %1000[0-9a-zA-Z ]s", name, &age, color, rest);

        if ( numTokensRead >= 3  ) {
        std::cout <<"name: " << name <<", age: " << age <<", color: " << color <<"\n";
            strcpy(line_cstr, rest);
        }

        // do some error checking for incomplete entries
        else if (numTokensRead == 1) {
            if ( strlen(name) == strlen(line_cstr) ) {
                // we're done!
                return 0;
            }

            // skip the first token
            sscanf(line_cstr, "%*s %1000[0-9a-zA-Z ]s", line_cstr);
        }
        else if  (numTokensRead == 2) {
            // skip the first 2 tokens
            sscanf(line_cstr, "%*s %*d %1000[0-9a-zA-Z ]s", line_cstr);
        }
    }
}

代理以下文本文件:

Info.txt

Mike 25 Red Dave Gabe 8 Green 10 Green

输出

$ ./a.out 
name: Mike, age: 25, color: Red
name: Gabe, age: 8, color: Green

我不是100%确定这会处理所有可能的错误情况 - 连续两个整数,浮点数,多行等 - 但它应该让你开始。