0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
1

Как Считать данные из txt файла с условием?

15.07.2017, 07:26. Показов 7663. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Помогите разобраться в каком направлении двигаться.
Необходимо прочитать и вывести на экран часть содержимого текстового документа
Пример текстового файла
Москва:
ул_Ленина: 12, 3, 8
ул_Правды: 1, 8
ул_ Космонавтов: 151, 45, 8

Питер:
ул_Ленина: 1, 63, 81
ул_Правды: 111, 7
ул_ Космонавтов: 1, 4, 171

Вывести на экран построчно все содержимое я могу, НО у меня задача:
Найти в текстовом документе строку после Питера и вывести на экран. Чтоб на выходе получилось
ул_ Космонавтов:
1,
4,
171
Затруднение состоит в том, что наименование улиц одинаково, что в Москве и что в Питере.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2017, 07:26
Ответы с готовыми решениями:

Напишите кусок программы - "Как считать данные из doc файла"
Здравствуйте! Что нужно... Надо следующее........ Откройте пустой doc файл. Создайте в нём...

Как из файла txt считать данные в массив?
Добрый день. С с++ у меня очень плохо, но срочно нужно сделать одну вещь. Есть файл file.txt, в...

Как считать данные из txt файла, из определенной строки,столбца?
i=0 Do Until EOF(2) Line Input #2, mytext Dannie(i)=mytext i=i+1 loop Наверняка...

Считать данные из текстового файла
Здравствуйте форумчане у меня есть разделенная БД, сотрудники отдела АДМ(назовем так) пополняют...

21
82 / 82 / 50
Регистрация: 22.09.2012
Сообщений: 495
15.07.2017, 12:06 2
Гендальф Белый, проверяйте строки на наличие слова "Питер" и только после этого выводите названия улиц
0
126 / 113 / 56
Регистрация: 05.12.2012
Сообщений: 463
15.07.2017, 12:39 3
На скололько я понял, Вам нужно вывести последний адрес искомого города. Я бы как-то так седлал:
Java
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
if (!myReader.hasNext()) {
    System.out.println("empty file");
    System.exit(0);
}
 
String targetCity = "Питер";
String curCity = myReader.readLine().split(":")[0];
 
String prevLine = "";
 
while (myReader.hasNext()) {
    String line = myReader.readLine();
    
    if (line == "") {
        if (targetCity == curCity) {
            String[] address =  prevLine.split(" ");
        
            for (int i = 0; i < address.length; i++){
                System.out.println(address[i]);
            }
        } else if (myReader.hasNext()) {
            curCity = myReader.readLine().split(":")[0];
        }
    }
 
    prevLine = line;
}
1
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
16.07.2017, 01:56 4
Все что Вам надо так это 2 переменные:

То что я загнал в список - это Ваш список из файла...
для примера как найти смотрите и пользуйтесь...
В переменной задаете параметр города и улицы искомой и он все находит.

Java
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
public void JavaApp() throws Exception {
 
        String[] arrayData = {
            "Москва:",
            "ул_Ленина: 12, 3, 8",
            "ул_Правды: 1, 8",
            "ул_ Космонавтов: 151, 45, 8",
            "Питер:",
            "ул_Ленина: 1, 63, 81",
            "ул_Правды: 111, 7",
            "ул_ Космонавтов: 1, 4, 171"};
        ObservableList<String> rowList = FXCollections.observableArrayList(arrayData);
 
        String sitySearch = "Питер";
        String streetSearch = "Космонавтов";
 
        int gorod = 0;
        int street = 0;
 
        for (int i = 0; i <= rowList.size() - 1; i++) {
            String row = rowList.get(i);
            if (gorod > 0) {
 
                boolean isContain1 = row.contains("ул_");
                if (isContain1) {
                    //это название улицы будем тут и скать пока не дойдем до следующего города
                    if (row.contains(streetSearch)) {
                        //Ура нашли свою улицу - запомним индекс в списке.
                        street = i;
                    }
                } else { //а это уже название другого города и он нам не интересен... очистим город и выведем что получили..  
                    break;
                }
            } else {
                //а это уже название города и он нам интересен...
                if (row.contains(sitySearch)) {
                    //Ура нашли свою улицу - запомним индекс в списке.
                    gorod = i+1;
                }
            }
 
        }
        System.out.println("Найден следующий адрес: " + rowList.get(gorod-1) + " " + rowList.get(street));
    }
