Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.



Ähnliche Dokumente
Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

Programmieren, Algorithmen und Datenstrukturen II 1. Einführung Ein- / Ausgabe mit Dateien, Ausnahmebehandlung

Angewandte Mathematik und Programmierung

Einführung in die Programmierung

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Arbeiten mit UMLed und Delphi

Übungen zu C++ Kapitel 1

Einführung in die Programmierung (EPR)

Klausur in Programmieren

Programmieren I. Kapitel 15. Ein und Ausgabe

C-Probeklausur (Informatik 1; Umfang: C, Teil 1; SS07)

Erstellen der Barcode-Etiketten:

I.1 Die Parrot Assemblersprache

Stand: Adressnummern ändern Modulbeschreibung

Informatik Repetitorium SS Volker Jaedicke

Kurzanleitung. Toolbox. T_xls_Import

Programmierkurs Kapitel 4: Dateien Seite 1. Verwaltungfeld im Speicher. 4.1 Alternativen zur Programmierung der Eingabe und der Ausgabe

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

E Mail Versand mit der Schild NRW Formularverwaltung

1 Vom Problem zum Programm

2. Semester, 2. Prüfung, Lösung

Programmierkurs Java

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

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

1. Schritt: Export Datei im Fidelio erstellen

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

Das Modul ARTIKEL-BARCODE ermöglicht den Druck von Barcode-Etiketten der EAN-Codes 8 und 13.

Abwesenheitsnotiz im Exchange Server 2010

Erstellen von x-y-diagrammen in OpenOffice.calc

Thermoguard. Thermoguard CIM Custom Integration Module Version 2.70

Klausur in Programmieren

Einführung in die C++ Programmierung für Ingenieure

Felder, Rückblick Mehrdimensionale Felder. Programmieren in C

Matrix42. Use Case - Sicherung und Rücksicherung persönlicher Einstellungen über Personal Backup. Version September

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)

10 Lesen und Schreiben von Dateien

Programmierung in C. Grundlagen. Stefan Kallerhoff

Stepperfocuser 2.0 mit Bootloader

Bedienungsanleitung Anlassteilnehmer (Vereinslisten)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 18

Viele Bilder auf der FA-Homepage

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Dokumentation zum Inco- FORM

Informationsblatt Induktionsbeweis

Systemvoraussetzung < zurück weiter >

Stellen Sie bitte den Cursor in die Spalte B2 und rufen die Funktion Sverweis auf. Es öffnet sich folgendes Dialogfenster

Einführung in das Arbeiten mit MS Excel. 1. Bearbeitungs

Benutzung der LS-Miniscanner

Starten Sie Eclipse: Hier tragen sie Ihr Arbeitsverzeichnis ein. Zu Hause z.b. c:\workspace.

Gezielt über Folien hinweg springen

Dateiname Name(n) und Matrikelnr. des/der Bearbeiter Tel.-Nr. und -Adresse für den Fall, dass die Diskette nicht lesbar ist.

Professionelle Seminare im Bereich MS-Office

Druckerscriptsprache

MC-Hx 006. Einbindung des MC-Hx Modul als MODBus TCP Slave. MB DataTec GmbH. Stand:

Übungskomplex Felder (1) Eindimensionale Felder Mehrdimensionale Felder

Historical Viewer. zu ETC5000 Benutzerhandbuch 312/15

1) Farbsteuergerät in der Nikobus-Software unter Modul zufügen hinzufügen.

Der zweite all unsere Datenbanken. Dieser Befehl ist etwas komplexer, aber bis auf das Passwort (kursiv fett) so zu übernehmen:

Installation OMNIKEY 3121 USB

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Projektverwaltung Problem Lösung: Modulare Programmierung

Anleitung zur Erstellung von Serienbriefen (Word 2003) unter Berücksichtigung von Titeln (wie Dr., Dr. med. usw.)

Win-Digipet V 9.2 Premium Edition Wie bastele ich mir steuerbare Kontakte. Wie bastele ich mir steuerbare Kontakte? -Quick-And-Dirty-Lösung-

NEUES BEI BUSINESSLINE WINDOWS

Virtuelle COM-Schnittstelle umbenennen

