C# - Einführung in die Programmiersprache „Ein- und ... · PDF fileC# -...

Post on 06-Feb-2018

214 views 2 download

Transcript of C# - Einführung in die Programmiersprache „Ein- und ... · PDF fileC# -...

Leibniz Universität IT Services | Anja Aue

C# - Einführung in die Programmiersprache

„Ein- und Ausgabe von Daten“

*.cs

*.doc

*.txt

Console

Console

*.txt

C# - Einführung | 26.06.12 Seite 2

Arbeiten mit Dateien, Verzeichnissen und Streams

Der Namensraum System.IO bietet verschiedenen Methoden zur Ein- und Ausgabe.

Eine Datei ist eine Sammlung von Daten. Die Dateiendung gibt über das Format der Daten Auskunft.

In Verzeichnissen werden Dateien strukturiert abgelegt. Streams schreiben oder lesen Daten. Strom von Daten.

C# - Einführung | 26.06.12 Seite 3

Informationen zu Dateien und Verzeichnissen

string datei = "";

Console.WriteLine("Standard-Verzeichnistrenner: " +

Path.DirectorySeparatorChar);

Console.WriteLine("Alternativer Verzeichnistrenner: " + Path.AltDirectorySeparatorChar);

datei = Environment.GetFolderPath(Environment.SpecialFolder.Personal) +

Path.DirectorySeparatorChar + "StdOut.txt";

Console.WriteLine("Dateiname + Endung: " + Path.GetFileName(datei));

Console.WriteLine("Dateiname ohne Endung: " +

Path.GetFileNameWithoutExtension(datei));

Console.WriteLine("Dateiendung: " + Path.GetExtension(datei));

C# - Einführung | 26.06.12 Seite 4

Weitere Informationen

Console.WriteLine("Aktuelles Arbeitsverzeichnis: " +

Environment.CurrentDirectory);

Console.WriteLine("Betriebssystemversion: " + Environment.MachineName);

Console.WriteLine("Benutzername: " + Environment.UserName);

C# - Einführung | 26.06.12 Seite 5

Konsole

entspricht der MS Eingabeaufforderung.

wird in der Klasse System.Console beschrieben. bietet Methoden zum Einlesen und Ausgeben von Daten.

C# - Einführung | 26.06.12 Seite 6

Ausgabe von Daten

System.Console.Write("Text") schreibt den Text in den runden Klammern in die Konsole. Die Ausgabe wird ohne Zeilenumbruch abgeschlossen.

Console.WriteLine("Text") schreibt den angegebenen Text in die Eingabeaufforderung. Die Ausgabe wird automatisch mit einem Zeilenumbruch abgeschlossen.

C# - Einführung | 26.06.12 Seite 7

Verknüpfung von Text

Literale und Variablen können mit Hilfe des Pluszeichens verknüpft werden.

Andere Möglichkeit: In dem Literal werden Platzhalter für den variablen Text genutzt.

Diese Platzhalter bieten verschiedene Formatierungsmöglichkeiten.

Console.WriteLine("Buchstabe: " + intBuchstabe);

Console.WriteLine("Buchstabe: {0}", intBuchstabe);

Console.WriteLine("Buchstabe: {1} : {0}",strBuchstabe, intBuchstabe);

C# - Einführung | 26.06.12 Seite 8

Mit Platzhaltern arbeiten

Die Elemente der Liste in den runden Klammern werden durch Kommata getrennt.

Es kann eine beliebige Anzahl von Variablen genutzt werden. Die Anzahl der Variablen entspricht der Anzahl der Platzhalter

in dem Literal.

Platzhalter werden durch die geschweiften Klammern in dem Literal gekennzeichnet. Die Nummern innerhalb der Klammern kennzeichnet die Position in der Liste.

Die erste Variable hat die Nummer 1 und so weiter.

Console.WriteLine("Buchstabe: {0}", intBuchstabe);

Console.WriteLine("Buchstabe: {1} : {0}",strBuchstabe, intBuchstabe);

C# - Einführung | 26.06.12 Seite 9