Добавлено через 15 секунд
Все что Вам надо так это 2 переменные:

То что я загнал в список - это Ваш список из файла...
для примера как найти смотрите и пользуйтесь...
В переменной задаете параметр города и улицы искомой и он все находит.

Java
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
public void JavaApp() throws Exception {
 
        String[] arrayData = {
            "Москва:",
            "ул_Ленина: 12, 3, 8",
            "ул_Правды: 1, 8",
            "ул_ Космонавтов: 151, 45, 8",
            "Питер:",
            "ул_Ленина: 1, 63, 81",
            "ул_Правды: 111, 7",
            "ул_ Космонавтов: 1, 4, 171"};
        ObservableList<String> rowList = FXCollections.observableArrayList(arrayData);
 
        String sitySearch = "Питер";
        String streetSearch = "Космонавтов";
 
        int gorod = 0;
        int street = 0;
 
        for (int i = 0; i <= rowList.size() - 1; i++) {
            String row = rowList.get(i);
            if (gorod > 0) {
 
                boolean isContain1 = row.contains("ул_");
                if (isContain1) {
                    //это название улицы будем тут и скать пока не дойдем до следующего города
                    if (row.contains(streetSearch)) {
                        //Ура нашли свою улицу - запомним индекс в списке.
                        street = i;
                    }
                } else { //а это уже название другого города и он нам не интересен... очистим город и выведем что получили..  
                    break;
                }
            } else {
                //а это уже название города и он нам интересен...
                if (row.contains(sitySearch)) {
                    //Ура нашли свою улицу - запомним индекс в списке.
                    gorod = i+1;
                }
            }
 
        }
        System.out.println("Найден следующий адрес: " + rowList.get(gorod-1) + " " + rowList.get(street));
    }
Добавлено через 7 минут
единственное условие Вам текст надо подгружать массивом строк. И если Ваш текст записан в одну строку - тогда необходимо задавать условие чтоб разложить его на строки согласно знакам типа ":", либо как в моем случае логически вычисляя "ул", но это сложная модель - и необходима структура текстового файла строго определенная, в которой разделители есть между улицей и городом, например "#". Ну или же вообще простой вариант - только такой как вы и представили - текстовый файлик записан столбиком и тогда разделитель это перенос строки.

Добавлено через 5 минут
о кстати есть косяк в моем коде... там если улицу не найдет будет выводить то что в нулевом индексе потому поставьте условие проверки...
типа вот такого...
Java
1
2
3
4
5
if (street == 0) {
          System.out.println("Улица не обнаружена в списке, данную запись нефиг выводить было");  
        }else{
          System.out.println("Найден следующий адрес: " + rowList.get(gorod-1) + " " + rowList.get(street));  
        }
0
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
16.07.2017, 07:17  [ТС] 5
Уважаемый DMV78, !
А как добавить в массив String[] arrayData данные из файла?
В примере вы жестко прописали.

Добавлено через 3 минуты
kushok,
Правильно ли я понял что !myReader у вас это переменная, куда записались данные из файла?
Прости те за такой вопрос, трудно мне сориентироваться когда код не сначала )))

Я начинающий программист, и чем больше методов решения задач я узнаю, тем легче будет в работе )))

Добавлено через 7 минут
Я так понимаю данные нужно занести в переменные чтоб вывести на каждой строчке?
ул_ Космонавтов:
1,
4,
171
0
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
16.07.2017, 15:26 6
Лучший ответ Сообщение было отмечено Гендальф Белый как решение

Решение

Ну ловите: только надо было сразу писать что вы не знаете как считывать из файла данные...

JavaFX поиск в текстовом файле + выбор файла

Главный класс ImportTXT:

Java
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
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
 
/**
 *
 * @author GREEN
 */
public class ImportTXT extends Application {
    
