Отладочный файл с ошибками подтверждения, tokenScanner и текстовые файлы

Я написал программу, которая обрабатывает текстовые файлы по одному и извлекает соответствующую информацию. Моя программа хорошо работает с некоторыми текстовыми файлами, а не с другими. Нет очевидной разницы между файлами, которые легко проходят через мою программу, и файлами, которые этого не делают.

Что касается проблемных файлов:

  1. программа открывает файл
  2. он считывает и обрабатывает хороший кусок строк по очереди, как следует
  3. Но затем он достигает проблемной строки и выдает сообщение об ошибке:

    «Файл с ошибками отладки:
    е: /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);
}
}

0

Решение

в то время как (! inFile.eof ()

это просто неправильно (почти в любом случае)

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

лучше

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]