Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбить файл на блоки 
:(
    Опции темы
MasterOfCode
Дата 8.2.2011, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: нет
Всего: 27



День добрый.
Подскажите пути решения проблемы:
Есть файл:
Код

~abcd
any text here
any text here
~efgh
any text here
any text here
any text here
~ijk
any text here
any text here

Как мне считать данный файл разбив его на блоки (String[]) через раздилитель "~"?

Это сообщение отредактировал(а) MasterOfCode - 8.2.2011, 08:46


--------------------
user posted image
PM ICQ   Вверх
techmax
Дата 8.2.2011, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.9.2007
Где: Красноярск

Репутация: 2
Всего: 2



прочитали файл
Код

 readStream = new BufferedReader(new InputStreamReader(new java.io.FileInputStream(file)));
String s = "";
 while ((inputStr = readStream.readLine()) != null){
s+=inputStr;
}

разделили
Код

s.split("~")


PM MAIL Skype   Вверх
Kircul
Дата 8.2.2011, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 20.2.2007

Репутация: 6
Всего: 7



techmax, никогда больше так не делайте. Если необходимо проводить конкатенацию строк неопределенное кол-во раз используйте StringBuilder или StringBuffer.
PM   Вверх
MasterOfCode
Дата 8.2.2011, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


elwin
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 24.4.2008
Где: World.Russia.Tyum en

Репутация: нет
Всего: 27



 Дак как все таки правильно?


--------------------
user posted image
PM ICQ   Вверх
_Y_
Дата 8.2.2011, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1651
Регистрация: 27.11.2006

Репутация: 5
Всего: 34



Если файл очень большой и поэтому обработка его предполагается по мере чтения (поблочно), я бы использовал такой алгоритм в каждом цикле чтения:

1. inputStr.split("~", 2);
2. если размер полученного массива равен 1, добавляем строку в буфер (StringBuffer) и идем читать следующую строку. Если 2 - продолжаем (идем к п.3).
3. добавляем первый член массива в буфер.
4. Обрабатываем содержимое буфера как надлежит.
5. Опустошаем буфер. 
6. Присваиваем inputStr значение второго члена массива
7. Возвращаемся к п.1 не читая следующую строку.

По окончании чтения (по достижении конца фаила) обрабатываем содержимое буфера как надлежит.







--------------------
Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:)
PM MAIL WWW   Вверх
techmax
Дата 9.2.2011, 04:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.9.2007
Где: Красноярск

Репутация: 2
Всего: 2



Как правильно зависит от твоей задачи.(размера выделенной памяти и размера файла).
1. Если это небольшая задача то хватит и моего примера. дальше можно и не заморачиваться.
   единственное можешь поменять конкатенацию String' гов на StringBuilder( для небольшого числа сложений разница не принципиальна)
2. Если же размеры имеют значение то вариациями алгоритма приведенного _Y_. (если использовать indexOf и substring вроде должно работать быстрее)


PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0780 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.