package data.read.implementation; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import objects.TreeNode; import data.read.interfaces.ReadFileStrategyInterface; public class X9Strategy implements ReadFileStrategyInterface { private Pattern nodePattern = Pattern.compile("\\w+"); //Sablon za vadjenje odredjenih segmenata cvora private Matcher nodeMatch = null; @Override public Vector readFile(String path) { BufferedReader ulazniFajl = null; Vector sadrzajFajla = new Vector(); String buffer = null; //u buffer se smjesta ucitani red TreeNode cvor = null; //podaci o corovima String[] tokens = null; try { ulazniFajl = new BufferedReader(new FileReader(path)); ulazniFajl.readLine(); //preskakanje prva dva reda u fajlu ulazniFajl.readLine(); //preskakanje prva dva reda u fajlu while ((ulazniFajl) != null) { [b]buffer = ulazniFajl.readLine(); String delimiter = "[;]"; tokens = buffer.split(delimiter); if(tokens.matches("\\w+\\w+\\w+\\w+")) { nodeMatch = nodePattern.matcher(tokens); cvor = this.parsirajCvor(nodeMatch); [/b] sadrzajFajla.add(new TreeNode(cvor.getIndex(), cvor.getInfo(), cvor.getLeft(), cvor.getRight())); } } } catch (FileNotFoundException e) { System.out.println("Fajl nije pronadjen"); } catch (IOException e) { e.printStackTrace(); } finally { if (ulazniFajl != null) { try { ulazniFajl.close(); } catch (IOException e) { e.printStackTrace(); } } } return sadrzajFajla; } private TreeNode parsirajCvor(Matcher podaciCvora) { TreeNode privremeniCvor = new TreeNode(null, null, null, null); String podatak = null; for(int i = 1; i < 6; i++) { podaciCvora.find(); podatak = podaciCvora.group(); if(!podatak.equals("null")) { switch(i) { case 1: privremeniCvor.setIndex(Integer.parseInt(podatak)); break; case 2: privremeniCvor.setInfo(podatak); break; case 3: privremeniCvor.setLeft(Integer.parseInt(podatak)); break; case 4: privremeniCvor.setRight(Integer.parseInt(podatak)); break; case 5: privremeniCvor.setPercent(Float.parseFloat(podatak)); break; default: break; } } } return privremeniCvor; } }