Formatierung der Ausgabe-Daten

Console.WriteLine("Dezimalzahl: {0}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:0}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:00.000}", dblZahl);

Console.WriteLine("Dezimalzahl : {0:#0.000}", dblZahl);

Console.WriteLine("Dezimalzahl : {0,15:0.00}", dblZahl);

Platzhalter Formatierung{0 : 0} Anzahl der Stellen vor dem Komma

{0 : 00.000} Anzahl der Stellen vor und nach dem Komma

{0 : #0.000} Hash-Zeichen: Falls vorhanden ...

{0, 15 : 0.00} 15 Zeichen breite rechtsbündige Ausgabe.-15 Zeichen breite linksbündige Ausgabe.

C# - Einführung | 26.06.12 Seite 10

Daten von der Konsole lesen

System.Console.ReadLine() liest eine Zeile von der Konsole ein. Eine Zeile wird durch <RETURN> abgeschlossen.

System.Console.Read() gibt ein Zeichen als int-Wert zurück. Der Wert -1 kennzeichnet das Ende der Eingabe.

System.Console.ReadKey(True) ruft die nächste gedrückte Zeichen- oder Funktionstaste ab. Falls der Methode True übergeben wird, wird das Zeichen in der Konsole angezeigt.

C# - Einführung | 26.06.12 Seite 11

Standardeingabe und -ausgabe

Console.In beschreibt die Standardeingabe. Häufig wird am Bildschirm mit Hilfe der Tastatur eingegeben.

Console.Out beschreibt die Standardausgabe. Bei einer Konsolen-Anwendung wird der Bildschirm genutzt.

Console.Error beschreibt das Standardgerät für die Fehlerausgabe.

Mit Hilfe von Console.SetIn(), Console.SetOut() und Console.SetError() kann die Standardausgabe in eine Datei umgeleitet werden.

C# - Einführung | 26.06.12 Seite 12

… in eine Datei umleiten

StreamWriter ausgabe = new StreamWriter(

Environment.GetFolderPath( Environment.SpecialFolder.Personal)

+ Path.DirectorySeparatorChar + "StdOut.txt");

Console.SetError(ausgabe);

try{

ergebnis = divident / divisor;

Console.SetOut(ausgabe);

Console.WriteLine("Berechnung: {0} / {1} = {2:###00.00}",

divident, divisor, ergebnis);

}

catch (FormatException){

Console.Error.WriteLine("Umwandlung nicht möglich");

}

C# - Einführung | 26.06.12 Seite 13

Arbeiten mit einem Stream

Ein Stream-Objekt erzeugen.StreamWriter schreiben = new StreamWriter("datei.txt");

Auf die Daten lesend oder schreibend zugreifen,Console.Error.WriteLine("Umwandlung nicht möglich");

Datenpuffer leeren und das Stream-Objekt schließen.schreiben.Close();

C# - Einführung | 26.06.12 Seite 14

StreamWriter ...

schreibt zeichenweise Text mit einer bestimmten Kodierung in die Datei.

var Stream BytesDatei

C# - Einführung | 26.06.12 Seite 15

StreamReader...

liest zeichenweise den Text einer Datei mit einer bestimmten Kodierung ein. Standardmäßig wird UTF-8 genutzt.

var Stream BytesDatei

C# - Einführung | 26.06.12 Seite 16

Stream-Objekt erzeugen

In diesen Beispielen wird ein Datenstrom zu einer Datei erzeugt.

Das neue Objekt bekommt als Start-Parameter einen Dateinamen übergeben.

StreamWriter schreiben = new StreamWriter("datei.txt");

StreamReader lesen = new StreamReader("datei.txt");

C# - Einführung | 26.06.12 Seite 17

Stream-Objekt schließen

Der Datenstrom wird geschlossen. Aber das Objekt existiert noch. Der Zugriff auf einen

geschlossenen Stream erzeugt eine Exception.

schreiben.Close();

lesen.Close();

C# - Einführung | 26.06.12 Seite 18

… auf die Standard-Ausgabe umleiten

TextWriter stdOut = Console.Out;

Console.SetOut(stdOut);

TextWriter ist eine abstrakte Klasse zum sequentiellen Schreiben von Unicode-Zeichen.

Der Variablen vom Typ TextWriter wird das Ausgabemedium mit Hilfe des Gleichheitszeichens zugewiesen.

Jeder StreamWriter ist auch ein TextWriter.

C# - Einführung | 26.06.12 Seite 19

FileStream ...

öffnet einen Stream für eine Datei.

var Stream BytesDatei

File

var Stream BytesDatei

File

C# - Einführung | 26.06.12 Seite 20

Datei zum Lesen öffnen

FileStream datei = null;

try{

if (File.Exists(this.fileName)) {

datei = new FileStream(this.fileName, FileMode.Open,

FileAccess.Read);

}

catch (Exception e){

MessageBox.Show(e.Message);

}

finally {

if (datei != null) {

datei.Close();

datei = null;

}

}

C# - Einführung | 26.06.12 Seite 21

Stream-Objekt definieren

Stream-Objekte werden wie Variablen vom Standard-Datentyp definiert.

In diesem Beispiel wird nur die Objektvariable angelegt, aber das Objekt nicht erzeugt.

FileStream datei = null;

C# - Einführung | 26.06.12 Seite 22

Stream-Objekt erzeugen

Das Schlüsselwort new erzeugt ein neues Objekt von einem bestimmten Typ.

Dem Konstruktor wird als erster Parameter ein Dateinamen übergeben. Der Pfad zur Datei kann absolut oder relativ angegeben werden.

Der zweite Parameter spezifiziert den Zugriff auf die Datei. In diesem Beispiel wird die Datei geöffnet.

Der dritte Parameter spezifiziert den Zugriff auf die Daten. In diesem Beispiel wird lesend zugegriffen.

datei = new FileStream(this.fileName,

FileMode.Open,

FileAccess.Read);

C# - Einführung | 26.06.12 Seite 23

Existiert die Datei?

Falls die angegebenen Datei existiert, wird true zurückgeliefert.

if (File.Exists(this.fileName))

C# - Einführung | 26.06.12 Seite 24

Stream-Objekt schließen

Falls ein FileStream existiert, wird dieser geschlossen.

Um Fehler zu vermeiden, wird die Objektvariable auf null gesetzt.

if (datei != null) {

datei.Close();

datei = null;

}

C# - Einführung | 26.06.12 Seite 25

Daten lesen

datei = new FileStream(this.fileName, FileMode.Open,

FileAccess.Read);

StreamReader sr = new StreamReader(datei, Encoding.Default);

string line;

while ((line = sr.ReadLine()) != null)

{

zeilen.Add(line);

}

C# - Einführung | 26.06.12 Seite 26

Stream-Objekt zum Lesen erzeugen

Als erster Parameter wird ein Objekt vom Typ FileStream angegeben. Aus dieser Datei werden Daten gelesen.

Als zweiter Parameter wird dem Objekt eine Kodierung übergeben. In diesem Beispiel werden die Daten mit der Standard-Kodierung gelesen. Als Standard wird die ANSI-Kodierung genutzt. Encoding wird in dem Namensraum System.Text definiert.

StreamReader sr = new StreamReader(datei, Encoding.Default);

C# - Einführung | 26.06.12 Seite 27

Daten lesen

Mit Hilfe der Methode ReadLine() wird die Datei zeilenweise eingelesen. Die Methode liest Zeichen bis zum Zeilenumbruch ein. Sobald die Zeile null ist, ist das Ende des Streams erreicht.

Andere Möglichkeit: ReadToEnd(). Es werden alle Daten bis zum Ende des Streams eingelesen.

while ((line = sr.ReadLine()) != null)

C# - Einführung | 26.06.12 Seite 28

Datei zum Schreiben erzeugen

FileStream datei = null;

try{

if (File.Exists(this.fileName)) {

datei = new FileStream(this.fileName,

FileMode.Create, FileAccess.Write); }

catch (Exception e){

MessageBox.Show(e.Message);

}

finally {

if (datei != null) {

datei.Close();

datei = null;

}

}

C# - Einführung | 26.06.12 Seite 29

Stream-Objekt erzeugen

Das Schlüsselwort new erzeugt ein neues Objekt von einem bestimmten Typ.

Dem Konstruktor wird als erster Parameter ein Dateinamen übergeben. Der Pfad zur Datei kann absolut oder relativ angegeben werden.

Der zweite Parameter spezifiziert den Zugriff auf die Datei. In diesem Beispiel wird die Datei neu erzeugt.

Der dritte Parameter spezifiziert den Zugriff auf die Daten. In diesem Beispiel wird schreibend zugegriffen.

datei = new FileStream(this.fileName,

FileMode.Create,

FileAccess.Write);

C# - Einführung | 26.06.12 Seite 30

Daten schreiben

datei = new FileStream(this.fileName, FileMode.Create,

FileAccess.Write);

StreamWriter sw = new StreamWriter(datei, Encoding.Default);

sw.Write(this.fileContent);

sw.Close();

C# - Einführung | 26.06.12 Seite 31

Stream-Objekt zum Schreiben erzeugen

Als erster Parameter wird ein Objekt vom Typ FileStream angegeben. Aus dieser Datei werden Daten gelesen.

Als zweiter Parameter wird dem Objekt eine Kodierung übergeben. In diesem Beispiel werden die Daten mit der Standard-Kodierung gelesen. Als Standard wird die ANSI-Kodierung genutzt. Encoding wird in dem Namensraum System.Text definiert.

StreamWriter sw = new StreamWriter(datei, Encoding.Default);

C# - Einführung | 26.06.12 Seite 32

Daten lesen

Die Daten in den runden Klammern werden in die Datei geschrieben.

Andere Möglichkeit: WriteLine(). Der geschriebene Block von Daten wird mit einem Zeilenumbruch abgeschlossen.

sw.Write(this.fileContent);

C# - Einführung | 26.06.12 Seite 33

Exceptiontry {

datei = new FileStream(this.fileName, FileMode.Open, FileAccess.Read);

StreamReader sr = new StreamReader(datei, Encoding.Default);

string line;

while ((line = sr.ReadLine()) != null) {

zeilen.Add(line);

}

}

catch (EndOfStreamException e) {

Console.WriteLine("Fehlermeldung: {0}.", e.Message);

}

catch (Exception e) {

MessageBox.Show(e.Message);

}

finally{

if (datei != null) {

datei.Close();

datei = null;

}

}

C# - Einführung | 26.06.12 Seite 34

Anweisungen immer ausführen

Das Schlüsselwort finally kennzeichnet einen Block von Anweisungen, der auch ausgeführt wird, wenn eine Ausnahme geworfen wurde.

Um Fehler zu vermeiden, wird hier die Datei geschlossen. Dieser Block steht immer am Ende einer try-catch-Anweisung. Der finally-Block ist optional.

finally{

if (datei != null) {

datei.Close();

datei = null;

}

}

C# - Einführung | 26.06.12 Seite 35

Existiert eine Datei / Verzeichnis?

Mit Hilfe der Methode .Exists() in der try-Anweisung.

Mit Hilfe der passenden Ausnahme.

if (File.Exists(this.fileName))

catch (DriveNotFoundException){}

catch (DirectoryNotFoundException) {}

catch (FileNotFoundException){}

C# - Einführung | 26.06.12 Seite 36

Interoperability in . NET

existiert mit C(ompound)O(bject)M(odel)-Anwendungen oder Win32 DLLs.

ist eine Brücke zu Windows-Komponenten, die nicht in der .NET – Welt definiert sind.

wird für Office mit Hilfe der Bibliothek Microsoft.Office.Interop hergestellt.

C# - Einführung | 26.06.12 Seite 37

C# und Word im Web

http://www.c-sharpcorner.com/uploadfile/amrish_deep/wordautomation05102007223934pm/wordautomation.aspx

http://msdn.microsoft.com/de-de/library/microsoft.office.interop.word%28v=office.11%29.aspx

C# - Einführung | 26.06.12 Seite 38

Beispiel: Schreiben in ein neues Word-Dokumente

Hinzufügung eines Verweises in dem C#-Projekt.

Öffnen der Word-Application. Erstellung eines neuen Dokuments. Text in das Dokument schreiben. Speicherung des neuen Dokuments. Schließen der Word-Application.

C# - Einführung | 26.06.12 Seite 39

Verweise in einem Projekt ...

sind Referenzen auf eine Komponente.

werden im Ordner Verweise im Projektmappen-Explorer angezeigt.

werden in der Projektdatei „*.csproj“ abgelegt.

C# - Einführung | 26.06.12 Seite 40

Verweis einem Projekt hinzufügen

Projekt – Verweis hinzufügen.

Die Registerkarte COM (Component Object Model) enthält Verweise auf Komponenten, die nicht innerhalb des .NET Frameworks entwickelt wurden.

Für Microsoft Word 2010 muss der Verweis Microsoft Word 14.0 Object Libraryhinzugefügt werden.

C# - Einführung | 26.06.12 Seite 41

Word-Application nutzen

Microsoft.Office.Interop.Word.Application oWord = new

Microsoft.Office.Interop.Word.Application();

oWord.Visible = true;

Es wird ein Verweis auf die Word-Anwendung erzeugt.

Die Anwendung wird anschließend eingeblendet.

C# - Einführung | 26.06.12 Seite 42

Missing.Value ...

wird bei Nichtsetzen eines optionalen Parameters einer Methode genutzt.

kennzeichnet einen nicht gesetzten Parameter.

Object oMissing = System.Reflection.Missing.Value;

C# - Einführung | 26.06.12 Seite 43

Word-Dokument erstellen

Object oFileName = fileName;

Object oFileFormat = WdSaveFormat.wdFormatDocument;

Document oWordDoc = new Document();

oWordDoc = oWord.Documents.Add(ref oMissing, ref oMissing,

ref oMissing, ref oMissing);

Es wird eine Instanz von einem Word-Dokument erzeugt. Der Liste aller geöffneten Dokumente wird ein neues Dokument

mit Hilfe der Methode .Add() hinzugefügt.

C# - Einführung | 26.06.12 Seite 44

Word-Dokument speichern und aktivieren

Object oFileName = fileName;

Object oFileFormat = WdSaveFormat.wdFormatDocument;

oWordDoc.SaveAs(ref oFileName, ref oFileFormat);

oWordDoc.Activate();

Die Methode .SaveAs() speichert ein Word-Dokument mit einem bestimmten Namen und in einem bestimmten Format.

Die Methode .Activate() aktiviert ein Word-Dokument. Das Dokument wird im Vordergrund angezeigt.

C# - Einführung | 26.06.12 Seite 45

Schreiben von Daten

oParagraph = oWordDoc.Content.Paragraphs.Add(ref oMissing);

oParagraph.Range.Text = fileContent;

oParagraph.Range.Font.Name = "Arial";

oParagraph.Range.Font.Size = 14;

oParagraph.Format.SpaceAfter = 24;

oParagraph.Range.InsertParagraphAfter();

Die Eigenschaft .Content ist ein Verweis auf den Inhalt des Word-Dokuments.

Der Auflistung .Paragraphs wird ein einer neuer Absatz hinzugefügt. Der Absatz kann wie in Word formatiert werden.

Mit Hilfe von .InsertParagraphAfter() wird ein Absatz nach dem letzten vorhandenen Absatz eingefügt.

C# - Einführung | 26.06.12 Seite 46

C# und Excel im Web

http://csharp.net-informations.com/excel/csharp-excel-tutorial.htm

http://www.codeproject.com/Articles/248531/Export-Excel-File-for-Csharp

http://msdn.microsoft.com/de-de/library/ms262200%28v=office.11%29

C# - Einführung | 26.06.12 Seite 47

Beispiel: Lesen von Daten in einem Excel-Sheet

Hinzufügung eines Verweises in dem C#-Projekt.

Öffnen der Excel-Anwendung. Öffnen der Excel-Datei. Daten aus Tabellen lesen. Schließen der Excel-Datei. Schließen der Excel-Anwendung.

C# - Einführung | 26.06.12 Seite 48

Verweise in einem Projekt ...

sind Referenzen auf eine Komponente.

werden im Ordner Verweise im Projektmappen-Explorer angezeigt.

werden in der Projektdatei „*.csproj“ abgelegt.

C# - Einführung | 26.06.12 Seite 49

Verweis einem Projekt hinzufügen

Projekt – Verweis hinzufügen.

Die Registerkarte COM (Component Object Model) enthält Verweise auf Komponenten, die nicht innerhalb des .NET Frameworks entwickelt wurden.

Für Microsoft Excel 2010 muss der Verweis Microsoft Excel 14.0 Object Libraryhinzugefügt werden.

C# - Einführung | 26.06.12 Seite 50

Excel-Anwendung öffnen

Microsoft.Office.Interop.Excel.Application appExcel = new

Microsoft.Office.Interop.Excel.Application();

appExcel.Quit();

Es wird eine Instanz von einem Excel-Dokument erzeugt. Mit Hilfe der Methode .Quit() wird die Anwendung

geschlossen.

C# - Einführung | 26.06.12 Seite 51

Arbeitsmappe öffnen und schließen

Workbook xlWorkbook = null;

xlWorkbook = appExcel.Workbooks.Open(this.fileName);

if (xlWorkbook != null)

{

xlWorkbook.Close();

}

Die Liste Workbooks enthält alle geöffneten Arbeitsmappen in einer Excel-Anwendung.

Mit Hilfe der Methode .Open() wird eine Arbeitsmappe geöffnet.

Die Methode .Close() schließt eine Arbeitsmappe.

C# - Einführung | 26.06.12 Seite 52

Zugriff auf ein Arbeitsblatt

xlWorkbook = appExcel.Workbooks.Open(this.fileName);

Worksheet xlWorksheet = null;

if (pSheet != "")

{

xlWorksheet = (Worksheet)xlWorkbook.Worksheets.get_Item(pSheet);

}

else

{

xlWorksheet = (Worksheet)xlWorkbook.Worksheets.get_Item(1);

}

C# - Einführung | 26.06.12 Seite 53

Hinweise

Die Liste Worksheets enthält alle Arbeitsblätter in einer Excel-Arbeitsmappe.

Die Elemente in der Liste werden mit Hilfe der Registerkarten in Excel angezeigt.

Mit Hilfe der Methode .getItem() aktiviert mit Hilfe des Namens des Arbeitsblatt oder dem Index ein bestimmtes Blatt. Das erste Blatt hat den Index 1 und so weiter...

C# - Einführung | 26.06.12 Seite 54

Mit Zellen arbeiten

Microsoft.Office.Interop.Excel.Range kunde = null;

kunde = (Microsoft.Office.Interop.Excel.Range)xlWorksheet.UsedRange;

for (rowsCount = 1; rowsCount <= kunde.Rows.Count; rowsCount++){

for (columnsCount = 1; columnsCount <= kunde.Columns.Count; columnsCount++){

if (kunde.Cells[rowsCount, columnsCount].Value2.ToString() == "Kunden"){

continue;

}

if (columnsCount == 1){

tmpKey = kunde.Cells[rowsCount, columnsCount].Value2.ToString();

tmpValue = "";

}

else{

tmpValue = kunde.Cells[rowsCount, columnsCount].Value2.ToString();

}

}

}

C# - Einführung | 26.06.12 Seite 55

Hinweise

Das Objekt UsedRange beschreibt den genutzten Zellbereich in einem Arbeitsblatt.

Das Objekt Cells beschreibt eine Zelle in einem Arbeitsblatt. Eine Zelle wird eindeutig durch eine Zeilennummer und eine

Spaltennummer identifiziert. Die erste Spalte / Zeile hat die Nummer 1 und so weiter.

Die Eigenschaft Values2 gibt den Inhalt entsprechend der Formatierung zurück.