|
|
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
Есть задача распарсить CSV файл, в котором первой строкой идет хедр, второй типы данных, а уже потом сами данные. Для парсинга использую opencsv. В нем есть замечательный метод CsvToBean.parse, который помимо прочего принимает на вход Reader. Этот метод ожидает файл в котором есть только хедр и данные, а так как в моем файле второй строкой идут типы данных, то при попытке паминга этой строки на бин вылетает ошибка. Вопрос в том как мне создать какой-либо Reader, который бы игнорировал 2-ую строку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 09:01 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
daly...Вопрос в том как мне создать какой-либо Reader, который бы игнорировал 2-ую строку? А в чем проблема? Посчитать переводы строк, ненужные строки выкинуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 12:44 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev, каким образом из Reader'a выкинуть строки? мне нужно скоримть методу parse уже готовый Reader, который бы вернул те же самые данные за исключением второй строки... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 12:53 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
Задача состоит из нескольких преобразований: 1. Поток символов из файла -> поток строк (построчно можно читать с помощью BufferedReader.readLine(), когда строки закончатся будет возвращать null) 2. поток строк -> отфильтрованый поток строк (пропускаем 2ю, все пустые и т.п.) 3. отфильтрованый поток строк -> поток символов Поток строк можно представить в виде своей реализации Iterator (внутри имеет ссылку на BufferedReader) Отфильтрованый поток - опять же Iterator (внутри ссылка на предыдущий Iterator и Filter - интерфейс с одним методом boolean accept(T value)) Поток символов из итератора проще сделать через свою реализацию InputStream (который потом завернуть в InputStreamReader чтобы ны выходе иметь ридер) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 13:05 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
Наследовать свой класс, переопределить методы.... В чем проблема? 1) Определить нужные строки (и выкинуть) - обычный конечный автомат. Вроде (я в институтах не учился) теорию конечных автоматов должны были преподавать. Т.ч. или конспекты (если учились ))) ) или книжки про конечные автоматы 2) Описания класса Reader http://docs.oracle.com/javase/7/docs/api/java/io/Reader.html Я бы переопределял посимвольный read(), а уже на основе его read(char[], int, int). Возможно будет не очень производительно (можно оптимальнее), но работать должно. С реализацией конечного автомата при посимвольном чтение проблем быть не должно. 3) Как это сейчас модно ))) можно использовать паттерны ))) Вроде, в данном случае, нужен паттер Decorator . Могу ошибаться, т.к. раньше никогда никакими паттернами не пользовался, просто писал код, не думаю, как это по умному называется ))) Я бы как-то так написал (это даже не код, просто пример) Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Можно посмотреть на сорцы стандартных классов. Но если задача вызывает проблемы, то одно из: 1) прочитать книжку про конечные автоматы 2) пойти учиться 3) выпить йаду или убиться ап стенку ))) IMHO P.S. 1. сорри если не вежлив я и так по жизни злой, а вчера вечером еще и с девушкой поссорился 2. а последние N-месяцев пытаюсь XML с помощью ГОСТ электронной подписи подписать. Зла на некоторых Java писателей и придумывателей стандартов не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 13:23 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev2) Я бы переопределял посимвольный read(), а уже на основе его read(char[], int, int). Возможно будет не очень производительно (можно оптимальнее), но работать должно. С реализацией конечного автомата при посимвольном чтение проблем быть не должно. Поэтому проще сделать свой InputStream - там только один метод переопределить надо: int read(). Потом уже этот InputStream завернуть в InputStreamReader, если нужен именно Reader на выходе ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 13:33 |
|
||
|
Reader с пропуском строки
|
|||
|---|---|---|---|
|
#18+
http://docs.oracle.com/javase/6/docs/api/java/io/FilterReader.htm мониторим \n и скипаем вторую строку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.04.2014, 13:40 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38611990&tid=2127355]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
164ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 239ms |
| total: | 502ms |

| 0 / 0 |
