| imho.ws |
![]() |
|
|
|
# 1 |
|
Member
Регистрация: 22.01.2003
Сообщения: 247
![]() |
Нужна помощь.Ява.
Здрастуйте.
Вот есть файл,текстовый,там много слов,в столбик,мне надо написать программку ,которая читает строки из этого файла и записывает в другой,но в первом файле есть повторения,а мне они не нужны,как это реализовать????я вроде написал программку,но она не правильно работает,пишет такой же файл как и первый.Вот код import java.io.*; class Slovar { public static void main(String args[]) throws Exception { FileWriter fw = new FileWriter("slovarik-final.txt"); FileReader fr = new FileReader("C:/JBuilder8/samples/Welcome/slovar.txt"); BufferedReader br = new BufferedReader(fr); FileReader fr2 = new FileReader("C:/JBuilder8/samples/Welcome/slovarik-final.txt"); BufferedReader br2 = new BufferedReader(fr2); String str = br.readLine(); String str2; int i=0; while((str=br.readLine())!=null) { do { str2=br2.readLine(); if(str.equals(str2)) { i=1; } } while((br2.readLine())!=null); if(i==0); fw.write(str+'\n'); } fw.close(); } }
__________________
Кто не умеет притворяться,тот не умеет царствовать. |
|
|
|
|
# 2 |
|
KpTeaM
Регистрация: 31.10.2002
Адрес: Russia
Пол: Male
Сообщения: 3 261
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Несколько мыслей:
1) Сортируешь первый файл и при сохранении во второй сравниваешь соседние слова и не сохраняешь одинаковые (долго). (Возможно есть сортировки, предусматривающе исключение повторов) 2) Создаешь числовой массив. Берешь первое слово, нумеруешь его как 1, сравниваешь с другими, одинаковые - тоже 1, второе - с третьим и далее. Потом пробегаешь по массиву и выбираешь строки с последовательными номерами. (нужен массив, но побыстрее) --- Пока больше ничего на ум не пришло.
__________________
Над струнами вен моих Лезвия осени, Их сталь леденящая В просинь рук просится... ©Темнозорь |
|
|
|
|
# 4 |
|
KpTeaM
Регистрация: 31.10.2002
Адрес: Russia
Пол: Male
Сообщения: 3 261
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
4 миллиона DWORDов ~ 15 Mb.
3) Берешь первое слово, пробегаешь с ним по всему списку, удаляя дубли. Далее второе и т.д.
__________________
Над струнами вен моих Лезвия осени, Их сталь леденящая В просинь рук просится... ©Темнозорь |
|
|
|
|
# 6 | |
|
Junior Member
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129
![]() |
Цитата:
)java.util.* -- Есть богатый набор классов для работы с коллекциями. Среди них есть классы поддерживающие хэш и деревья. Кроме того имеются даже классы с сохранением порядка добавления элементов. Хэш и дерево (есть ещё множество -- Set) не допускают наличия двух одинаковых элементов -- как раз что тебе нужно! Просто при чтении файла добавляешь всё в коллекцию, а потом пробегаешь её итератором и скидываешь всё в выходной файл. В зависимости от выбранного класса будет различатся скорость добавления элемента и сканирования коллекции. Дерево выглядит наиболее подходящим + получишь отсортированный словарь. |
|
|
|
|
|
# 8 |
|
Junior Member
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129
![]() |
Oracul
1) Увеличь swap (не более 200-300 Мб) 2) Выкинь из памяти всякую муть. 3) Зарежь память самому JBuilder-у (это сложный вопрос, нужно в его личном JSDK добавить параметр -Xm128, кажется) 4) Запускай программу при выгруженном JBuilder (но это только для большх проектов. Хотя запуск твоей проги приведёт к лишним 16-32 Мб -- отдельный экземпляр java + куча вспомогательных классов и твоя программа) 5) Смени JBuilder на что попроще. P.S. Трудно поставить диагноз заочно... |
|
|
|
|
# 12 |
|
Junior Member
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129
![]() |
Oracul
Да незачто. В 98-х время делится между процессами примерно в равной мере (если они не хотят делиться). А память выделяется сколько надо пока она есть. Под памятью понимается вся RAM (кроме ядра) и виртуальная (swap). Отличие от NT в том, что в 98 память задачи не защищена от других задач (если что-то начинает выпендриваться, то с лёгкостью завалит всю машину). Java при запуске любит создавать отдельный экземпляр для каждой своей программы. При этом загружаются базовые и вспомогательные классы (где-то 8-32 Мб в зависимости от использования пакетов и java-программы). Поэтому три параллельно запущенных java-приложения обычно запускаются в своей java-песочнице (контейнере). Таким образом съедается драгоценная память (это вам не Perl). Можно запускать всё в одном экземпляре JRE, но тогда снижается надёжность (что-то типа аналога различия NT и 98). В случае средств разработки IDE (JBuilder) и приложение мало того что запускаются в различных JRE, так эти JRE могут иметь разные версии (и даже располагаться на различных компьютерах). Такие пакеты как Oracle 9 для надёжности запускают экземпляр JRE (когда нужно) на каждого пользователя -- память при этом кончается очень быстро. P.S. Для нормальной разработки приложений нужно *** Мб RAM: простое -- 256 Мб J2EE без бызы данных (IDE + разрабатываемая программа) -- 512 Мб J2EE (AppServer) + DB (Oracle 9) + IDE (всё запускается на одном PC) -- 768/1024 Мб Вот откуда взялось выражение "Жava давит" "Java очень любит RAM. Отчего и почему сам я толком не пойму."
|
|
|
|
|
# 13 |
|
Member
Регистрация: 22.01.2003
Сообщения: 247
![]() |
Я еще новичок,и только только изучил Яву,и поэтому немного знаю.Не мог бы ты обьяснить,чем отличаеться ЕЕ от SE ,всмысле,что есть в ЕЕ чего нету в SE и что такое база данных,что в ней содержиться,и зачем нужно с ней работать?на примере Oracle 9
__________________
Кто не умеет притворяться,тот не умеет царствовать. |
|
|
|
|
# 14 |
|
Junior Member
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129
![]() |
Oracul
Эх... В мире Java существует 3-ри направления ME, SE и EE -- соответственно Micro, Standard и Enterprise Edition. Стандартная редакия скорее является маин-стреам. Микро редакция это для маленьких устройств (мобильник, стиральная машина...) а EE вариант просто сверх навороченная добавка поверх SE (в последнее время становиться всё толще и толще). Обычно SE связывают с клиентскими приложениями (Swing, Applet...) а EE с такими *страшными* словами как Application Server, JSP, EJB (BMP, CMP)... http://ru.sun.com/win/java/ База данных. Есть данные, их нужно где-то хранить. Мало того что их надо где-то хранить, так с ними нужно ещё и работать -- выборка, поиск, обновление... Вот для этого и существуют базы дынных (DataBase - DB, RDBMS). Кстати, если нужна DB, то не обезательно сразу начинать с Oracle -- это база данных для профессионального использования (хотя скорее уровня предприятия). Не так давно произошло слияние SAP DB и MySQL -- версии к 5-ой MySQL превратится во вполне серёзную базу данных (но будет куда легче Oracle). Ещё существует PointBase (www.pointbase.com) -- DB 100% на Java. В самом скромном случае можно использовать тот-же Access или даже Excel (через JDBC-ODBC порт). P.S. SE + Tomcat (JSP) = лёгкий вариант для EE приложений. Совсем НЕ обязательно использовать самые последние и модные слова. ПО должно отвечать своему назначению а не веяниям моды и амбициям разработчика/менеджера. |
|
|
|
|
# 15 | |
|
Member
Регистрация: 22.01.2003
Сообщения: 247
![]() |
Цитата:
Это то я все понимаю,у меня вопрос в другом,что представляют из себя базы данных???
__________________
Кто не умеет притворяться,тот не умеет царствовать. |
|
|
|
|
|
# 16 |
|
Junior Member
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129
![]() |
Oracul
Есть два основных варианта (есть ещё, но это либо старо либо специфично): * Реляционные (RDBMS) -- куча таблиц с записями (фиксированный набор полей) * Объектные -- в чистом виде мало, иногда применяется как надстройка над реляционными (JDO) Основная масса приложений использует RDBMS (MySQL, Oracle, SAP DB, MS SQL Server, Access, PointBase...) Проще изучи SQL-92 и тебе станет понятно что есть база данных. Или сформулируй вопрос по другому, более конкретно (лучше создать или найди соответствующий топик** ). |
|
|