ОБНОВЛЕНИЕ: я попытался добавить больше строк с двойными фидами форм, пока только последняя строка читается правильно, первые две - нет.
У меня есть программа, которая читает файл с помощью getline () и записывает номер страницы, номер строки и расположение символов каждого символа в файле. Программа записывает каждую строку в массив / вектор, как показано ниже:
array[1]: "abcdefg"
array[2]: "haha/fhahaha"
...
Индекс номера строки увеличивается по мере чтения каждой строки, используя for-l oop для извлечения своих данных.
Я использую while-l oop, чтобы определить, есть ли какие-либо символы Form Form, поэтому, когда я увеличиваю количество страниц, счетчик строк возвращается к 0, а счетчик символов возвращается к 0. При использовании while -l oop для поиска символов подачи формы ('\ f') с помощью метода find () (см. код ниже), он пропустил строку, и я не уверен, что является причиной этого.
#include <iostream> // Basic I/O
#include <string> // string classes
#include <fstream> // file stream classes
#include <vector>
#include <random>
using namespace std;
int main(int argc, char* argv[]) {
ifstream book;
book.open("book.txt");
vector<string> line = { "" };
size_t pageCount = 0;
size_t lineCount = 0;
size_t charCount = 0;
size_t lineNum = 0;
while (getline(book, line[lineNum])) {
line.push_back(line[lineNum]);
charCount -= charCount;
cout << "\n Line Number: " << lineNum;
if (line[lineNum].find('\f') == string::npos) {
//cout << "\n BEGIN OUTTER IF";
for (size_t n = 0; n < line[lineNum].size(); ++n) {
charCount++;
cout << "\n !=12: Character: " << line[lineNum].at(n) << " -- Page: " << pageCount << " line: " << lineCount << " charLoc: " << n << " charCount: " << charCount - 1;
}
}
else {
size_t nPageOffset = line[lineNum].find('\f', 0);
while (nPageOffset != string::npos)
{
for (size_t n = 0; n < line[lineNum].size(); ++n) {
if (line[lineNum].at(n) == '\f') {
pageCount++;
charCount -= charCount;
lineCount -= lineCount;
cout << "\n ==12: Character: " << line[lineNum].at(n) << " -- Page: " << pageCount << " line: " << lineCount << " charLoc: " << n << " charCount: " << charCount - 1;
}
else if (n > line[lineNum].find('\f')) {
charCount++;
cout << "\n -1 != 12: Character: " << line[lineNum].at(n) << " -- Page: " << pageCount << " line: " << lineCount << " charLoc: " << n << " charCount: " << charCount - 1;
}
else {
charCount++;
cout << "\n WE: Character: " << line[lineNum].at(n) << " -- Page: " << pageCount << " line: " << lineCount << " charLoc: " << n << " charCount: " << charCount - 1;
}
}
size_t nPageSearchOffset = nPageOffset + 1;
nPageOffset = line[lineNum].find('\f', nPageSearchOffset);
}
}
lineNum++;
lineCount++;
}
book.close();
return EXIT_SUCCESS;
}
Каждый номер строки читается, за исключением того, что пропускается номер строки: 13
Частичный вывод:
Line Number: 12 charCount: 0
==12: Character: -- Page: 6 line: 0 charLoc: 0 charCount: 4294967295
==12: Character: -- Page: 7 line: 0 charLoc: 1 charCount: 4294967295
-1 != 12: Character: g -- Page: 7 line: 0 charLoc: 2 charCount: 0
-1 != 12: Character: h -- Page: 7 line: 0 charLoc: 3 charCount: 1
-1 != 12: Character: i -- Page: 7 line: 0 charLoc: 4 charCount: 2
-1 != 12: Character: g -- Page: 7 line: 0 charLoc: 5 charCount: 3
>>there supposed to be a newline after this
==12: Character: -- Page: 8 line: 0 charLoc: 0 charCount: 4294967295
==12: Character: -- Page: 9 line: 0 charLoc: 1 charCount: 4294967295
-1 != 12: Character: g -- Page: 9 line: 0 charLoc: 2 charCount: 0
-1 != 12: Character: h -- Page: 9 line: 0 charLoc: 3 charCount: 1
-1 != 12: Character: i -- Page: 9 line: 0 charLoc: 4 charCount: 2
-1 != 12: Character: g -- Page: 9 line: 0 charLoc: 5 charCount: 3
Line Number: 13 charCount: 0
==12: Character: -- Page: 10 line: 0 charLoc: 0 charCount: 4294967295
==12: Character: -- Page: 11 line: 0 charLoc: 1 charCount: 4294967295
-1 != 12: Character: g -- Page: 11 line: 0 charLoc: 2 charCount: 0
-1 != 12: Character: h -- Page: 11 line: 0 charLoc: 3 charCount: 1
-1 != 12: Character: i -- Page: 11 line: 0 charLoc: 4 charCount: 2
-1 != 12: Character: g -- Page: 11 line: 0 charLoc: 5 charCount: 3
Book.txt (пропустите номера строк, если вы хотите проверить и преобразовать \ f для формирования подачи ASCII 12)
Line Content
0 abc
1 def\fghi
2 abc
3 defd\fghi
4 ioyudef
5 yttdef
6 abc
7 abci
8 def\fghi
9 def\fghigh
10 \fghig
11 hi
12 \f\fghig
13 \f\fghig
14 \fghig