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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск совпадений в текстовом файле, Как найти все вхождения подстроки 
:(
    Опции темы
mixt73
Дата 27.3.2014, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день! Написала код, который считывает выбранный текстовый файл и отображает в текстовом поле. Текстовый файл содержит информацию в виде блоков типа:
--- 27.01.2014 14:40:10 ---
        Array
(
    [Ticket] => 2010
    [Count] => 2
    [Phone] => 12
    [Mail] => 12
    [Id_PT] => 3
    [date] => 16.06.2013
    [HASH] => eeeeeeeeeeeeeeeeeeeeeeeeee12
    [Logger_date] => 01.27.2014 14:40:10
)
Нажав на кнопку, пользователь вводит параметр поиска в отображенном тексте. Нужно найти все совпадения и отобразить их в другом текстовом поле, причем отобразить вместе с привязанной информацией(то есть тоже блоком). Застряла на обработке кнопки ФИЛЬТР (but4). Помогите, пожалуйста!
Код

public class ReadLog extends JFrame{
  private static String dir_patch = "";
    public static void main(String args[]){
    
        JFrame frame = new JFrame("Работа с текстовым файлом");
        frame.setVisible(true);
        frame.setSize(1200, 1000);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());

        JPanel pan1 = new JPanel();
        JPanel pan2 = new JPanel();
        
        pan2.setLayout(new BoxLayout(pan2, BoxLayout.X_AXIS));
        frame.getContentPane().add(pan1, BorderLayout.NORTH);
        frame.getContentPane().add(pan2, BorderLayout.CENTER);
        
        JButton but1 = new JButton("Загрузить");
        JButton but2 = new JButton("Сохранить");
        JButton but3 = new JButton("Очистить");
        JButton but4 = new JButton("Фильтр");
        JButton but5 = new JButton("Очистить фильтр");
        pan1.add(but1);
        pan1.add(but2);
        pan1.add(but3);
        pan1.add(but4);
        pan1.add(but5);
        
        final JTextArea field1 = new JTextArea();
        field1.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
        final JTextArea field2 = new JTextArea();
        field2.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
        JScrollPane scr = new JScrollPane(field1);
        JScrollPane scr2 = new JScrollPane(field2);
        pan2.add(scr);
        pan2.add(scr2);
        
         but1.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent event){
           JFileChooser myChoos = new JFileChooser();
       myChoos.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
       int res = myChoos.showDialog(null, "Загрузить");
       if (res == JFileChooser.APPROVE_OPTION){
           try{
         File file = myChoos.getSelectedFile();   
         FileReader fr = new FileReader(dir_patch + "\\" + file);
         BufferedReader in = new BufferedReader(fr);
         field1.read(fr, null);
         in.close();
         field1.requestFocus();
         }  
           catch (IOException e){} 
       }}      
      });  
      but2.addActionListener(new ActionListener(){
       public void actionPerformed (ActionEvent event){
           try{
         FileWriter f = new FileWriter("C:\\Users\\oorlova\\Desktop\\Newtext.txt", true);
         PrintWriter out = new PrintWriter(f);
         out.print(field1.getText());
         out.close();
       }
           catch (IOException e){}
       } });
      but3.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent event){
         field1.setText("");
        }
     });
      but4.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent event){      
        String input = JOptionPane.showInputDialog("Введите параметры поиска");
         try{
        int myLen = field1.getText().length();
        for (int x = 0; x < myLen; x++){
        int inp1 = field1.getText().indexOf(input, field1.getText().indexOf(input) + x);
        for(int y = 0; y <= x; y++){
        int inp2 = field1.getText().lastIndexOf("[Ti", inp1 + y);
        int inp3 = field1.getText().indexOf(")", inp1 + y);
        String str = field1.getText().substring(inp2, inp3);
        field2.append(str + "\n");} 
             }}
         catch(Exception e){field2.append("Индекс строки выходит за диапазон -1");}
        }  
    });
       but5.addActionListener(new ActionListener(){
        public void actionPerformed (ActionEvent event){
         field2.setText("");
        }
     });   
    }
}

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


Опытный
**


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

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



Господи, как вы с этим текстом работаете?
Вот он-же но приведенный с стандартному виду (только фрагмент)
Код

            public void actionPerformed(ActionEvent event) {
                String input = JOptionPane.showInputDialog("Введите параметры поиска");
                try {
                    int myLen = field1.getText().length();
                    for (int x = 0; x < myLen; x++) {
                        int inp1 = field1.getText().indexOf(input, field1.getText().indexOf(input) + x);
                        for (int y = 0; y <= x; y++) {
                            int inp2 = field1.getText().lastIndexOf("[Ti", inp1 + y);
                            int inp3 = field1.getText().indexOf(")", inp1 + y);
                            String str = field1.getText().substring(inp2, inp3);
                            field2.append(str + "\n");
                        }
                    }
                } catch (Exception e) {
                    field2.append("Индекс строки выходит за диапазон -1");
                }
            }
        };



А вообще я структуру не понял. Вам надо найти 
1. введенный фрагмент
2. начало блока в котором найден фрагмент
3. конец блока
Давайте будем искать:
Код

            public void actionPerformed(ActionEvent event) {
                String input = JOptionPane.showInputDialog("Введите параметры поиска");
                //Копируем текст что бы не бегать туда постоянно
                String text = field1.getText();
                //находим первое вхождение
                int pos= text.indexOf(input);
                int posStart=0,posEnd=0;
                //Это единственный цикл, который крутится пока есть подстроки
                for (;pos>=0;pos= text.indexOf(input,posEnd+1)){
                    //Ищем последнее вхождение открытия блока ДО pos
                    posStart=text.substring(0, pos).lastIndexOf("[Ti");
                    //Но вообще-то неплохо бы прихватить и скобку до того
                    posStart=text.substring(0, posStart).lastIndexOf("(");
                    //Теперь ищем конец. Для него у нас признака особого нет. Будем считать, что 
                    //закрывающиеся скобки бывают только при закрытии блока
                    posEnd = text.indexOf(")");
                    //Копируем фрагмент. +1 нужен потому, что символ, номер которого указан как последний - не копируется.
                    field2.append(text.substring(posStart, posEnd+1) + "\n");
                }
            }


Честно говоря я этот фрагмент не тестировал, но по идее должен работать.


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

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

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


 




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


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

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