![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Griphon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 31.10.2008 Где: Киев Репутация: 1 Всего: 1 |
Добрый вечер! Столкнулся с такой проблемой, что нужно считать произвольную строку из текстового файла. Все строки разного размера . Заранее большое Спасибо!
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Читай построчно, пока не дойдешь до нужной строки. Как читать из файла построчно уже неоднократно обсуждалось, воспользуйся поиском.
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Griphon, RandomAccessFile ?
Это сообщение отредактировал(а) Samotnik - 10.1.2009, 19:21 |
|||
|
||||
| Griphon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 31.10.2008 Где: Киев Репутация: 1 Всего: 1 |
Файл состоит из слов написаных столбиком(около 200 страниц). Количества строк я не знаю(для того чтоб их посчитать загнал все слова в ArrayList, итог- вся система несколько секунд тормозит). Я конечно могу открыть блокнот и подсчитать точное колличество строк,в ручную, и жестко задать считывание файла до определенной но не хотелось бы, если учесть что размер файла может меняться.
Это сообщение отредактировал(а) Griphon - 10.1.2009, 21:42 |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Для того чтобы посчитать количество строк, вовсе не обязательно их записывать в ArrayList, можно воспользоваться LineNumberReader. А вообще непонятно, какую именно строку тебе надо считывать. И потому дать конкретный совет нельзя. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Griphon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 31.10.2008 Где: Киев Репутация: 1 Всего: 1 |
Программирую головоломку Буримэ.
Бypимэ - лoгичecкaя игpa, в кoтopoй из бyкв нeкoтopoгo cлoвa нyжнo cocтaвить кaк мoжнo бoльшe дpyгиx cлoв. Ocнoвным пoкaзaтeлeм игpы являeтcя кoличecтвo бyкв в coздaнныx cлoвax. Слово- задание берется из текстового файла по средством случайного выбора. |
|||
|
||||
| MisterCleric |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 5 Всего: 38 |
Для начала считаешь количество строк в файле
потом рандомом выбираешь номер строки
и читаешь свое слово
Не забудь в блоке finaly позакрывать свои свои ридеры Добавлено через 2 минуты и 13 секунд извините за ошибки в коде... -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||||
|
|||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
LineNumberReader.setLineNumber() не изменяет положение в потоке, а только изменяет номер счётчик строк.
Если достаточно памяти, можно считать весь файл в виде одной String, а затем поделить его на строки с помощью split(). |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 5 Всего: 38 |
так, я понял быстренько исправляю свою ошибку. Конечно не претендую на верность решения и оптимальность. Но эт то что я смог быстро придумать и что работает
-------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
После первого цикла поток нужно закрыть.
Если не хватает памяти для всех слов можно считывать файл по строчкам и складывать слова в базу данных |
|||
|
||||
| Samotnik |
|
|||
![]() Super star ! ![]() ![]() ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 7192 Регистрация: 4.11.2006 Где: Минск City Репутация: 8 Всего: 191 |
Griphon,
ИМХО быстрее всего будет в БД хранить все слова |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Если файл формируется тобой - записывай в первую строку общее количество строк в файле.
Если файл формируется не тобой, пройдись 1 раз по файлу и посчитай количество строк, и запиши его, дату модификации и размер в файл <имяфайла.txt>.linecount. При последующих запусках просто проверяй наличие этого файла и его актуальность, при необходимости обновляй его. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Griphon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 31.10.2008 Где: Киев Репутация: 1 Всего: 1 |
Всем большое при Большое Спасибо!!!! А файл, не мой,- приходится работать с тем что есть
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Кроме lineCount, для решения задачи нужно собирать другую информацию, чтобы не придымывать свой формат её хранения, проще использовать базу данных. Можно использовать простую базу данных, написанную на java и не требующую установки.
Таблица примерно такого вида:
WORD - слово NUM - номер слова TM - время занесения в таблицу (для определения требует ли таблица обновления) А, Б, ..., Я - число соответствующих букв в слове |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |