Я написал программу, которая обрабатывает текстовые файлы по одному и извлекает соответствующую информацию. Моя программа хорошо работает с некоторыми текстовыми файлами, а не с другими. Нет очевидной разницы между файлами, которые легко проходят через мою программу, и файлами, которые этого не делают.
Что касается проблемных файлов:
Но затем он достигает проблемной строки и выдает сообщение об ошибке:
«Файл с ошибками отладки:
е: /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);
}
}
в то время как (! inFile.eof ()
это просто неправильно (почти в любом случае)
while(getline(inFile, line2))
evaluate(line2);
лучше
Других решений пока нет …