Upload
dangkhanh
View
214
Download
2
Embed Size (px)
Citation preview
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.