Pflegeberichtseintrag erfassen. Inhalt. Frage: Antwort: 1. Voraussetzungen. Wie können (Pflege-) Berichtseinträge mit Vivendi Mobil erfasst werden?

NoClick. Eine kurze Anleitung. Kommhelp e.v Vereinsregister. Spendenkonto kommhelp e. V. Konto Horstweg 25

Anleitung über den Umgang mit Schildern

Funktionale Programmierung mit Haskell

TYPO3 Tipps und Tricks

MS Excel 2010 Kompakt

PowerPoint: Text. Text

Windows. Workshop Internet-Explorer: Arbeiten mit Favoriten, Teil 1

Lieferschein Dorfstrasse 143 CH Kilchberg Telefon 01 / Telefax 01 / info@hp-engineering.com

Native Zeichenketten (C-Strings)

Gibt Daten im erweiterten Format aus. Dies beinhaltet die Angabe von Zugriffsrechten, Besitzer, Länge, Zeitpunkt der letzten Änderung und mehr.

Programmieren in C. Macros, Funktionen und modulare Programmstruktur. Prof. Dr. Nikolaus Wulff

Filialpreisverwaltung

Kaiser edv-konzept, Inhaltsverzeichnis

Wie halte ich Ordnung auf meiner Festplatte?

Datenbanken Kapitel 2

S7-Hantierungsbausteine für R355, R6000 und R2700

Der neue persönliche Bereich/die CommSy-Leiste

PHP - Projekt Personalverwaltung. Erstellt von James Schüpbach

Outlook-Daten komplett sichern

Gemeinsamer Bibliotheksverbund: Übertragung von Datenexporten für den Verbundkatalog Öffentlicher Bibliotheken

Kontrollstrukturen und Funktionen in C

Anzeige von eingescannten Rechnungen

W&W Einwohnerkontrolle. EKI Version mit Objektregister (Datenimport)

Einführung zum Arbeiten mit Microsoft Visual C Express Edition

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

Raiffeisen-Volksbank Wemding eg

Wichtiges Thema: Ihre private Rente und der viel zu wenig beachtete - Rentenfaktor

BTD Antivirus Evasion: Von der Idee zum PoC. Daniel Sauder SySS GmbH

Dateimanagement in Moodle Eine Schritt-für

Anleitung SEPA-Lastschriften mit VR-NetWorld Software 5

Transkript:

Ein- und Ausgabe Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert. Komplexe E/A-Operationen werden erst diskutiert, nachdem das Klassenkonzept erarbeitet ist. Inhalt 1. Standardein- und Ausgabe... 2 1.1. Eingabe... 3 2. Ein- und Ausgabe mit Dateien... 7 3. Binärdateien... 12 Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 1/15

1. Standardein- und Ausgabe Die Ein- und Ausgabe unter Verwendung von Ein/Ausgabekanälen haben wird bereits gesehen. Folgende Ein- und Ausgabeströme sind vordefiniert: cin Standardeingabe (i.a. die Tastatur) cout Standardausgabe (i.a. der Bildschirm) cerr Standardfehlerausgabe (i.a. der Bildschirm) Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 2/15

1.1. Eingabe Durch die Funktion get() kann man einzelne Zeichen des Eingabestroms lesen, mit put() ein Zeichen auf den Ausgabestrom schreiben: char c; while (cin.get(c)) cout.put(c); char buf[10]; cin.get(buf,6); char buf[10]; cin.get(buf,6, \n ); int i; while ( (i=cin.get())!= EOF cout.put(char(i)); Zeichenweise Kopieren Lesen von maximal 6 Zeichen und Ablage im Array buf. Übernahme von maximal 6 Zeichen, wobei maximal bis zu einem Terminatorzeichen \n gelesen wird. Das Terminatorzeichen verbleibt im Eingabestrom Get holt nächstes Zeichen und erzeugt int-wert gemäß ASCII Tabelle. Eine ganze Zeile kann mit der Funktion getline() gelesen werden. Eine Vorschau (also ohne ein Zeichen zu konsumieren) auf den Eingabestrom ist durch peek() möglich. Ein bereits konsumiertes Zeichen c kann durch putback(c) zurückgelegt werden; also ist c=cin.get(); cin.putback(c)); gleichbedeutend mit c=peek();. Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 3/15