    @Override
    public void start(Stage stage) throws Exception {
        
            Parent root = FXMLLoader.load(getClass().getResource("/importtxt/TopForm.fxml"));
            Scene scene = new Scene(root);
            stage.setScene(scene);
            stage.initStyle(StageStyle.UNDECORATED);
    //       stage.setTitle("Импорт из текстового файла");
            stage.setMinWidth(600);
            stage.setMinHeight(400);
            stage.show();
    }
 
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }
    
}
Форма FXML "TopForm"

HTML5
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
<?xml version="1.0" encoding="UTF-8"?>
 
<?import com.jfoenix.controls.*?>
<?import javafx.geometry.*?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
 
<BorderPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" style="-fx-border-color: #777777;" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="importtxt.TopFormController">
   <top>
      <HBox prefHeight="32.0" prefWidth="600.0" style="-fx-background-color: #777777;" BorderPane.alignment="CENTER">
         <children>
            <Label alignment="CENTER" prefHeight="32.0" prefWidth="574.0" text="Импорт файла TXT" HBox.hgrow="ALWAYS">
               <HBox.margin>
                  <Insets left="25.0" />
               </HBox.margin>
            </Label>
            <Button cancelButton="true" mnemonicParsing="false" onAction="#clickClose" style="-fx-background-color: #777777;" text="x" />
         </children>
      </HBox>
   </top>
   <center>
      <VBox prefHeight="200.0" prefWidth="100.0" BorderPane.alignment="CENTER">
         <children>
            <HBox prefHeight="40.0" prefWidth="590.0" spacing="10.0">
               <children>
                  <TextField fx:id="fileSearch" prefHeight="31.0" prefWidth="394.0" HBox.hgrow="ALWAYS">
                     <HBox.margin>
                        <Insets />
                     </HBox.margin>
                  </TextField>
                  <Button mnemonicParsing="false" onAction="#addFile" text="Выбрать" />
                  <Button mnemonicParsing="false" onAction="#innFile" text="Загрузить" />
               </children>
               <VBox.margin>
                  <Insets left="5.0" right="5.0" top="10.0" />
               </VBox.margin>
            </HBox>
            <HBox prefHeight="52.0" prefWidth="590.0" spacing="10.0">
               <children>
                  <TextField fx:id="textSity" prefHeight="31.0" prefWidth="172.0" promptText="город для поиска" />
                  <TextField fx:id="textStreet" promptText="улица для поиска" />
               </children>
               <VBox.margin>
                  <Insets left="5.0" right="5.0" />
               </VBox.margin>
            </HBox>
            <HBox prefHeight="176.0" prefWidth="600.0">
               <children>
                  <ListView fx:id="samleText" prefHeight="174.0" prefWidth="600.0" HBox.hgrow="ALWAYS" />
               </children>
               <VBox.margin>
                  <Insets left="5.0" right="5.0" />
               </VBox.margin>
            </HBox>
            <HBox prefHeight="49.0" prefWidth="600.0">
               <children>
                  <Label fx:id="resultText" prefHeight="55.0" prefWidth="600.0" HBox.hgrow="ALWAYS">
                     <HBox.margin>
                        <Insets />
                     </HBox.margin>
                  </Label>
               </children>
               <VBox.margin>
                  <Insets bottom="10.0" left="5.0" right="5.0" />
               </VBox.margin>
            </HBox>
         </children>
      </VBox>
   </center>
   <bottom>
      <HBox prefHeight="37.0" prefWidth="600.0" BorderPane.alignment="CENTER">
         <children>
            <Button mnemonicParsing="false" onAction="#goSearch" prefHeight="31.0" prefWidth="158.0" text="Начать поиск" />
         </children>
         <BorderPane.margin>
            <Insets left="5.0" right="5.0" />
         </BorderPane.margin>
      </HBox>
   </bottom>
</BorderPane>
Контроллер формы TopFormController

Java
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.control.Label;
import javafx.scene.control.ListView;
import javafx.scene.control.TextField;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
 
/**
 * FXML Controller class
 *
 * @author GREEN
 */
public class TopFormController implements Initializable {
 
    @FXML
    private TextField fileSearch;
    @FXML
    private ListView<String> samleText;
    @FXML
    private Label resultText;
    @FXML
    private TextField textSity;
    @FXML
    private TextField textStreet;
    
