From 7f8b2953fb9a785a00b136bbd18a18c4da00d317 Mon Sep 17 00:00:00 2001 From: Sebastian Brosch Date: Wed, 1 May 2024 23:38:01 +0200 Subject: [PATCH] Vorlesung 12 / Aufgabe 1 --- VL12/Aufgabe01/Aufgabe01.java | 95 ++++++++++++++++++++ VL12/Aufgabe01/StringFeld.java | 70 +++++++++++++++ VL12/Aufgabe01/input/Nachnamen.TXT | 12 +++ VL12/Aufgabe01/input/PLZOrt.TXT | 25 ++++++ VL12/Aufgabe01/input/Strassen.TXT | 11 +++ VL12/Aufgabe01/input/Vornamen.TXT | 10 +++ VL12/Aufgabe01/output/output-fixed-width.txt | 5 ++ VL12/Aufgabe01/output/output-separator.txt | 5 ++ 8 files changed, 233 insertions(+) create mode 100644 VL12/Aufgabe01/Aufgabe01.java create mode 100644 VL12/Aufgabe01/StringFeld.java create mode 100644 VL12/Aufgabe01/input/Nachnamen.TXT create mode 100644 VL12/Aufgabe01/input/PLZOrt.TXT create mode 100644 VL12/Aufgabe01/input/Strassen.TXT create mode 100644 VL12/Aufgabe01/input/Vornamen.TXT create mode 100644 VL12/Aufgabe01/output/output-fixed-width.txt create mode 100644 VL12/Aufgabe01/output/output-separator.txt diff --git a/VL12/Aufgabe01/Aufgabe01.java b/VL12/Aufgabe01/Aufgabe01.java new file mode 100644 index 0000000..ab14476 --- /dev/null +++ b/VL12/Aufgabe01/Aufgabe01.java @@ -0,0 +1,95 @@ +package VL12.Aufgabe01; + +import java.io.FileWriter; +import java.util.Random; + +/** + * Vorlesung 12 - Ein- und Ausgabe - Aufgabe 1 + * @author Sebastian Brosch + */ +public class Aufgabe01 { + public static void main(String[] args) { + final String COLUMN_SEPARATOR = "#"; + int cntDataSets = 0; + int startKundennummer = 0; + + try { + System.out.print("Anzahl der Datensätze: "); + cntDataSets = Integer.parseInt(System.console().readLine()); + } catch(NumberFormatException e) { + System.out.println("Es wurde keine gültige Anzahl für Datensätze angegeben!"); + return; + } + + try { + System.out.print("Startwert für Kundennummer: "); + startKundennummer = Integer.parseInt(System.console().readLine()); + } catch(NumberFormatException e) { + System.out.println("Es wurde keine gültige Startnummer für die Kundennummer angegeben!"); + return; + } + + // the customer number have to be at least six digits. + if(startKundennummer < 100000) { + startKundennummer += 100000; + } + + StringFeld namen = new StringFeld(getPathFromPackage() + "/input/Nachnamen.TXT"); + StringFeld strassen = new StringFeld(getPathFromPackage() + "/input/Strassen.TXT"); + StringFeld vornamen = new StringFeld(getPathFromPackage() + "/input/Vornamen.TXT"); + StringFeld postleitzahlen = new StringFeld(getPathFromPackage() + "/input/PLZOrt.TXT", " ", 0); + StringFeld orte = new StringFeld(getPathFromPackage() + "/input/PLZOrt.TXT", " ", 1); + + try { + FileWriter outputFixedWidth = new FileWriter(getPathFromPackage() + "/output/output-fixed-width.txt"); + FileWriter outputSeparator = new FileWriter(getPathFromPackage() + "/output/output-separator.txt"); + + for(int i = 0; i < cntDataSets; i++) { + int kundennummer = startKundennummer + i; + int hausnummer = getRandomNumber(1, 99999); + int umsatz = getRandomNumber(500, 2000); + + outputFixedWidth.write(String.format("%-6d", kundennummer)); + outputFixedWidth.write(String.format("%-20s", namen.get(i, 20))); + outputFixedWidth.write(String.format("%-20s", vornamen.get(i, 20))); + outputFixedWidth.write(String.format("%-20s", strassen.get(i, 20))); + outputFixedWidth.write(String.format("%-5s", hausnummer)); + outputFixedWidth.write(String.format("%-5s", postleitzahlen.get(i))); + outputFixedWidth.write(String.format("%-20s", orte.get(i, 20))); + outputFixedWidth.write(String.format("%-5s", umsatz)); + outputFixedWidth.write("\n"); + + outputSeparator.write(String.format("%d" + COLUMN_SEPARATOR, kundennummer)); + outputSeparator.write(String.format("%s" + COLUMN_SEPARATOR, namen.get(i))); + outputSeparator.write(String.format("%s" + COLUMN_SEPARATOR, vornamen.get(i))); + outputSeparator.write(String.format("%s" + COLUMN_SEPARATOR, strassen.get(i))); + outputSeparator.write(String.format("%d" + COLUMN_SEPARATOR, hausnummer)); + outputSeparator.write(String.format("%s" + COLUMN_SEPARATOR, postleitzahlen.get(i))); + outputSeparator.write(String.format("%s" + COLUMN_SEPARATOR, orte.get(i))); + outputSeparator.write(String.format("%d", umsatz)); + outputSeparator.write("\n"); + } + + outputFixedWidth.close(); + outputSeparator.close(); + } catch(Throwable e) {;} + } + + /** + * Method to determine a random number from a certain range. + * @param start The first number of the range. + * @param end The last number of the range. + * @return A random number from a certain range. + */ + private static int getRandomNumber(int start, int end) { + return (new Random()).nextInt(end-start) + start; + } + + /** + * Method to get the relative path based on the package name. + * @return The relative path of the package based on the package name. + */ + private static String getPathFromPackage() { + return Aufgabe01.class.getPackageName().replace(".", "/"); + } +} diff --git a/VL12/Aufgabe01/StringFeld.java b/VL12/Aufgabe01/StringFeld.java new file mode 100644 index 0000000..28c2900 --- /dev/null +++ b/VL12/Aufgabe01/StringFeld.java @@ -0,0 +1,70 @@ +package VL12.Aufgabe01; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +/** + * A field to store some information. + * @author Sebastian Brosch + */ +class StringFeld { + private String[] values; + + StringFeld(String filePath) { + List lines = getFileLines(filePath); + this.values = new String[lines.size()]; + lines.toArray(this.values); + } + + StringFeld(String filePath, String separator, int index) { + List lines = getFileLines(filePath); + this.values = new String[lines.size()]; + + for(int i = 0; i < lines.size(); i++) { + this.values[i] = lines.get(i).split(separator)[index]; + } + } + + /** + * Method to get a value. + * @param index The index of the value. + * @return The value of the given index. + */ + public String get(int index) { + index = index % this.values.length; + return this.values[index]; + } + + /** + * Method to get a value. + * @param index The index of the value. + * @param maxLength The max length of the value. + * @return The value of the given index. + */ + public String get(int index, int maxLength) { + index = index % this.values.length; + + if(this.values[index].length() > maxLength) { + return this.values[index].substring(0, maxLength); + } else { + return this.values[index]; + } + } + + /** + * Method to get all the lines of a file. + * @param filePath The path to the file to get the lines from. + * @return A list with all lines of the file. + */ + private List getFileLines(String filePath) { + try { + return Files.readAllLines(Paths.get(filePath), StandardCharsets.ISO_8859_1); + } catch (IOException e) { + e.printStackTrace(); + return List.of(); + } + } +} diff --git a/VL12/Aufgabe01/input/Nachnamen.TXT b/VL12/Aufgabe01/input/Nachnamen.TXT new file mode 100644 index 0000000..d9e9565 --- /dev/null +++ b/VL12/Aufgabe01/input/Nachnamen.TXT @@ -0,0 +1,12 @@ +Meier +Kaiser +Hellmann +Fuchs +Hampel +Hinz +Schmidt +Andrack +Zerlett +Novincack +Ullmann +Mayer \ No newline at end of file diff --git a/VL12/Aufgabe01/input/PLZOrt.TXT b/VL12/Aufgabe01/input/PLZOrt.TXT new file mode 100644 index 0000000..7b6c4b4 --- /dev/null +++ b/VL12/Aufgabe01/input/PLZOrt.TXT @@ -0,0 +1,25 @@ +72160 Horb +70179 Stuttgart +70191 Stuttgart +70192 Stuttgart +70193 Stuttgart +70195 Stuttgart +70197 Stuttgart +70199 Stuttgart +70327 Stuttgart +72070 Tübingen +72072 Tübingen +72074 Tübingen +72076 Tübingen +72181 Starzach +72182 Eutingen +72184 Eutingen +72185 Empfingen +72186 Empfingen +72186 Weiherhof +72187 Vöhringen +72189 Vöhringen +72202 Nagold +72210 Altensteig +72213 Altensteig +72218 Wildberg diff --git a/VL12/Aufgabe01/input/Strassen.TXT b/VL12/Aufgabe01/input/Strassen.TXT new file mode 100644 index 0000000..b28e869 --- /dev/null +++ b/VL12/Aufgabe01/input/Strassen.TXT @@ -0,0 +1,11 @@ +Hauptstr. +Dorfstr. +Rosenweg +Nelkenweg +Stuttgarter Str. +Ulmer Str. +Freiburger Str. +Münchner Str. +Goetheweg +Beethovenallee +Schillerstr. diff --git a/VL12/Aufgabe01/input/Vornamen.TXT b/VL12/Aufgabe01/input/Vornamen.TXT new file mode 100644 index 0000000..bc5238c --- /dev/null +++ b/VL12/Aufgabe01/input/Vornamen.TXT @@ -0,0 +1,10 @@ +Frank +Steffi +Uschi +Carola +Susanne +Marion +Ingo +Stefan +Jochen +Holger diff --git a/VL12/Aufgabe01/output/output-fixed-width.txt b/VL12/Aufgabe01/output/output-fixed-width.txt new file mode 100644 index 0000000..9df9f88 --- /dev/null +++ b/VL12/Aufgabe01/output/output-fixed-width.txt @@ -0,0 +1,5 @@ +100005Meier Frank Hauptstr. 9374272160Horb 728 +100006Kaiser Steffi Dorfstr. 1743970179Stuttgart 1914 +100007Hellmann Uschi Rosenweg 1318270191Stuttgart 593 +100008Fuchs Carola Nelkenweg 3436270192Stuttgart 891 +100009Hampel Susanne Stuttgarter Str. 2115270193Stuttgart 926 diff --git a/VL12/Aufgabe01/output/output-separator.txt b/VL12/Aufgabe01/output/output-separator.txt new file mode 100644 index 0000000..582f176 --- /dev/null +++ b/VL12/Aufgabe01/output/output-separator.txt @@ -0,0 +1,5 @@ +100005#Meier#Frank#Hauptstr.#93742#72160#Horb#728 +100006#Kaiser#Steffi#Dorfstr.#17439#70179#Stuttgart#1914 +100007#Hellmann#Uschi#Rosenweg#13182#70191#Stuttgart#593 +100008#Fuchs#Carola#Nelkenweg#34362#70192#Stuttgart#891 +100009#Hampel#Susanne#Stuttgarter Str.#21152#70193#Stuttgart#926