Durch Ein/Ausgabeumlenkung auf Ebene des Betriebssystems kann man so genannte Filterprogramme schreiben: Ein Filter liest von Standardeingabe und schreibt das Ergebnis auf die Standardausgabe ohne Benutzerinteraktion. Beispiel (cat von Unix, type von DOS): $ cat simpelcat.cpp #include <iostream.h> int main(int argc, char* argv[]) { char c; while (cin.get(c)) cout.put(c); cout << endl; $ Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 4/15

Auf Betriebssystemebene kann man in Unix (auch unter DOS) die Eingabe umlenken, indem man das Zeichen < verwendet. Damit lässt sich dann das o.a. Programm verwenden, um eine beliebige Datei zu lesen: $ simplecat < simplecat.cpp #include <iostream.h> int main(int argc, char* argv[]) { char c; while (cin.get(c)) cout.put(c); cout << endl; $ Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 5/15

Die Umlenkung der Ausgabe ist auch möglich, damit ist das Programm auch zum Kopieren von Dateien zu gebrauchen: $ simplecat < simplecat.cpp > kopievonsinpmlecat.cpp $ simplecat < kopievonsinpmlecat.cpp #include <iostream.h> int main(int argc, char* argv[]) { char c; while (cin.get(c)) cout.put(c); cout << endl; $ Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 6/15

2. Ein- und Ausgabe mit Dateien Das Lesen und Schreiben von Dateien über die Ein-/Ausgabeumlenkung ist eigentlich nur für die Systemprogrammierung gedacht (neue BS-Kommandos, ). In Anwendungsprogrammen muss häufig auf externe Medien zugegriffen werden. Dazu können die Ein- und Ausgabeoperatoren >> und << zusammen mit dem Header <fstream> verwendet werden. file stream Die zu verwendeten Funktionen put(), get(), open(), close()benutzen dabei Systemaufrufe, die das zugrunde liegende Betriebssystem bereitstellt. Der Zugriff auf eine Datei geschieht etwa wie folgt: 1. Definition eins Datei-Objektes, über das die Datei angesprochen wird: Datentyp des Dateiobjektes ist ifstream zum Lesen, ofstream zu Schreiben. 2. Die Verbindung zu einer Datei wird durch die Funktion open() hergestellt; dabei übergibt man den Namen der Datei als Parameter. 3. Nachdem kein Zugriff mehr auf die Datei erforderlich ist, kann die Verbindung durch close() gelöst werden. Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 7/15

Das Schreiben auf eine Datei erfolgt i.a. gepuffert, d.h. ein spezieller Datenbereich (Puffer) wird reserviert. Erst wenn der Puffer voll ist, wird der Pufferinhalt physisch auf die Platte geschrieben. Ein close() sorgt dafür, dass stets geschrieben wird, auch wenn der Puffer noch nicht voll ist. Das Lesen erfolgt i.a. auch gepuffert. Beispiel (simplecp): $ cat simplecp.cpp #include <iostream.h> // wg. cerr #include <cstdlib> // wg. exit #include <fstream.h> // wg. Dateioperationen int main(int argc, char *argv[]) { // copy argv[1] argv[2] if (argc!= 3) { // falsche Verwendung cerr << "Verwendung: " << argv[0] << " Quelle Ziel" << endl; exit (-1); $ simplecp Verwendung: simplecp.exe Quelle Ziel $ simplecp /etc/passwda xx /etc/passwda kann nicht geöffnet werden! $ simplecp /etc/passwd xx $ Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 8/15

ifstream quelle; // Quelldatei (Lesen) quelle.open(argv[1], ios::in); // zum Lesen öffnen if (!quelle) { // Datei kann nicht geoeffnet werden cerr << argv[1] << " kann nicht geöffnet werden!\n"; exit(-2); ofstream ziel; // Zieldatei (Schreiben) ziel.open(argv[2], ios::out); // zum Schreiben öffnen if (!ziel) { // Datei kann nicht geoeffnet werden cerr << argv[2] << " kann nicht geöffnet werden!\n"; exit(-3); $ char c; while (quelle.get(c)) ziel.put(c); quelle.close(); ziel.close(); // zeichenweise kopieren // Schliessen der Quelldatei // Schliessen der Zieldatei Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 9/15