    ObservableList<String> rowList = FXCollections.observableArrayList();
    File fileObject;
    
    
    
    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        
    }    
 
    @FXML
    private void clickClose(ActionEvent event) { 
        Node source = (Node) event.getSource();
        Stage stage = (Stage) source.getScene().getWindow();
        stage.close();
    }
 
    @FXML
    private void goSearch(ActionEvent event) {
        
        int gorod = 0;
        int street = 0;
        
         for (int i = 0; i <= rowList.size() - 1; i++) {
            String row = rowList.get(i);
            if (gorod > 0) {
 
                boolean isContain1 = row.contains("ул_");
                if (isContain1) {
                    //это название улицы будем тут и скать пока не дойдем до следующего города
                    if (row.contains(textStreet.getText())) {
                        //Ура нашли свою улицу - запомним индекс в списке.
                        street = i;
                    }
                } else { //а это уже название другого города и он нам не интересен... очистим город и выведем что получили..  
                    break;
                }
            } else {
                //а это уже название города и он нам интересен...
                if (row.contains(textSity.getText())) {
                    //Ура нашли свою улицу - запомним индекс в списке.
                    gorod = i+1;
                }
            }
 
        }
        if (street == 0) {
          resultText.setText("Улица не обнаружена в списке");
          //System.out.println("Улица не обнаружена в списке, данную запись нефиг выводить было");  
        }else{
          resultText.setText("Найден следующий адрес: " + rowList.get(gorod-1) + " " + rowList.get(street));   
         // System.out.println("Найден следующий адрес: " + rowList.get(gorod-1) + " " + rowList.get(street));  
        }
    
}
 
    @FXML
    private void addFile(ActionEvent event) {
        Node source = (Node) event.getSource();
        Stage primaryStage = (Stage) source.getScene().getWindow();
        FileChooser fileChooser = new FileChooser();
        FileChooser.ExtensionFilter tXTFilter = new FileChooser.ExtensionFilter("TXT files (*.txt)", "*.txt");
        fileChooser.getExtensionFilters().add(tXTFilter);
        fileChooser.getExtensionFilters().addAll(tXTFilter);
        fileChooser.setTitle("Выбор файла");
        fileObject = fileChooser.showOpenDialog(primaryStage);
        try {
            fileSearch.setText(fileObject.getPath()); 
        } catch (Exception e) {
 
        }
    }
    
   @FXML
    private void innFile(ActionEvent event)  {      
       try {
            //создаем BufferedReader с существующего FileReader для построчного считывания
            BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileObject),"cp1251"));
          
            // считаем сначала первую строку
            String line = reader.readLine();
            rowList.add(line);
            while (line != null) {
                // считываем остальные строки в цикле
                line = reader.readLine();
                if (line != null) {
                   rowList.add(line);  
                }
            }
        } catch (FileNotFoundException e) {
            
        } catch (IOException e) {
            
        }
       
       samleText.setItems(rowList);
        
    } 
}

А вот ссылка на видео, где я разбираю этот файл... коряво записано, но может поможет...
https://youtu.be/mnWxxZJxXPY

Добавлено через 6 минут
и еще косяк небольшой возможно будет в файле FXML я случайно при создании вставил текстовое поле из библиотеки
<?import com.jfoenix.controls.*?>. Вам надо будет возможно удалить этот импорт, если вы не устанавливали у себя данную библиотеку, но в этом проекте она и не нужна, случайно импортировал.
0
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
16.07.2017, 20:19  [ТС] 7
Больше спасибоDMV78,
0
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
18.07.2017, 06:31  [ТС] 8
Уважаемый DMV78,
А как можно вывести цифры, чтоб они были на каждой строчке
ул_ Космонавтов:
1,
4,
171
0
164 / 170 / 139
Регистрация: 28.11.2016
Сообщений: 301
18.07.2017, 07:09 9
Файл address.txt разместить там же где и класс FileMain
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
Москва:
ул_Ленина: 12, 3, 8
ул_Правды: 1, 8
ул_ Космонавтов: 151, 45, 8
 
Питер:
ул_Ленина: 1, 63, 81
ул_Правды: 111, 7
ул_Космонавтов: 1, 4, 171

