У меня действительно странная проблема.Я пытаюсь прочитать входные данные из файла, а затем с помощью регулярного выражения найти и распечатать результат на экране.Мой файл содержит тележки и название продукта.Файл содержит тысячи строк, поэтому вот небольшой пример файла:
Cart561
219328518230,0B6060D038C0,819303200230,81E068407C08,A44323118230,A44488643848,8484C2D09A40,A1460324CA40,
Cart210
834248C52248,8490CB1068C0,
Cart2460B41A124C218,06C1A12528C0,864249906620,2344B20C4230,291329103218,8490CB1068C0,2370231180B0,294621306230
... (More below)
Когда я пытаюсь прочитать и распечатать только первые 5 или 10 телег, мой код работает правильно.Однако, когда я пытаюсь прочитать и распечатать все карты и имена, по какой-то причине это не начинается с самого начала.Вместо этого он переходит к середине файла и начинает там обработку.
Вот мой код:
#include <iostream>
#include <regex>
#include <fstream>
using namespace std;
int main()
{
ifstream cart("Carts.csv");
regex h("[0-9A-Z]{12}");
smatch n;
int count = 0;
while (getline(cart, line))
{
// If count is an even number, the compiler will print out the cart's name
if (count % 2 == 0)
cout << line << endl;
while (regex_search(line, n, h))
{
for (auto x : n)
cout << x << endl;
line = n.suffix().str();
}
count++;
cout << count << endl; // This one just for my test
}
Если я добавлю это в цикл while, чтобы он сначала выводил только 5Результаты:
if(count==5) {break;}
Код работает нормально.Но если я удаляю этот код и позволяю компилятору читать и распечатывать весь файл, он не печатает первую половину файла, он начинается в середине нигде, как это:
A444B0246A40
2305A3109818
24E060D06260
819302D48860
29460A4528C0
09C24A503260
0B3058819260
8484E910C890
234260C19260
60C629016890
8910C98C18C0
0B60492000B0
234270246848
864482718C80
06C260C43260
2344B0306620
A44322548890
42 -> This is number of line in file
Cart277
43 -> This is number of line in file
A44482C16848
294482D090B0
2652230C4A40
0CC629112830
896408C168C0
06C1A12528C0
86424864C248
864248D0C620
E0424B058218
2910F0342230
2C10E2446230
2490F0318620
A441A244C230
8490CB1068C0
0B6060D038C0
A44242616848
0B44898438C0
81C4A1843830
234270246848
8484C2D09A40
44 -> This is number of line in file
Cart287
45 -> This is number of line in file
... (More below)
Послетестируя, я понимаю, что это как-то игнорирует мои 41 первые строки.Счетчик отсчитывает с начала, но компилятор выводит результат только из середины 42-й строки.(Если вы хотите знать, в файле всего 1994 строк)
Короче говоря, я до сих пор не знаю, в чем именно заключается моя проблема и что мне теперь делать, чтобы это исправить.Есть ли у вас какие-либо предложения?Я очень признателен, если кто-нибудь из вас сможет объяснить мне, почему это произошло.
P / s: Поскольку это часть моего домашнего задания, я должен использовать регулярное выражение.
Редактировать:Я печатаю результат в текстовом файле, и он показывает все строки.Но мне все еще нужно, чтобы он работал так же на компиляторе, поскольку это то, на что будет смотреть мой инструктор.