Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите написсать прогу!!!(очень нужно , очень срочно:() / 25 сообщений из 37, страница 1 из 2
22.09.2007, 03:08:58
    #34819240
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
буду очень благодарна если поможете написать задачку с XML..:
2) Реализовать быстрый поиск телефона по фамилии без учета регистра символов. Справочник хранится в XML файле со следующей структурой.

<phonebook>
<entry>
<firstname>Mark</firstname>
<surname>Twain</surname>
<number>+375 29 632494</number>
</entry>
<entry>
<firstname>Jo</firstname>
<surname>Dirty</surname>
<number>+375 29 332494</number>
</entry>
<entry>
<firstname>Andy</firstname>
<surname>Ham</surname>
<number>+375 29 623494</number>
</entry>

</phonebook>
...
Рейтинг: 0 / 0
22.09.2007, 11:44:07
    #34819356
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Тема вознагрождения не раскрытк
...
Рейтинг: 0 / 0
22.09.2007, 13:27:47
    #34819417
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
шчырая беларуская БЛАГОДАРНОСТЬ!!
:)
...
Рейтинг: 0 / 0
22.09.2007, 15:44:35
    #34819493
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Первый вопрос, я подозреваю — "как прочитать XML из файла"?
...
Рейтинг: 0 / 0
22.09.2007, 17:22:10
    #34819554
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
сознаюсь откровенно..мое представление об XML весьма поверхностно...и если я ещё смогу составить такой документ..то как реализовать поиск(или даже чтение) понему из JAVA никакого понятия вообще не имею:( так что буду очень благодарна если поможете(потому как нужно срочно) и посоветуете какую литературу толковую по этому вопросу, потому как разбираться все равно надо
...
Рейтинг: 0 / 0
22.09.2007, 17:49:10
    #34819564
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Например, так (с помощью SaxParser).

Код: plaintext
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
 package  com.forward.test.goods;

 import  java.io.*;

 import  javax.xml.parsers.*;

 import  org.xml.sax.*;
 import  org.xml.sax.helpers.*;

 public   class  PhoneBookReader  extends  DefaultHandler
{
     private  String stringToSearch;
     private   final  String searchableTag = "surname";
     private   final  String dataTag = "number";
     public  PhoneBookReader (String search)
    {
         this .stringToSearch = search;
    }

     private  StringBuffer valueBuffer =  new  StringBuffer();

     private   boolean  found = false;
     private   boolean  getPhone = false;
     private  String lastSurname;


     public   void  endElement (String uri, String name, String qName)
             throws  SAXException
    {
        String val = valueBuffer.toString().trim();
         if  (val.length() >  0 ) {
             if  (qName.equals( this .dataTag)) {
                 if  (getPhone) {

                    System.out.println("FOUND PHONE '" + val + "' for '" + lastSurname + "'");
                    found = true;
                    getPhone = false;
                }
            }
             if  (qName.equals( this .searchableTag)) {
                 if  (val.equalsIgnoreCase( this .stringToSearch)) {
                    getPhone = true;
                    lastSurname = val;
                }
            }
        }
        valueBuffer =  new  StringBuffer();
    }

     public   void  characters ( char  ch[],  int  start,  int  length)
    {
         for  ( int  i = start; i < start + length; i++) {
             switch  (ch[i]) {
             case  '\\':
                 break ;
             case  '"':
                 break ;
             case  '\n':
                 break ;
             case  '\r':
                 break ;
             case  '\t':
                 break ;
             default :
                valueBuffer.append(ch[i]);
                 break ;
            }
        }
    }


     public   static   void  main (String args[])
             throws  Exception
    {
         if  (args.length !=  2 ) {
            System.out.println("Use PhoneBookReader <filename> <surnane>");
             return ;
        }  else  {

            System.out.println("Searching '" + args[1] + "' in file '" + args[0] + "'");

            PhoneBookReader reader =  new  PhoneBookReader(args[ 1 ]);

            SAXParserFactory factory = SAXParserFactory.newInstance();
            factory.setValidating(false);
            SAXParser parser = factory.newSAXParser();

            parser.parse( new  File(args[ 0 ]), reader);

             if  (!reader.found) {
                System.out.println("NO PHONES FOUND");
            }
        }
    }
}
...
Рейтинг: 0 / 0
22.09.2007, 17:49:36
    #34819566
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Тьфутымля. Опять логин менять придеццо.
...
Рейтинг: 0 / 0
22.09.2007, 18:33:18
    #34819585
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
спасибо огромное!!
буду пытаться разбираться!!кстати, а в куда указывается файл чтения XML?т.е. куда прописывать где лежит мой справочник..как аргумент?тогда почему там на 2 элемента запрос...туплю...
?
...
Рейтинг: 0 / 0
23.09.2007, 11:29:47
    #34819838
maddcast
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Простой выход: XQEngine
Более функциональный: eXist
...
Рейтинг: 0 / 0
23.09.2007, 12:14:10
    #34819866
untitled
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
а вы не слишком все усложняете?
почему бы не сделать простой парсинг текста, ведь тут по сути поный разбор хмля не нужен.
например как то так:

Код: plaintext
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.
36.
 public   class  ooo {

     private   static  String getFileContent() {
         return  "<phonebook>\n" +
                "<entry>\n" +
                "<firstname>Mark</firstname>\n" +
                "<surname>Twain</surname>\n" +
                "<number>+375 29 632494</number>\n" +
                "</entry>\n" +
                "<entry>\n" +
                "<firstname>Jo</firstname>\n" +
                "<surname>Dirty</surname>\n" +
                "<number>+375 29 332494</number>\n" +
                "</entry>\n" +
                "<entry>\n" +
                "<firstname>Andy</firstname>\n" +
                "<surname>Ham</surname>\n" +
                "<number>+375 29 623494</number>\n" +
                "</entry>\n" +
                "</phonebook>";
    }

     public   static  String getTelNumber(String surname) {
         try  {
             return  getFileContent().toLowerCase().split("<surname>" + surname.toLowerCase(),  2 )[ 1 ].split("</number>",  2 )[ 0 ].split("<number>",  2 )[ 1 ];
        }  catch  (ArrayIndexOutOfBoundsException e) {
             return   null ;
        }
    }

    //example
     public   static   void  main(String args[]) {
        System.out.println(getTelNumber("twain"));
    }

}

и все, этого мне кажется вполне достаточно)
...
Рейтинг: 0 / 0
23.09.2007, 13:06:12
    #34819900
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
untitled
и все, этого мне кажется вполне достаточно)
XML подразумевает произвольное форматирование данных внутри тэгов.
Код: plaintext
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.
<phonebook>