Class FileMain
Кликните здесь для просмотра всего текста
Java
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
public class FileMain {
    private static String search(Scanner in, String searchString) {
        String s = null;
        boolean found = false;
        while (in.hasNext() && !found) { // ищет строку
            s = in.nextLine();
            found = s.contains(searchString);
        }
        if (!found) {
            return null;
        }
        return s;
    }
 
    public static void main(String[] args) {
        Scanner in = null;
 
        try {
            in = new Scanner(new FileInputStream(FileMain.class.getResource("address.txt").getPath()));
 
        } catch (FileNotFoundException e) {
            throw new RuntimeException("File not found " + e);
        }
 
        String s = search(in, "Питер");
        if (s == null) {
            System.out.println("Строка Питер не найдена");
        }
 
        s = search(in, "Космонавтов");
        if (s == null) {
            System.out.println("Строка Космонавтов не найдена");
        }
 
        String[] ss = s.split(" "); // разбить по пробелам или переносам
        for (String s1 : ss) {
            System.out.println(s1);
        }
 
    }
}

Смотрите код.
1
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
18.07.2017, 07:23 10
так же, после того как нашли улицу сокращать строку, в поисках разделителя "," запятые. Нашли первую цифру - после ":" это будет первый индекс поиска, и далее все что между запятыми это номера домов... split, split, contains
А в чем смысл такого списка как вы просите х.з.? Но если он вам нужен такой, тогда еще на этапе формирования, там где rowList.add(line) выполняйте условие которое я здесь описал выше и добавляйте каждый номер ниже улицы... (только не забудьте их как то обозначит - а то у вас получится что при таком поиске будет видеть вместо дома город... В общем я вам подсказал как делать, а вы уже думайте тоже немного самостоятельно, а то толку от Вас как от программиста будет немного.
0
Эксперт Java
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
18.07.2017, 10:29 11
Цитата Сообщение от DMV78 Посмотреть сообщение
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileObject),"cp1251"));
закрывать то кто будет?
Цитата Сообщение от DMV78 Посмотреть сообщение
boolean isContain1 = row.contains("ул_");
за такие имена по рукам бьют, кроме того эта переменная вообще не нужна.
остальное лень смотреть.
0
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
18.07.2017, 10:32 12
xoraxax, ахахаха... да ты не смотри - не тебе писали... а написал за 10 минут... в именах вообще не суть была. Или ты за правденый код? покажи мне своё приложение хоть одно?? У меня их очень много ))) и работает на них много компаний. А кричать не мешки ворочать. Это писалось для примера, а не для использования. Кому надо тот закроет!!!!
0
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
18.07.2017, 10:36  [ТС] 13
DMV78, Смысл - научиться парсить тхт файл, научится добавлять данные в массив, а также выводить данные разными способами либо в одну строку или построчно. Далее в планах усложнить задачу и научиться результат записывать в excel и в других форматах.
Спасибо за ответ буду пробовать

Добавлено через 3 минуты
v777779, Спасибо
0
xoraxax
18.07.2017, 10:38
  #14

Не по теме:

Цитата Сообщение от DMV78 Посмотреть сообщение
работает на них много компаний
глядя на то, что ты пишешь, я им могу только сочувствовать
Цитата Сообщение от DMV78 Посмотреть сообщение
А кричать не мешки ворочать
больше всех тут кричишь именно ты

0
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
18.07.2017, 10:41 15
Гендальф Белый, просто если это действительно JavaFX, то там немного иначе все строится, а если это Swing или AWT, тогда можно и по другому. Я пример дал по чистой FX. Через буфер так же можно и записывать в текстовый файл данные. С Экселем будет немного сложнее там надо платформу смотреть и для Windows по своему для Mac и Linux по своему при том учесть форматы xls и xlsx

