С моей точки зрения, вы неправильно делаете то, что хотите.
LoadData()
будет читать остановку токена каждый раз, когда читает '|' разделитель.
При нахождении токена "# Newbie 101" он удаляется, поскольку начинается с символа #.
Следующая итерация в своем цикле будет обрабатывать токен "Экзамен 1" (следующий ... в строке первая !!). Хорошо, хорошо.
И затем на следующей итерации читается следующая, которая является "3 \ nPerson one" . Пожалуйста, обратите внимание на конец строки в середине строки!
Учитывая вывод, я не уверен, что это то, что вы хотите, да?
AFAI понимаю, что вы хотите, чтобы ваша программа пропускала закомментированные строки (начиная с символа #).
В качестве решения, вам лучше читать всю строку вместо getline(file_handle, line)
в первом цикле. Не указывайте никаких «|» символ в качестве третьего параметра при вызове getline (), для получения строки whole должна быть взята '\ n'.
В этом первом цикле добавьте первую проверку, чтобы увидеть, начинается ли символ «#» в строке. Если это так, вызовите оператор continue. В противном случае введите второй вложенный цикл, чтобы интерпретировать все токены в вашей строке, на этот раз, используя find_first_of()
метод строки, чтобы найти '|' персонаж. Повторяйте цикл, пока не прочитаете всю строку.
Вы могли бы либо подумать о BOOST tokeniser lib. Хотя я никогда не использовал его (или давным-давно, когда я был старшим), я помню, что это было вполне уместно для выполнения такой работы очень простым способом!
Я верю, что есть хорошие библиотеки для чтения файлов и удаления комментариев. Может быть, в BOOST ... (это позор, мне действительно нужно глубже взглянуть на эту библиотеку ...)