Informatik II Aufgabenblatt 6

Ähnliche Dokumente
Informatik II. Dateien. Seite 1 Th Letschert, THM

Programmieren in Java

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmierkurs Java

Java-Schulung Grundlagen

Einstieg in die Informatik mit Java

PIWIN 1 Übung Blatt 5

Schritt 4: Hallo Enterprise Bean

Probeklausur: Programmierung WS04/05

Alexander Syndikus (h_da) Informatik für CuB WS 2015/16-1/43. Teil IX. Dateien

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Primitive Datentypen

Access 2010 Programmierung Import und Export nach Excel

Handbuch für die Erweiterbarkeit

Java: Vererbung. Teil 3: super()

1 Polymorphie (Vielgestaltigkeit)

Reflection. Arthur Zaczek. Nov 2014

1.2 Attribute und Methoden Aufbau einer Java-Klasse:

Institut für Programmierung und Reaktive Systeme 26. April Programmieren II. 10. Übungsblatt

ADFC-Jahresprogramm. automatisch erstellen

von Anja Austermann Drag and Drop

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

TCP/IP Programmierung. C# TimeServer Java6 TimeClient

5. Tutorium zu Programmieren

5 Grundlagen der Java-Syntax

Vorlesung Informatik II

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Programmieren. JavaScript-Objekt-Verarbeitung mit GSON. Heusch --- Ratz Institut für Angewandte Informatik

Probeklausur: Programmierung WS04/05

Einführung in die Informatik

Das erste Programm soll einen Text zum Bildschirm schicken. Es kann mit jedem beliebigen Texteditor erstellt werden.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 14/15. Kapitel 11. Fehler und Ausnahmen 1

Aufgabenblatt Nr. 5 Generizität und TicTacToe

Praktikum Informatik II Prof. Dr. Martin Trauth, Dr. Michael Männel

Einführung in die Java- Programmierung

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Objektorientierte Programmierung

Themen. Web Service - Clients. Kommunikation zw. Web Services

Persistenz von Objekten relationale Datenbank Eigene Datenstruktur XML (JAXB) Proprietäre Dateiformate (Lochkarten)

Übungen zur Vorlesung Einführung in die Informatik Wintersemester 2010/11

Verteilte Systeme CS5001

Propädeutikum zur Programmierung

Einführung in Javadoc

Javakurs zu Informatik I. Henning Heitkötter

ipin CSV-Datenimport (Mac OS X)

AK-Automatisierungs und Kommunikationstechnik TI Technische Informatik. NWT Netzwerktechnik

Dokumentenstrukturen

Grundlagen der Programmierung Prof. H. Mössenböck. 10. Klassen

Delegatesund Ereignisse

Datenbankanwendungsprogrammierung Crashkurs Java

Tipps und Hinweise zum Bezug der Beitragssatzdatei V5.0

Pakete dienen dazu, die Software eines Projektes in größere inhaltlich zusammengehörige Bereiche mit eigenem Namen einzuteilen (siehe Java API).

Wiederholung Wozu Methoden? Methoden Schreiben Methoden Benutzen Rekursion?! Methoden. Javakurs 2012, 3. Vorlesung

Berner Fachhochschule Software Schule Schweiz JDOM. Beatrice Amrhein. Oktober 06

Programmdokumentation

Software Engineering Klassendiagramme Einführung

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Sortieralgorithmen. Inhalt: InsertionSort BubbleSort QuickSort. Marco Block

1. Der Einstieg in Java. Was heißt Programmieren?

JAVA - Methoden

Betreutes Programmieren Vorlesung Informatik II, Blatt 7 Musterlösung

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

JDBC. Es kann z.b. eine ODBC-Treiberverbindung eingerichtet werden, damit das JAVA-Programm auf eine ACCESS-DB zugreifen kann.

Algorithmische Kernsprache. Zuweisung, einfache und bedingte Anweisung, Blöcke, Schleifen, return, debugging.

EINI WiMa/LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Objektorientierte Programmierung OOP Programmieren mit Java

Artikel Schnittstelle über CSV

