需要帮助阅读具有图书格式的文件

时间:2017-06-12 19:09:56

标签: c++11

我一直在努力阅读有书籍格式的文件。该文件被一个看起来像这样的字符串分成页面“------------------------------------ ---”。我要做的是阅读所有单词并跟踪每个单词的页码和单词编号,文件看起来像这样

my file

例如,如果单词“hello”出现在第一页中,它将看起来像“hello 1,1”,因为它是第一页上的第一个单词,如果单词出现在第二页中,输出将是“hello” 2,1" 这是我到目前为止的代码

ifstream inFile;
    inFile.open("GreatExpectations.txt");
    if(!inFile.is_open()) {
        cout << "Error, can't open the file....."<<endl;
        return 1;
    }
    string word;
    string separator;
    separator = "----------------------------------------";
    int pageNum = 0, wordNum = 0;
    IndexMap myMap(200000);
    string title;
    for(int i = 0; i < 2; i++) {
        getline(inFile, title);
        cout << title <<endl;
    }
    while(!inFile.eof())
    {
        inFile >> word;
        //cout << word << " ";
        wordNum++;
        if(word == separator)
            pageNum++;
    }

1 个答案:

答案 0 :(得分:0)

如果我很清楚你的问题是我解决问题的方法:

#include <iostream>
#include <fstream>
#include <vector>
#include <sstream>

using namespace std;

struct WordInfo {
    string word;
    int pageNum;
    int wordNum;
};

int main() {
    ifstream inFile;
    inFile.open("GreatExpectations.txt");

    if(!inFile.is_open()) {
        cout << "Error, can't open the file....."<<endl;
        return 1;
    }

    int pageNum = 1, wordNum = 0;
    vector<WordInfo> words; // container for words with informations

    // read the file line-by-line
    for(string line; getline(inFile, line);) {
        // detect the page separator which is a line from hyphens only 
        if(line.find_first_not_of("-") == string::npos) {
            pageNum++;
            wordNum = 0;
            continue;
        }

        // process the line word-by-word
        stringstream ss(line);
        for(string word; getline(ss, word, ' ');) {
            wordNum++;
            words.push_back({ word, pageNum, wordNum });
        }
    }

    return 0;
}

WordInfo结构将根据您的需要保存一个单词的信息。逐行读取文件并不是最佳但更简单,因此有两个循环:第一个读取一行,第二个读取该行的单词。如果读取一个单词,它将被推入words向量以供以后使用。就是这样。