package sk.upjs.paz.prednaska08;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import sk.upjs.jpaz2.Turtle;
import sk.upjs.visualscanner.VisualScanner;
public class SmartTurtle extends Turtle {
// zapis cisel do suboru - kod z minuleho tyzdna
public void saveNumbersToFile(File file, int[] numbers) {
// try with resources, printWriter sa zatvori automaticky
try (PrintWriter pw = new PrintWriter(file)) {
pw.println(numbers.length);
for (int i = 0; i < numbers.length; i++) {
pw.print(numbers[i] + " ");
}
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
}
}
// citanie cisel zo suboru vo formate ako predosla metoda - teda pocet cisel je znamy
public int[] loadNumbersFromFile(File file) {
try (Scanner sc = new Scanner(file)) {
int arrayLength = sc.nextInt();
int[] array = new int[arrayLength];
for (int i = 0; i < arrayLength; i++) {
array[i] = sc.nextInt();
}
return array;
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
}
return null;
}
public void printNumbersFromFile(File file) {
// visualscanner na vizualizaciu prace so scannerom - nefunguje v try-with-resources
VisualScanner sc = null;
try {
sc = new VisualScanner(file);
// oddelovac je (iba) mriezka
sc.useDelimiter("#");
// kym je v subore dalsi token
while (sc.hasNext()) {
// precita token ako string
String a = sc.next();
System.out.println(a);
}
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
} finally {
if (sc != null)
sc.close();
}
}
// nacita mesta oddelene ciarkou
public void loadCities(File file) {
try (Scanner sc = new Scanner(file)) {
// ak by sme chceli oddelovat znakom | tak sc.useDelimiter("\\|");
// oddelujeme ciarkou a medzerou. Mozno by bolo vhodnejsie oddelovat iba ciarkou a medzeru odstranovat: city.trim()
sc.useDelimiter(", ");
while (sc.hasNext()) {
String city = sc.next();
System.out.println(city);
}
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
}
}
// nedokoncena metoda
public String warmestCity(File file) {
try (Scanner sc = new Scanner(file)) {
// delimiter znak noveho riadka alebo ciarka - je to regularny vyraz, viac detailov v dokumentacii java triedy Pattern
sc.useDelimiter("\n|,");
// kym je dalsi token, precita sa dvojica tokenov - string mesto a double cislo
while (sc.hasNext()) {
String city = sc.next();
System.out.println(city);
// ak by nefungovalo - lebo caka desatinnu ciarku, treba pouzit useLocale
double temp = sc.nextDouble();
System.out.println(temp);
}
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
}
return null;
}
// precita subor vo formate mesto,teplota a vrati mesto s najvyssou teplotou
public String warmestCityScanner(File file) {
// premenne s malymi hodnotami
double maxTemp = Double.MIN_VALUE;
String maxCity = "";
try (Scanner sc = new Scanner(file)) {
// citanie po riadkoch
while (sc.hasNextLine()) {
String line = sc.nextLine();
System.out.println(line);
// Kosice,3.9
// scanner ktory cita string reprezentujuci aktualne precitany riadok
Scanner citacRiadka = new Scanner(line);
// oddelovac je ciarka
citacRiadka.useDelimiter(",");
String city = citacRiadka.next();
double temp = citacRiadka.nextDouble();
// aktualizacia max hodnoty
if (temp > maxTemp) {
maxCity = city;
maxTemp = temp;
}
// zatvorenie scannera
// citacRiadka.close();
}
} catch (FileNotFoundException e) {
System.out.println("problem so suborom");
}
return maxCity;
}
}