<entry>
     <firstname>
          Mark
     </firstname>
     <surname>
          Twain
     </surname>
     <number>+ 375   29   632494 </number>
</entry>
<entry>
     <firstname>
Jo</firstname>
     <surname>
          Dirty
               </surname>
     <number>
               + 375   29   332494 
          </number>
</entry>
<entry>
     <firstname>
          Andy
     </firstname>
     <surname>
          Ham
     </surname>
     <number>
          + 375   29   623494 
     </number>
</entry>
…
</phonebook>
...
Рейтинг: 0 / 0
23.09.2007, 13:08:09
    #34819901
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
untitled
и все, этого мне кажется вполне достаточно)
К тому же ваше решение мгновенно отсасывает как только телефонный номер начинает идти раньше фамилии.
...
Рейтинг: 0 / 0
23.09.2007, 14:38:07
    #34819968
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Софтверный проктолог:
спасибо огромное, такое решение то что надо!!разобралась что куда надо списывать:)

и вооще всем огромное спасибо за отзывчивость!!
...
Рейтинг: 0 / 0
23.09.2007, 23:12:41
    #34820324
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Для быстрого поиска надо для начала проиндексировать файл. Тоесть выбрать ключевое поле, отсортировать по нему, а потом использовать алгоритм бинарного поиска. Иначе получится просто телефонный справочник в XML.

Если допустимо зачитать весь XML в память и уже в ней искать, то задача сильно упрощается.

Код: plaintext
Meo voto
...
Рейтинг: 0 / 0
23.09.2007, 23:44:33
    #34820332
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
учитывая то что я полный чайник в XML..а метод которым решили выше не аодходит?(я и в нем то если честно пока не ахти...тока скомпилировала)
...
Рейтинг: 0 / 0
23.09.2007, 23:58:00
    #34820336
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Ох, давай аську, или ко мне стучись. Расскажу немного.
...
Рейтинг: 0 / 0
24.09.2007, 02:42:14
    #34820371
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
к тебе в асю постучаться не получилось--по такому номеру никто не проживает
так что стучись ко мне: 172052195(тока када будешь стучаться отпиши что это ты..а то в сети много турков):)
вопросов у меня море!!;)
...
Рейтинг: 0 / 0
24.09.2007, 09:31:41
    #34820529
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
everestк тебе в асю постучаться не получилось--по такому номеру никто не проживает
так что стучись ко мне: 172052195(тока када будешь стучаться отпиши что это ты..а то в сети много турков):)
вопросов у меня море!!;)
Надо перемножить просто было=)

Я к тебе стукнулся, но сейчас убегу. Буду во второй половине дня.
...
Рейтинг: 0 / 0
24.09.2007, 12:58:27
    #34821137
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
SarinДля быстрого поиска надо для начала проиндексировать файл. Тоесть выбрать ключевое поле, отсортировать по нему, а потом использовать алгоритм бинарного поиска. Иначе получится просто телефонный справочник в XML.

Если допустимо зачитать весь XML в память и уже в ней искать, то задача сильно упрощается.
Это когда нам нужно искать на заданном наборе данных более одного раза в единожды запущенном приложении.
Ты уверен, что студентам это нужно?
...
Рейтинг: 0 / 0
24.09.2007, 13:19:45
    #34821217
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Я уверен в том, что написано про быстрый поиск. Значит надо делать быстрый поиск:)
...
Рейтинг: 0 / 0
24.09.2007, 13:26:07
    #34821239