Добавлено через 1 минуту
ты местный тролль что ли xoraxax? Что не так написано обоснуй:?
1
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
18.07.2017, 17:35  [ТС] 16
DMV78,
Да, я учусь именно в направлении JAVA FX
0
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
19.07.2017, 10:40 17
Гендальф Белый
https://youtu.be/IBNhnfaPtv8 (на видео показан пример как получилось реализовать в вашем случае), но видимо есть и другие более интересные варианты, и поиск там сделал по дому тоже, третье поле добавил.
В общем посмотри, скажи что тебе из того надо? Это я просто кусочки из своей CRM вытягивал и уже по существу отдельный парсер строк сделал )))))), симпатичненько получилось....
0
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
19.07.2017, 15:02  [ТС] 18
DMV78, Это просто шикарно )))
А можно код?

Добавлено через 15 секунд
DMV78, Это просто шикарно )))
А можно код?

Добавлено через 1 минуту
DMV78,
А как вы сделали это прозрачное окно с "Вывод иерархии"?
0
22 / 22 / 4
Регистрация: 21.03.2017
Сообщений: 37
19.07.2017, 19:47 19
Лучший ответ Сообщение было отмечено Гендальф Белый как решение

Решение

Гендальф Белый при помощи кода сделал свои собственные диалоговые окна, целая библиотека окон уже есть. Это окно с вопросом, а есть еще Предупреждение/Информация, с выбором из списка и так далее...Элегантные и красивые окошки )))). Код можно конечно, только теперь я его смогу кусочками выкидывать, (без FXML) это вы уже сами сделаете.

Добавить в файл FXML переменную:
@FXML
private TreeView<Label> samleText;

Ну еще можете чек бокс добавить "Списком или Нет"? Так как у меня идет проверка этого условия, но в моем коде сделано через диалоговое окно. Далее я сделал вот такой модуль:

Новый модуль loadGroupAdd

Java
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
 private void loadGroupAdd() {
        //уровни определяются как 0 - Главный, 1 - Подчинен главному, 2 - подчинен первому.
        setupListG(porSoprt);
        if (daStreet) {
                Label lblRoot = new Label("ROOT");
                TreeItem<Label> root = new TreeItem<>(lblRoot);
                root.setExpanded(true);
                for (int i = 0; i < rowList.size(); i++) {
                        if (!"null".equals(rowList.get(i))&&!"".equals(rowList.get(i))&& !rowList.get(i).contains("ул_")) {
                            //Это город.
                            Label lblChild_1 = new Label("г. "+rowList.get(i));
                            lblChild_1.setGraphic(new ImageView("/pic/folder_1.png"));             
                            TreeItem<Label> root_1 = new TreeItem<>(lblChild_1);
                            boolean stopFotimeItsMyLife = true;
                            for (int k = (i+1); k < rowList.size(); k++) {
                                if (stopFotimeItsMyLife) {      
                                    if (rowList.get(k).contains("ул_")){
                                       //это улица отформатим её...
                                       String[] lines101;
                                       lines101 = rowList.get(k).split(":")[1].replaceAll("  "," ").replaceAll(" ", "").split(",");
                                       Label lblChild_2 = new Label(rowList.get(k).split(":")[0]);
                                       lblChild_2.setGraphic(new ImageView("/pic/folder_1.png"));
                                       TreeItem<Label> root_2 = new TreeItem<>(lblChild_2);
                                       for (int j = 0; j < lines101.length; j++) {
                                          Label lblChild_3 = new Label("дом №: "+lines101[j]);
                                          lblChild_3.setGraphic(new ImageView("/pic/element.png"));
                                          TreeItem<Label> child_Items = new TreeItem<>(lblChild_3);
                                          root_2.getChildren().add(child_Items);
                                          root_2.setExpanded(openGroupList);
                                       }                                      
                                          root_1.getChildren().add(root_2);
                                          root_1.setExpanded(openGroupList);
                                   }else{
                                      stopFotimeItsMyLife = false;
                                   }
                                }   
                            } 
                         root.getChildren().add(root_1);   
                        }
                }        
                
                samleText.setShowRoot(false);
                samleText.setRoot(root);  
        }else{
                Label lblRoot = new Label("ROOT");
                TreeItem<Label> root = new TreeItem<>(lblRoot);
                root.setExpanded(true);
                for (int i = 0; i < rowList.size(); i++) {  
                   Label lblChild_1 = new Label(rowList.get(i)); 
                   TreeItem<Label> root_1 = new TreeItem<>(lblChild_1);
                   root.getChildren().add(root_1);
                }
                samleText.setShowRoot(false);
                samleText.setRoot(root); 
        }
    }