Sollen nicht nut Textdateien, sondern auch Binärdateien bearbeitet werden, so ist beim Öffnen der Schalter ios::binary anzugeben. Dabei wird verhindert, dass die (in DOS) sonst automatisch Umwandlung von Zeilenendekennung \n in CR/LF erfolgt: ziel.open(argv[2], ios::binary ios::out); Weitere Schalter sind: ODER Verknüpfung von Schaltern ios::app ios::ate trunc append: beim Schreiben anm Ende der Datei anhängen nach dem Öffnen an das Dateiende springen Voheriger Inhalt der Datei Löschen Weiterhin sind gewisse Statusinformationen mittels Funktionen abfragbar, etwa ob das Ende der Datei schon erreicht ist durch eof(). Beispiel (linecount) char c; int zaehler = 0; while (!datei.eof()) { datei.get(c); if (c=='\n') zaehler++; // Zeichenweise lesen Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 10/15

Neben dem Arbeiten mit Zeichen, können auch Werte (im ASCII Format) von einer Datei gelesen bzw. auf sie geschrieben werden (im ASCII Format) werden. double x; ifstream dateiin; ofstream dateiout; dateiin >> x; // Lesen von Datei dateiout << x+1; Hörsaalübung: In einer Datei stehen double Messwerte. Schreiben Sie ein Programm, dass die als Parameter angegebene Messwertdatei liest und Anzahl, Summe, Mittelwert und kleinsten und größten Messwert ausgibt und zusätzlich in einer Datei speichert. Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 11/15

3. Binärdateien Bisher sind die Lese- und Schreioperationen immer auf ASCII Dateien ausgeübt worden. Dabei wird ein double immer in eine Folge von Ziffern (und Dezimalpunkt) umgewandelt. Wird z.b. der Wert -1.234567890 in eine ASCI Datei geschrieben, so werden insgesamt 12 Byte in die Datei geschrieben. Wird derselbe Wert in eine Binärdatei geschrieben, so werden so viele Bytes belegt, wie ein double ausmacht: in vielen Rechnern 8 Byte. Während die ASCII Datei mit einem normalen Editor lesbar ist, kann eine Binärdatei nur mit Hex-Editoren gelesen werden oder mit speziellen Programmen, die wissen, wie das Binärbild zu lesen ist. Binäre Ein-/ und Ausgabe ist also unformatiert: beim Lesen und Schreiben wird keine Konvertierung, etwa von \n vorgenommen. Zum Schreiben und Lesen existieren die Funktionen write(adresse,bytes) und read(adresse, bytes). Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 12/15

Die Wirkung ist: Speicher Datei write(p, n) Speicher Datei read(p, n) Soll also ein double-wert in eine Datei geschrieben und anschließend gelesen werden, ist folgendes Programm erforderlich: Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 13/15

$ cat doubebinary.cpp double d; ofstream ausgabe; ausgabe.open(dateiname.c_str(), ios::out ios::binary); if (!ausgabe) { // Datei kann nicht geoeffnet werden cerr << dateiname << " kann nicht geöffnet werden!\n"; exit(-2); // Anzahl Bytes von double ab Adresse von d in Datei schreiben ausgabe.write((char *)&d, sizeof(d)); ausgabe.close(); ifstream eingabe; eingabe.open(dateiname.c_str(), ios::in ios::binary); if (!eingabe) { // Datei kann nicht geoeffnet werden cerr << dateiname << " kann nicht geöffnet werden!\n"; exit(-2); // Anzahl Bytes von double aus Datei lesen und ab Adresse d speichern eingabe.read((char *)&d, sizeof(d)); eingabe.close(); Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 14/15

Hörsaalübung: Schreiben Sie ein Programm, das eine Folge von double einliest, in einem Array speichert und das gesamte Array mit einem write() in eine Binärdatei speichert. In einem zweiten Programm soll die obige Binardatei so gelesen werden, dass jeweils ein double-wert mittels read () in einer Arraykomponentre abgelegt wird. Programmieren I: Ein-Ausgabe Prof. Dr. Alois Schütte 15/15