0

我编写了一个程序,它一次处理一个文本文件并提取相关信息。我的程序适用于某些文本文件,而不适用于其他文本文件。在我的程序中无缝运行的文件和不通过我的程序无缝运行的文件之间没有明显的区别。

就有问题的文件而言:

  1. 程序打开文件
  2. 它一次读取并处理大量行,因为它应该
  3. 但随后它到达问题行并给出错误消息:

    “调试断言失败文件:f:/dd/vctools/crt_bld/self_x86/src/isctype.c 行:56 表达式:(无符号)(c+1)<= 256”

当我进入调试器模式时,问题似乎来自我下面代码中的“while(tokenScanner)”循环。</li>我提取了正在处理的问题行的内容,并在几个问题文件中进行了比较,我发现断言失败消息在最后一个正在处理的令牌是“>”的位置弹出。我不清楚为什么这是一个问题。原始文本文件中的这个特定标记与<li表单中的</li><li. 因此,扫描仪在这个字符串的中途遇到了麻烦。关于为什么会这样以及如何解决这个问题的任何想法?任何建议将不胜感激!

这是我的代码的相关部分:

#include <string>
#include <iostream>
#include <fstream> //to get data from files
#include "filelib.h"
#include "console.h"
#include "tokenScanner.h"
#include "vector.h"
#include "ctype.h"
#include "math.h"

using namespace std;


/*Prototype Function*/
void evaluate(string expression);
Vector<string> myVectorOfTokens; //will store the tokens
Vector<string> myFileNames;

/*Main Program*/
int main() {

    /*STEP1 : Creating a vector of the list of file names 
              to iterate over for processing*/
    ifstream infile; //declaring variable to refer to file list
    string catchFile = promptUserForFile(infile, "Input file:");
    string line; //corresponds to the lines in the master file containing the list files
    while(getline(infile, line)){
        myFileNames.add(line);
    }

    /* STEP 2: Iterating over the file names contained in the vector*/
    int countFileOpened=0; //keeps track of number of opened files

    for (int i=1; i< myFileNames.size(); i++){
        myVectorOfTokens.clear(); //resetting the vector of tokens for each new file

        string fileName;
        string line2;
        ifstream inFile;
        fileName= myFileNames[i];

        inFile.open(fileName.c_str());   //open file convert c_str

        if (inFile){
            while(getline(inFile, line2)){
                evaluate(line2);
            }
        }

        inFile.close();
        countFileOpened++;
    }
    return 0;
}

/*Function for Extracting the Biographer Name*/
void evaluate(string line){
    /*Creating a Vector of Tokens From the Text*/
    TokenScanner scanner(line); //the constructor
    while (scanner.hasMoreTokens()){
        string token=scanner.nextToken();
        myVectorOfTokens.add(token);
    }
}
4

1 回答 1

1

而(!inFile.eof()

是错误的(几乎在任何情况下)

while(getline(inFile, line2))
      evaluate(line2);

更好

于 2013-09-18T18:46:30.683 回答