public class SternchenRechteckGefuellt {

Computeranwendung und Programmierung (CuP)

Software Engineering II

ecall sms & fax-portal

Java Einführung VARIABLEN und DATENTYPEN Kapitel 2

PIWIN I. Praktische Informatik für Wirtschaftsmathematiker, Ingenieure und Naturwissenschaftler I. Vorlesung 3 SWS WS 2007/2008

Kapitel 12 Dokumentation und Zugriffsrechte

Übersicht. Informatik 2 Teil 3 Anwendungsbeispiel für objektorientierte Programmierung

1. Grundzüge der Objektorientierung 2. Methoden, Unterprogramme und Parameter 3. Datenabstraktion 4. Konstruktoren 5. Vordefinierte Klassen

Versuchsziele. Grundlagen. Überblick: FB Automatisierung und Informatik Betriebssysteme Thema: Bounded-Buffer-Problem. 3.

Selbststudium OOP Programmieren 1 - H1103 Felix Rohrer

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Ich liebe Java && Ich liebe C# Rolf Borst

Studentische Lösung zum Übungsblatt Nr. 7

Distributed Computing Group

Große Übung Praktische Informatik 1

Konstruktoren, Packages und Scopes

Beispiel Time Client/Server

Java 8. Elmar Fuchs Grundlagen Programmierung. 1. Ausgabe, Oktober 2014 JAV8

Speicherstrukturen. Aufgabe 1-1: Fragen zu FAT (File Allocation Table) Aufgabe 1-2: Datensätze variabler Länge. Kind.java:

Programmieren lernen mit Groovy Strings, GStrings, Textverarbeitung

Benutzer-Handbuch. Import / Export von Adressen

Problemstellung. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 24: Reflection 1. IDE und automatische Tests.

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Fachgebiet Informationssysteme Prof. Dr.-Ing. N. Fuhr. Programmierung Prof. Dr.-Ing. Nobert Fuhr. Übungsblatt Nr. 6

Grundlagen der Programmierung Prof. H. Mössenböck. 6. Methoden

Importdatei EGID/EDID mit Excel erstellen und bearbeiten

Programmieren lernen mit Groovy Informationsstrukturen - Datenstrukturen - Textstrukturen (CSV, HTML, XML)

Aufgabe 3.1 (Laboraufgabe, CSV-Ein- und Ausgabe)

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Einführung in die Programmierung

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Vererbung. Martin Wirsing. Ziele. Vererbung

Transkript:

Prof. Dr. Th. Letschert FB MNI TH Mittelhessen StudiumPlus Informatik II Aufgabenblatt 6 Gruppenübung Aufgabe 1 CSV Dateien sind Textdateien die Zeilen mit Komma-separierten Werten bestehen (CSV = Comma Separated Values). CSV-Dateien werden sehr häufig zum Datenaustausch zwischen unterschiedlichen Programmen eingesetzt. Statt des Kommas als Trennzeichen, werden oft auch andere Zeichen verwendet. Im deutschsprachigen Raum ist es in der Regel das Semikolon. Ein typischer Einsatz für CSV-Tabellen ist der Import in und der Export aus Tabellenkalkulationsprogrammen wie MS Excel oder Open Office Calc. Angenommen wir haben eine Tabelle mit den Daten: Personalnummer Name Vorname Gehalt 6666 Maulwurf Hans 5000 1234 Dr Hibbert Julius M. 30000 7777 Burns Charles Montgomery 150000000 Bei einem Export ins CSV Format könnte dann eine Datei mit folgendem Inhalt generiert werden: 6666;Maulwurf;Hans;5000 1234;Dr Hibbert;Julius M.;30000 7777;Burns;Charles Montgomery;150000000 Lesen Sie zu CSV den Artikel den Wikipedia-Artikel http://de.wikipedia.org/wiki/csv (Dateiformat) und erstellen Sie dann eine CSV Datei mit dem angegebenen Inhalt (oder einem anderen). Verwenden Sie dazu ein Tabellenkalkulationsprogramm ihrer Wahl oder (im Notfall!) einen Texteditor. Aufgabe 2 Der Inhalt einer Datei wird traditionell an der Dateiendung erkannt, also an dem letzten Bestandteil des Dateinamens. Eine CSV Datei ist danach eine Textdatei mit der Endung.csv. Seit Windows aber wahrscheinlich zu Recht meint, dass der typische Benutzer das Konzept einer Dateiendung nicht versteht und darum Unsinn damit treibt, werden Dateiendungen oft versteckt und können nicht mehr unbedingt zum Erkennen eines Dateityps verwendet werden. Statt den Inhalt einer Datei nur an der Dateiendung kenntlich zu machen beginnt man mit Inhaltstypen (auch MIME Types) zu arbeiten. Einem Konzept, das ursprünglich für die Kennzeichnung von übertragen Daten entwickelt wurde, aber auch für gespeicherte Daten eingesetzt werden kann. Um Nachrichten verschicken zu können, die neben reinem Text auch Bilder, Musik, etc. enthalten können, hat sich die Internet Gemeinde zu Beginn der 90 er Jahre einen Standard ausgedacht, der Bit Ströme als Bestandteile von E Mails eindeutig charakterisiert: den sogenannten MIME Standard. 1 MIME stand dabei ursprünglich für Multipurpose Internet Mail Extension. Der MIME Standard wurde danach in die Web Technologie übernommen und ist heute von großer Bedeutung über das Internet hinaus für jeden Transfer von Daten auch mit Hilfe von Dateien. Man spricht vom MIME Typ oder MIME type manchmal auch vom Internet Media Type. 1. Lesen Sie den Wikipedia Artikel zu MIME Typen http://de.wikipedia.org/wiki/internet Media Type. 1 Zur ersten Multimedia Mail und der Geburt von MIME siehe http://guppylake.com/ nsb/mime.html.

2. Sehen Sie sich auch mal die englischsprachige Variante der Seite an. 3. Finden Sie heraus welcher MIME Typ einer CSV Datei laut Standard zugeordnet sein sollte. Aufgabe 3 Dateien mit einer bestimmten Endung oder einem bestimmten Datei Typ (MIME Typ) können in Java ausfindig gemacht werden. Betrachten Sie folgende Beispiele (Achtung es wird Java 7 vorausgesetzt!): Variante mit Überprüfung der Endung: import java.io.file; import javax.swing.jfilechooser; import javax.swing.joptionpane; public class Test { /** * Lokalisiert Datei mit einem der vorgebenen Dateierweiterungen. * @param msg Text fuer die Dateiauswahl * @param extensions Liste von Erweiterungen, von denen eine der Datei zugeornet sein muss * @return Pfad der ausgwaehlten Datei * @throws IOException */ private static Path locatefilewithextension(string msg, String... extensions) Path p = null; p = f.topath(); if (Files.isRegularFile(p) && Files.isReadable(p) ) { for (String ext: extensions) { if (p.tostring().endswith(ext)) { return p; else break; public static void main(string[] args) Path path = locatefilewithextension("csv Datei", ".csv"); "Sie haben gewaehlt:" + path); Variante mit Überprüfung des Typs: import java.io.file; 2

import javax.swing.jfilechooser; import javax.swing.joptionpane; public class Test { /** * Lokalisiert Datei mit einem der vorgebenen MIME-Typen. * @param msg Text fuer die Dateiauswahl * @param contenttypes Liste von Typen, von denen einer der Datei zugeornet sein muss * @return Pfad der ausgwaehlten Datei * @throws IOException */ private static Path locatefilewithtype(string msg, String... contenttypes) Path p = null; p = f.topath(); if (Files.isRegularFile(p) && Files.isReadable(p) ) { for (String type: contenttypes) { if (Files.probeContentType(p).equals(type)) { return p; else break; public static void main(string[] args) Path path = locatefilewithtype("csv Datei", "text/csv", "text/comma-separated-values"); "Sie haben gewaehlt:" + path); Finden Sie heraus welche Variante(n) bei Ihnen eingesetzt werden kann / können um die CSV Datei zu identifizieren. Das Konzept der Inhaltstypen zur Charakterisierung von Dateiinhalten ist neu. Sie müssen damit rechnen, dass nicht alles unbedingt so wie erwartet funktioniert. Eventuell wird auf Ihrem System ein anderer, als der erwartete Inhaltstyp festgestellt, oder das System liefert gar keinen Inhaltstyp (der Inhaltstyp ist null). Experimentieren Sie! Verwenden Sie eventuell Zwischenausgaben. Fassen Sie dann zusammen: welcher Inhaltstyp wird einer exportierten Tabelle zugeordnet, entspricht dies dem Standard und kann dieser mit Files.probeContentType(path) festgestellt werden. Ist auf Ihrem System nicht Java 7 installiert, dann müssen Sie auf die Prüfung von Inhaltstypen aus einem Programm heraus verzichten. Es bleibt nur der Test auf die Dateiendung. Das Beispiel oben muss dann noch für Java 6 angepasst werden, da Java 6 den Typ Path nicht kennt. Etwa wie folgt: private static File locatefilewithextension_6(string msg, String... extensions) 3

for (String ext: extensions) { if (f.getname().endswith(ext)) { return f; else break; Hausaufgaben Aufgabe 4 Eine CSV Datei beschreibt / codiert eine Tabelle bestehend aus Zeilen und Spalten. Jede Zeile repräsentiert eine Datensatz (engl. Record). Jede Spalte definiert einen Wert in diesen Datensätzen. Die erste Zeile wird oft als Überschriften-Zeile genutzt: Sie enthält dann die Namen der unterschiedlichen Werte eines Datensatzes. Diese Namen nennt man auch Attribute oder genauer Attributnamen. Eine CSV Datei stellt dann eine Liste von Datensätzen dar, in dem jeweils einem Attributnamen ein Attributwert zugeordnet wird. Diese Struktur kann in eine entsprechende Datenstruktur von Java eingelesen werden: import java.io.file; import java.util.list; import java.util.map; import javax.swing.jfilechooser; import javax.swing.joptionpane; public class UserInterface { /** * Lokalisiert Datei mit einem der vorgebenen MIME-Typen. * @param msg Text fuer die Dateiauswahl * @param contenttypes Liste von Typen, von denen einer der Datei zugeornet sein muss * @return Pfad der ausgwaehlten Datei * @throws IOException */ private static Path locatefilewithtype(string msg, String... contenttypes) //... WIE OBEN BZW SO DASSS BEI IHNEN FUNKTIONIERT... public static void main(string[] args) // SO ODER MIT PASSENDEN ANDEREN PARAMETERN! Path path = locatefilewithtype("csv Datei", "text/csv", "text/comma-separated-values"); System.out.println("Die Datei " + path + "Enthaelt die Datensaetze:"); List<Map<String, String>> records = CSV.readCSVFile(path, ";"); for (Map<String, String> m : records) { System.out.println(m); 4

Mit einer Routine zur Analyse von CSV Dateien: import java.nio.charset.charset; import java.util.arraylist; import java.util.hashmap; import java.util.list; import java.util.map; public class CSV { public static List<Map<String, String>> readcsvfile(path path, String seperator) // erste Zeile / Attribute String[] attributes = null; // Ergebnis: alle Zeilen ausser der ersten List<Map<String, String>> res = new ArrayList<Map<String, String>>(); boolean firstline = true; // erste Zeile enthaelt Spalten- (=Attribut-) Namen for (String line : Files.readAllLines(path, Charset.defaultCharset())){ if (firstline) { attributes = line.split(seperator); firstline = false; continue; Map<String,String> entry = new HashMap<>(); String[] values = line.split(seperator); int i = 0; for(string a: attributes) { String value = values[i].trim(); entry.put(a, value); i++; if (i == attributes.length i == values.length) break; res.add(entry); return res; Java 6 Benutzer verwenden beispielsweise den Scanner zum Einlesen: private static File locatecsvfile_6(string msg) if (f.getname().endswith(".csv")) { return f; else break; private static List<Map<String, String>> readcsvfile_6(file file, String seperator) // erste Zeile / Attribute String[] attributes = null; 5

// alle Zeilen ausser der ersten List<Map<String, String>> res = new ArrayList<Map<String, String>>(); boolean firstline = true; // erste Zeile enthaelt Spalten- (=Attribut-) Namen Scanner scan = new Scanner(file); while (scan.hasnextline()){ String line = scan.nextline(); if (firstline) { attributes = line.split(seperator); firstline = false; continue; Map<String,String> entry = new HashMap<>(); String[] values = line.split(seperator); int i = 0; for(string a: attributes) { String value = values[i].trim(); entry.put(a, value); i++; if (i == attributes.length i == values.length) break; res.add(entry); scan.close(); return res; Testen Sie das Programm mit Ihrer CSV Datei. Verwenden Sie den für Ihr System geeigneten Mechanismus zur Identifikation der CSV Datei. Erstellen Sie eine Liste aller String Operationen und aller Datei Operationen die in der Klasse CSV verwendet werden und informieren Sie sich über deren Wirkung. (API Doku!) Aufgabe 5 Definieren Sie Klasse Person und erweitern Sie UserInterface derart, dass die aus der Datei eingelesen Informationen in eine Liste von Personen Objekten gespeichert wird. Die Klasse der Personen soll dabei die zu den Attributen eines Datensatzes passenden Objektvariablen haben: personalnummer, name, vorname, gehalt. 6