Софтверный проктолог
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
SarinЯ уверен в том, что написано про быстрый поиск. Значит надо делать быстрый поиск:)
Ставлю 50$, что в одиночном прогоне мой вариант будет работать в среднем в 2 раза быстрее твоего (с полным сканированием и построением индекса). А если ты будешь строить еще и DOM модель, а потом искать через XPath — втрое.
...
Рейтинг: 0 / 0
24.09.2007, 13:51:44
    #34821331
everest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
гыг
это тестовое задание на курсы по джаве..вощем я уже отправила..мне б терь к собеседованию разобраться в программе....
...
Рейтинг: 0 / 0
24.09.2007, 14:23:30
    #34821444
untitled
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Софтверный проктолог
XML подразумевает произвольное форматирование данных внутри тэгов.
К тому же ваше решение мгновенно отсасывает как только телефонный номер начинает идти раньше фамилии.


ок, а если так) :

Код: plaintext
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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
 import  java.util.HashMap;
 import  java.util.HashSet;
 import  java.util.Set;

 public   class  PhoneBook {

     private  HashMap<String, Set<BookEntry>> cache =  new  HashMap<String, Set<BookEntry>>();

     class  BookEntry {
         private  String firstname;
         private  String surname;
         private  String number;

         public  String toString() {
             return  firstname + " " + surname + " " + number;
        }

         public  String getFirstname() {
             return  firstname;
        }

         public   void  setFirstname(String firstname) {
             this .firstname = firstname;
        }

         public  String getSurname() {
             return  surname;
        }

         public   void  setSurname(String surname) {
             this .surname = surname;
        }

         public  String getNumber() {
             return  number;
        }

         public   void  setNumber(String number) {
             this .number = number;
        }
    }

     public  PhoneBook() {
        String[] entries = getFileContent().split("<entry>");
         for  ( int  i =  1 ; i < entries.length; i++) {
            String tmp = entries[i];
            BookEntry entry =  new  BookEntry();
             try  {
                entry.setFirstname(tmp.split("<firstname>")[ 1 ].split("</firstname>")[ 0 ].trim());
            }  catch  (ArrayIndexOutOfBoundsException e) {/**/}
             try  {
                entry.setSurname(tmp.split("<surname>")[ 1 ].split("</surname>")[ 0 ].trim());
            }  catch  (ArrayIndexOutOfBoundsException e) {/**/}
             try  {
                entry.setNumber(tmp.split("<number>")[ 1 ].split("</number>")[ 0 ].trim());
            }  catch  (ArrayIndexOutOfBoundsException e) {/**/}

             if  (cache.containsKey(entry.getSurname())) {
                cache.get(entry.getSurname().toLowerCase()).add(entry);
            }  else  {
                HashSet<BookEntry> set =  new  HashSet<BookEntry>();
                set.add(entry);
                cache.put(entry.getSurname().toLowerCase(), set);
            }
        }

    }

     private  String getFileContent() {
        StringBuffer t = new  StringBuffer("<phonebook>\n" +
                "<entry>\n" +
                "<firstname>Mark</firstname>\n" +
                "<surname>Twain</surname>\n" +
                "<number>+375 29 632494</number>\n" +
                "</entry>\n");
         for  ( int  i =  0 ; i <  10000 ; i++) {
            t.append("<entry>\n" +
                    "<firstname>" + ( char ) i + "</firstname>\n" +
                    "<surname>" + ( char ) (i + i) + "</surname>\n" +
                    "<number>" + ( int ) (i + i /  2 ) + "</number>\n" +
                    "</entry>\n");
        }
        t.append("</phonebook>");
         return  t.toString();
    }


     public  Set<BookEntry> findEntries(String surname) {
         return  cache.get(surname.toLowerCase());
    }

    //example
     public   static   void  main(String args[]) {
        PhoneBook book =  new  PhoneBook();
         for  (BookEntry e : book.findEntries("twain")) {
            System.out.println(e);
        }
    }

}
...
Рейтинг: 0 / 0
24.09.2007, 14:41:20
    #34821544
jusio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
2 untitled

А где так учат код писать?
...
Рейтинг: 0 / 0
24.09.2007, 15:15:56
    #34821685
Sarin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите написсать прогу!!!(очень нужно , очень срочно:()
Софтверный проктолог SarinЯ уверен в том, что написано про быстрый поиск. Значит надо делать быстрый поиск:)
Ставлю 50$, что в одиночном прогоне мой вариант будет работать в среднем в 2 раза быстрее твоего (с полным сканированием и построением индекса). А если ты будешь строить еще и DOM модель, а потом искать через XPath — втрое.
В одиночном - да.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Помогите написсать прогу!!!(очень нужно , очень срочно:() / 25 сообщений из 37, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]