Есть ли способ проверить, начал ли Java читать новую строку в текстовом файле при чтении в текстовом файле? - PullRequest
0 голосов
/ 28 декабря 2018

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

Я попытался найти в Интернете какой-либо способ решения этой проблемы, а также прочитал некоторые функцииСканер может сделать и не может найти ничего полезногоПЕРВАЯ ЛИНИЯ

1 Ответ

0 голосов
/ 28 декабря 2018

Прямой ответ на ваш вопрос заключается в том, что невозможно узнать, если вы только что начали новую строку, когда используете Scanner::next / Scanner::hasNext.И вообще, нет никакого способа узнать, каким был последний разделитель.Разделители отбрасываются.

Как говорит Дж. Б. Низет, существует множество существующих библиотек с открытым исходным кодом для чтения CSV, поэтому нет необходимости реализовывать эту функцию с использованием Scanner.Действительно, правильная реализация CSV-чтения не тривиальна, особенно если вам нужно реализовать заголовки, кавычки, экранирование и / или строки продолжения.Рекомендуется использовать существующую библиотеку.

Но если (вопреки совету!) Вы решите внедрить программу чтения напрямую, то более надежный подход - использовать вложенный цикл:

  • внешний цикл читает полные строки, используя nextLine
  • Внутренний цикл создает Scanner для каждой строки, чтобы разбить ее на поля.

За исключением того, что это не относится к цитированию, экранирование, строки продолжения и т. д. Настоящая проблема заключается в том, что грамматика CSV не имеет простого контекстно-независимого разделителя.

Полагаю, я мог бы использовать какой-то счетчик для подсчета [полей]

Да ... но если в некоторых строках CSV отсутствуют поля (например, из-за человеческой ошибки), то при подсчете полей это не будет обнаружено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...