commit 8ee87ecf060115bef128efc9c4cd9d72ac6845f4
Author: Daniel Stuš <stusd@students.zcu.cz>
Date:   Thu Apr 11 22:40:39 2019 +0200

    Základy čtení a parsování vstupních dat (Re #7240)

diff --git a/JDF/SeznamLinek.txt b/JDF/SeznamLinek.txt
new file mode 100644
index 0000000..7abb706
--- /dev/null
+++ b/JDF/SeznamLinek.txt
@@ -0,0 +1,4 @@
+143440
+440055
+440070
+440380
\ No newline at end of file
diff --git a/src/data/DataReader.java b/src/data/DataReader.java
new file mode 100644
index 0000000..28b653a
--- /dev/null
+++ b/src/data/DataReader.java
@@ -0,0 +1,284 @@
+package data;
+
+import java.io.*;
+import java.nio.charset.Charset;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ *
+ * Zaklady cteni a parsovani zdrojovych souboru
+ * cteni celeho souboru, podle linek, nacteni uzivatelskeho seznamu linek pro generovani
+ *
+ * @author Daniel Stus, Marek Sobota, Lukas Scurko, Jan Jirman
+ * @version 1.0
+ */
+public class DataReader {
+
+    /** Cesta ke slozce obsahujici zdrojove soubory */
+    private File directory;
+
+    /** Jmeno souboru ktery zpracovavaji jednotlive metody tridy */
+    private String fileName;
+
+    /** Pole retezcu obsahujici cisla linek ke zpracovani*/
+    private String[] busLines;
+
+    /**
+     *
+     * Konstruktor DataReaderu - Inicializuje slozku se zdrojovymi soubory pro cteni a nacte seznam Linek ke zpracovani
+     *
+     * @param directory cesta ke slozce se zdrojovymi soubory
+     * @param lineList cesta k souboru obsahujici cisla linek ke zpracovani
+     */
+    public DataReader(File directory, File lineList) {
+        this.directory = directory;
+        loadBusLines(lineList);
+    }
+
+    /**
+     * Vrací hodnotu atributu directory obsahujici cestu ke slozce se zdrojovymi soubory
+     *
+     * @return cesta ke slozce se zdrojovymi soubory
+     */
+    public File getDirectory() {
+        return directory;
+    }
+
+    /**
+     * Umoznuje nastavit cestu ke slozce se zdrojovymi soubory
+     *
+     * @param directory cesta ke slozce se zdrojovymi soubory
+     */
+    public void setDirectory(File directory) {
+        this.directory = directory;
+    }
+
+    /**
+     * Vraci hodnotu atributu fileName obsahujici jmeno souboru zpracovavaneho metodami
+     *
+     * @return jméno souboru zpracovávaného metodami
+     */
+    public String getFileName() {
+        return fileName;
+    }
+
+    /**
+     * Nastavi hodnotu atributu fileName obsahujici jmeno souboru zpracovavaneho metodami
+     * hodnota je ve formatu jmenoSouboru.pripona napr. 'Spoje.txt'
+     *
+     * @param fileName jmeno souboru pro zpracovani metodami
+     */
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    /**
+     * Vraci hodnotu atributu busLines obsahujici pole s cislami linek ke zpracovani
+     *
+     * @return pole cisel linek ke zpracovani
+     */
+    public String[] getBusLines() {
+        return busLines;
+    }
+
+    /**
+     * Nastavi hodnotu atributu busLines obsahujici pole s cislami linek ke zpracovani
+     *
+     * @param busLines pole cisel linek ke zpracovani
+     */
+    public void setBusLines(String[] busLines) {
+        this.busLines = busLines;
+    }
+
+
+    /**
+     * Vypise vsechny soubory obsazene v adresari se zdrojovymi soubory ulozene v atributu {@code directory}
+     */
+    public void printFilesInDirectory() {
+        File[] files = directory.listFiles();
+
+        System.out.printf("Soubory v adresáři %s jsou:\n", getDirectory());
+
+        for (File file : files) {
+            System.out.println(file);
+        }
+    }
+
+    /**
+     * Precte a zpracuje cely soubor
+     *
+     */
+    public void processFile() {
+
+        String currLine;
+
+        try {
+            File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
+
+            BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
+
+            while((currLine = BuffReader.readLine()) != null) {
+                String[] record = parseLine(currLine);
+                // TODO: Vlastní výkonový kód pro každý záznam
+            }
+
+            BuffReader.close();
+
+        } catch (FileNotFoundException e) {
+            e.printStackTrace();
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }
+
+
+    /**
+     * Precte a zpracuje vybranou linku autobusu
+     *
+     */
+    public void processBusLine(String busLine) {
+
+        String currLine;
+
+        if (fileName.equals("Spoje.txt")  || fileName.equals("Caskody.txt"))
+        {
+            try {
+                File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
+
+                BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
+
+                System.out.printf("Zpracované řádky:\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
+                while((currLine = BuffReader.readLine()) != null) {
+
+                    if (currLine.startsWith("\""+busLine)) {
+                        System.out.println(currLine);
+                        String[] record = parseLine(currLine);
+                        // TODO: Vlastní výkonový kód pro každý záznam jednotlivé linky
+                    }
+                }
+
+                BuffReader.close();
+
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Precte a zpracuje vybrane linky autobusu zadane jako pole Linek (Stringu)
+     *
+     */
+    public void processBusLines(String[] busLines) {
+
+        String currLine;
+
+
+        if (fileName.equals("Spoje.txt")  || fileName.equals("Caskody.txt"))
+        {
+            try {
+                File file = new File(directory.getAbsolutePath()+"/"+this.fileName);
+
+                BufferedReader BuffReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "Cp1250"));
+
+                System.out.printf("Zpracované řádky:\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -\n");
+                while((currLine = BuffReader.readLine()) != null) {
+
+                    if (Arrays.stream(busLines).anyMatch(currLine.substring(1, 7)::equals)) {
+                        System.out.println(currLine);
+                        String[] record = parseLine(currLine);
+                        // TODO: Vlastní výkonový kód pro každý záznam jednotlivé linky
+                    }
+                }
+
+                BuffReader.close();
+
+            } catch (FileNotFoundException e) {
+                e.printStackTrace();
+            } catch (UnsupportedEncodingException e) {
+                e.printStackTrace();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * Zpracuje a vrátí jeden záznam (řádku) jako pole hodnot
+     *
+     * @param line řádka ke zpracování
+     * @return pole se záznamem
+     */
+    public static String[] parseLine(String line) {
+
+        /*
+         Odstraní ze záznamu úvodní uvozovku a konečnou uvozovku se středníkem
+         příprava pro následující rozdělení záznamu pomocí metody split
+         */
+        String subString = line.substring(1, line.length()-2);
+
+        String[] entry = subString.split("\",\"");
+
+        return entry;
+    }
+
+    /**
+     * Načte seznam linek z uživatelského soubor a uloží jej jako pole řetězců do atributu {@code busLines[]}
+     *
+     * @param lineList cesta k uživatelskému souboru se seznamem linek
+     */
+    private void loadBusLines(File lineList) {
+
+        // Přepokládám, že je v souboru zadána každá linka na samostatný řádek(jak bylo domluveno při druhé schůzce se zadavatelem.
+        // TODO: Ověřování a kontrola vstupů
+
+        Path filePath = lineList.toPath();
+        Charset charset = Charset.defaultCharset();
+        List<String> linkList = null;
+
+        try {
+            linkList = Files.readAllLines(filePath, charset);
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+
+        this.busLines = linkList.toArray(new String[]{});
+    }
+
+
+
+    /**
+     *
+     * hlavni metoda pro ozkouseni funkcnosti {@code DataReader}
+     *
+     * @param args parametry programu
+     */
+    public static void main(String[] args) {
+
+        DataReader reader = new DataReader(new File("JDF"), new File("JDF/SeznamLinek.txt"));
+
+        System.out.printf("Jméno (Cesta) ke složce se zdrojovými soubory: %s\n", reader.getDirectory());
+        System.out.printf("Načtené linky z uživatelského seznamu linek: %s\n\n", Arrays.toString(reader.getBusLines()));
+
+        reader.setFileName("Spoje.txt");
+        reader.processBusLine("445040");
+
+        reader.setFileName("Caskody.txt");
+        reader.processBusLines(reader.getBusLines());
+
+
+
+    }
+
+}