Изменил немного процедуру чтения из файла - но вообще оптимизировал

модуль setupListG

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 private void setupListG(String sort) {
        rowList.clear();
        try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileObject),"cp1251"))) {
            // считаем сначала первую строку
            String line = reader.readLine();
            rowList.add(line);
            while (line != null) {
                // считываем остальные строки в цикле
                line = reader.readLine();
                if (line != null) {
                   rowList.add(line);  
                }
            }
            reader.close();
        } catch (FileNotFoundException e) {
          
        } catch (IOException e) {
            
        }
    }
А это наш старый код поиска, этот кусочек тоже немного изменен. Потому замените этот блок полностью у себя.

блок из модуля goSearch

Java
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
int gorod = 0;
        int street = 0;
        
         for (int i = 0; i <= rowList.size() - 1; i++) {
            String row = rowList.get(i);
            if (gorod > 0) {
                if (row.contains("ул_")) {
                    //это название улицы будем тут и скать пока не дойдем до следующего города
                    if (row.contains(textStreet.getText())&&!"".equals(textStreet.getText())) {
                        //Ура нашли свою улицу - запомним индекс в списке.
                        street = i;
                    }
                } else { //а это уже название другого города и он нам не интересен... очистим город и выведем что получили..  
                    break;
                }
            } else {
                //а это уже название города и он нам интересен...
                if (row.contains(textSity.getText()) && !"".equals(textSity.getText())) {
                    //Ура нашли свою улицу - запомним индекс в списке.
                    gorod = i+1;
                }
            }
        }
        if (street == 0) {
          resultText.setText("Адрес поиска отсутствует");
        }else{
          resultText.setText("Aдрес: " + rowList.get(gorod-1) + " " + rowList.get(street));    
        }
1
0 / 0 / 0
Регистрация: 15.09.2016
Сообщений: 57
20.07.2017, 17:52  [ТС] 20
Уважаемый DMV78,
Посоветуйте, как лучше сделать, Я написал программу которая проверяет есть ли совпадение с БД.
Реализовал следующим способом
Распарил xml и данные занес в БД, далее я Select -ом сверил две таблицы на поиск совпадений.
И вывел результат. Все...
Вроде все работает, но файлы на проверку приходят каждый день и по несколько штук, в каждом файле более сотни фамилий и таблица само собой заполняется разным мусором из xml файла.
В принципе они нам не нужны, проверил, совпадение нет и файл в топку, а у меня получается таблицы заполняются разным мусором.
Может посоветуете как лучше реализовать?
Может быть результат заносить в некий txt файл а потом, таблицу чистить?

Добавлено через 16 секунд
Уважаемый DMV78,
Посоветуйте, как лучше сделать, Я написал программу которая проверяет есть ли совпадение с БД.
Реализовал следующим способом
Распарил xml и данные занес в БД, далее я Select -ом сверил две таблицы на поиск совпадений.
И вывел результат. Все...
Вроде все работает, но файлы на проверку приходят каждый день и по несколько штук, в каждом файле более сотни фамилий и таблица само собой заполняется разным мусором из xml файла.
В принципе они нам не нужны, проверил, совпадение нет и файл в топку, а у меня получается таблицы заполняются разным мусором.
Может посоветуете как лучше реализовать?
Может быть результат заносить в некий txt файл а потом, таблицу чистить?
0
20.07.2017, 17:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2017, 17:52
Помогаю со студенческими работами здесь

Рандомный выбор из файла: считать данные из txt
Есть такое задание: Задан файл в котором записаны Ф.И.О. Требуется рандомно выбрать из этого...

Как считать данные с учетом знака переноса строки "\n" из файла *.txt
В файл .txt записывается текст из JTextArea в которую пользователь пишет что угодно и как угодно....

Считать данные из txt файла, обработать и вывести в Chart
Здравствуйте Помогите советом. Задача: считать из двух текстовых файлов значения, перемножить...

Функция: считать данные из файла txt и передать в массив
Доброго времени знатаки, Как правильно написать функиця которая считывает данные из файла txt, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru