Top Banner
Windows Programming Using C# Regular Expressions, Files & directories Delegates
63

Windows Programming Using C# Regular Expressions, Files & directories Delegates.

Jan 02, 2016

Download

Documents

Spencer Barker
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

Windows Programming Using C#

Regular Expressions,Files & directoriesDelegates

Page 2: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

2

Contents

Regular Expressions Exceptions Files & Directories Delegates

Page 3: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

3

Regular Expressions

A regular expression is some text which is designed to match other text

You have seen one form of this as the wildcards used to match filenames Eg. *.exe

The regular expressions used by .NET are based on Perl5 regular expressions

These are different from the ones used to match file names on the command line

Page 4: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

4

Regular Expressions

The simplest form of regular expression is one which matches itself“hello”This will match the text “hello”

In addition to regular characters, regex supports various metacharacters

These all have special meanings and instruct the regex to match different strings

Page 5: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

5

Any Character

The simplest metacharacter is the “.” which will match any single character

“a.b” will match “aab” “abb” “acb” “axb” Or any other 3 character string beginning with a and

ending with b

Page 6: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

6

Escape Characters

But what if you want to search for a string with a period in it?

Then you must escape the special meaning of the period as a metacharacter and restore it to a plain old period

Backslash is the escape character“a\.b” matches the single string “a.b”

Page 7: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

7

Multiple Occurrences

There are metacharacters to represent multiple occurrences of the character in front of them

“a*” Any number of a’s

“ab?c” “ac” or “abc”

“ab+c” “abc” or “abbc” or …

“a.+b” “a” followed by 1 or more

chars and a “b”

Char Meaning

? Zero or once

* Zero or more

+ Once or more

Page 8: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

8

Specific Occurrences

You can also specify a specific number of times a character can occur

It has several forms {3} – exactly 3 occurrences {3,} – 3 or more occurrences {3, 8} – between 3 and 8 occurrences

“.{3,4}ane” will match “hexane” “pentane” “butane” “propane”

Page 9: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

9

Alternatives

Often, you want to match one of several strings

This can be done by grouping the options in parentheses and using the |

“(iso|cyclo)pentane” matches“isopentane”“cyclopentane”

Page 10: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

10

Closures

At times, you need to match one of a set of characters This can be done by placing the characters in square

brackets “[cbf]at” matches

“cat”, “bat” and “fat”

Runs of character can use a dash “[a-z0-9-]”

Matches any lower case letter or digit or dash

The use of a caret reverses the meaning “[^a-z]”

Matches any character other than a lower-case letter

Page 11: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

11

String Ends

“^” matches the beginning of the string “$” matches the end of string “abc$”

Matches “abc” only at the end of the string “^abc”

Matches “abc” only at the beginning of the string

Page 12: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

12

Special Metacharacters

Symbol Meaning

\w Any word character (alphanumeric or _)

\W Any non-word character

\s Any whitespace character (space, tab, newline)

\S Any non-whitespace character

\d Any digit

\D Any non-digit

\b Any word boundary character

\B Any character not a word boundary

Page 13: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

13

Regular Expressions in C#

C# provides System.Text.RegularExpressions.Regex

Represents a regular expression Match() -- finds first match Matches() -- finds all matches Split() – Splits into an array of strings Replace – replaces matched text

Match Represents the result of a single regex match

MatchCollection Represents the results of multiple matches

Group Represents the match of multiple expressions

Page 14: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

14

Matching Strings

To match a regular expression Regex.Match(string input)

This returns a Match instance with Value – the matched substring Index – where the match occurred Length – the length of the match Success – true if anything was matched

To find the next match Match.MatchNext()

* see RegexDemo

Page 15: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

15

Matching Strings

string input = "propane butane hexane septane heptane decane";

string expr ="h.{2,3}ane";Regex rx = new Regex(expr);Match m = rx.Match(input);while(m.Success) { Console.WriteLine("found \"{0}\" of length {1} at

position {2}", m.Value, m.Length, m.Index);

m = m.NextMatch();}

Page 16: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

16

Splitting Strings

The Split method splits a string into an array of strings where the matches are found

The matched characters are discardedstring[] Split(string input)

Page 17: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

17

Splitting Strings

string input = "A cat, a hat and a mouse";string sepRegex = " |, ";Regex rx = new Regex(sepRegex);string[] words = rx.Split(input);Console.WriteLine("Split Demo\ninput={0}", input);

foreach (string s in words) { Console.WriteLine(s);}

Page 18: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

18

Replacing Text

The Replace method is used to replace all matching text with replacement text string Regex.Replace(string input)

string input = "I was\twalking while”; Regex rx = new Regex(@"\s+");string result = rx.Replace(input, " ");Console.WriteLine("Replace Demo\ninput={0}\

nresult={1}", input, result);

Page 19: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

19

Contents

Regular Expressions Exceptions Files & Directories Delegates

Page 20: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

20

Exceptions

Exceptions are handled in much the same way as in Java

C# has a try-catch-finally statementtrystatement

catchstatement

[finallystatement]

Page 21: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

21

Exceptions

This differs from Java in that you can have a catch without a parameter which will catch every exception

Unfortunately, there is no exception to get information from when it is done this way

try {// some statements

}catch { // no parameters, so catch all

Console.WriteLine(“unknown exception caught”);}

Page 22: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

22

The Exception Class

System.Exception is the root of all exception classes

The constructors areException()

Exception(string msg)

Exception(string msg, Exception cause)

Page 23: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

23

The Exception Class

The final form of the constructor is used to envelop an exception in another exception

This is useful when a system exception is thrown and you want to wrap it in a more meaningful application exception

Numerous properties provide access to the contents of the Exception

Page 24: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

24

Exception Properties

Property Explanation

Data A read-only property implementing IDictionary. Might contain key/value pairs relating to the exception or might be null.

HelpLink A string containing a URL or other reference. Is read/write.

InnerException A nested exception which can be set only by the constructor.

Message A string message explaining the exception.

Source A string which can be get/set to identify the source of the exception.

StackTrace A string showing the call path when the exception was thrown.

Page 25: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

25

ApplicationException Class

Direct subclasses of Exception are thrown only by the system

Applications should throw exceptions derived from ApplicationException

ApplicationException extends Exception but adds no new members

Page 26: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

26

Throwing Exceptions

To throw an exceptionthrow new ApplicationException(“broken”);

Both Java and C++ allow methods which throw exceptions to declare them

C# does not provide a way for a method to declare that an exception is thrown

You must consult the documentation to determine if an exception is thrown by a method

Page 27: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

27

Custom Exceptions

You can create custom exceptions by extending ApplicationExceptionProvide constructors which call the base class

constructorsAdd any fields and constructor parameters for

your specific exception informationAdd properties/methods for the new fields

Page 28: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

28

Contents

Regular Expressions Exceptions Files & Directories Delegates

Page 29: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

29

Files & Directories

This section will explore how to work with files and directories

We begin with directories Directory

Contains static methods for creating, deleting, moving and listing directories

DirectoryInfo An instance represents a directory Has instance methods for manipulating the directory

Page 30: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

30

Directory Class

Method Description

CreateDirectory( ) Creates all directories and subdirectories specified by its path parameter.

GetCreationTime() Returns and sets the time the specified directory was created.

GetDirectories() Gets named directories.

GetLogicalDrives() Returns the names of all the logical drives in the form

<drive>:\.

GetFiles() Returns the names of files matching a pattern.

GetParent() Returns the parent directory for the specified path.

Move() Moves a directory and its contents to a specified path.

Page 31: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

31

Directory Class

Method Description

Delete( ) Deletes a directory.

Exists() Determines if a directory exists.

GetFiles() Returns the names of files in a specified directory.

GetCurrentDirectory() Returns the path of the current directory.

GetLastAccessTime() Returns the last time file was accessed.

GetLastWriteTime() Returns the last time file was written.

Page 32: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

32

DirectoryInfoClass

Method Description

Attributes Inherits from FileSystemInfo; gets or sets the

attributes of the current file.

CreationTime gets or sets the creation time of the current file.

Exists true if the directory exists.

Extension The File Extension

FullName the full path of the file or directory.

Name The directory name.

Root Root portion of the path.

Parent Parent Directory

Page 33: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

33

DirectoryInfo Class

Method Description

Create() Creates the directory if it does not exist.

CreateSubdirectory() Creates a subdirectory.

Delete() Deletes the directory.

GetDirectories() Returns an array of DirectoryInfo objects.

GetFiles() Returns an array of FileInfo objects.

MoveTo() Relocates the directory and its contents.

Refresh() Refreshes the directory list.

* See FileDemo

Page 34: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

34

A File Lister

string curDirName = Directory.GetCurrentDirectory();DirectoryInfo curInfo = new DirectoryInfo(curDirName);Console.WriteLine("Listing for {0}", curInfo.FullName);DirectoryInfo[] dlist = curInfo.GetDirectories();foreach (DirectoryInfo d in dlist) { Console.WriteLine("{0}\t\t{1}", d.Name,

d.LastWriteTime);}FileInfo[] flist = curInfo.GetFiles();foreach (FileInfo f in flist) { Console.WriteLine("{0}\t\t{1}", f.Name,

f.LastWriteTime);}

Page 35: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

35

Working with Files

Two classes are provided to deal with filesFile

A collection of static methods to manipulate filesFileInfo

Instance methods to manipulate a single file

These classes are analogous to the two directory classes

They add the ability to read and write files

Page 36: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

36

Reading and Writing Files

Files can be read and written in two waysBinary

Binary data is written to a file Fast, efficient, not human readable Suited for writing data structures

Text Converts bytes to a specific character encoding Slower than binary Can be read by humans

Page 37: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

37

Stream Class

The Stream class is used to read and write binary data from and to a file

Read methods int Read(byte[] buf, int offset, int count)

Reads up to count bytes into buf at offset Return the number of bytes read or zero at EOF

int ReadByte() Reads one byte Returns -1 at EOF

Page 38: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

38

Stream Class

Write methods void Write(byte[] buf, int offset, int count) void WriteByte(byte); void Flush();

Direct Access Methodslong Seek(long offset, SeekOrigin);

Page 39: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

39

SeekOrigin

An enumeration with values indicating where a seek should be fromBegin, Current, End

Seeking moves the read/write pointer through a file and determines where the next read or write will occur

Page 40: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

40

StreamReader Class

This reads a file by converting the bytes to characters int Read()

Reads the next char, returns -1 on EOF int Read(char[] buf, int offset, int count)

Reads up to count chars into buf at offset Return 0 at EOF

string ReadLine() Reads the next line Returns null on EOF

Page 41: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

41

StreamWriter Class

Used to write text filesvoid Write(char)void Write(char[])void Write(string)Void Flush()

Page 42: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

42

Buffered Streams

Read and writing a byte at a time is painfully slow

It is much more efficient to read and write a buffer full at a time

The BufferedStream class does just that It works just like a stream Just wrap it around your stream

BufferedStream bs = new BufferedStream(stream);

Page 43: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

43

Opening Binary Streams

Open one stream for reading and one for writing

Use the static methods of the File classStream OpenRead(string path);Stream OpenWrite(string path);

Page 44: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

44

Reading and Writing Text Files

To create a file for writingStreamWriter sw = new StreamWriter("MyFile.txt");

To open a file for readingFileInfo fi = new FileInfo("MyFile.txt");

StreamReader sr = fi.OpenText();

Page 45: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

45

Reading and Writing Text Files

The following exampleChecks to see if a file exists If it does not, it opens the file for writing and

writes some content It then opens the file for reading and writes

the contents to the console It then closes the file

Page 46: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

46

Read/Write Example

if (! File.Exists("MyFile.txt")) { StreamWriter sw = new StreamWriter("MyFile.txt"); sw.WriteLine("Line 1"); sw.WriteLine("Line 2"); sw.WriteLine("Line 3"); sw.Close();}FileInfo fi = new FileInfo("MyFile.txt");StreamReader sr = fi.OpenText();string line;while ((line = sr.ReadLine()) != null) { Console.WriteLine(line);}sr.Close();fi.Delete();

Page 47: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

47

Contents

Regular Expressions Exceptions Files & Directories Delegates

Page 48: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

48

Delegates

A delegate is A single function pointerA collection of pointer to the same type of

function It is simply a variable which can hold one

or more pointers to functions In C and C++ these are known as

callbacks

Page 49: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

49

Delegates

In may programming tasks you want to perform an action but want that action to be flexible

This means you want the client of your class to provide the action, yet you want to invoke it

There are a couple of solutions to this problem

Page 50: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

50

The Visitor Pattern

You are writing a container class You want clients to be able to perform some

action on every element of your container You do not want them to know how your class is

implemented So, how do you let them visit every element in a

container without knowing how the container is implemented?

Page 51: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

51

The Delegate Pattern

The delegate pattern says that you want to perform a logical action but leave the implementation to be specified at run-time

Therefore, you create a delegate and call it At run-time, the delegate is assigned the value

of a real function Thus, when you call the delegate, you actually

call the function assigned at run time

Page 52: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

52

Implementing the Delegate Pattern

A delegate can be used to solve the vistor pattern

But how do you implement a delegate? In C/C++ use a function pointer In Java use an interface In C# use the special delegate type

Page 53: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

53

The Interface Solution

To implement a solution to the visitor pattern using interfaces First declare an interface

public interface Visitor {

void Visit(object obj);

}Then create a class which implements the

Visitor interface

Page 54: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

54

The Interface Solution

public class PrintVisitor: Visitor {

void Visit(object obj) {

Console.WriteLine(obj);

}

}The final step is to create a container class

which will provide a method to visit all of the elements it contains and invoke the visitor

Page 55: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

55

The Interface Solution

public class MyArray {int[] ar;

public MyArray(int sz) {ar = new int[sz];

}

public void VisitElements(Visitor v) {foreach(int i in ar)

v.Visit(i);}

}

Page 56: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

56

The Interface Solution

This just leaves writing the code to bring it all together

MyArray ar1 = new MyArray(10);

// put something in the array

ar1.VisitElements(new PrintVisitor());

Page 57: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

57

Now, Back to Delegates

C# lets you declare a delegate as something which can be associated with one or more functions with the same signature and return type public delegate void ArrayVisitor( object o);

This declares a delegate Called ArrayVisitor Which accepts a single object parameter And returns void

Page 58: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

58

Creating a Delegate

Begin by creating a method with the required signature and return typepublic void printer(object o) {

Console.WriteLine(o);}

Then, create a delegate from itArrayVisitor v1 = new ArrayVisitor(printer);

Page 59: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

59

Using a Delegate

OK, so now that we have a delegate, how do we use it?

object[] ar = new object[5];

// put some values in the array

foreach(object obj in ar)

v1(obj);

Page 60: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

60

Multicast Delegates

So far we can invoke one method when we invoke a delegate

What if we wanted to be able to do more than what one method could do?

We could have a delegate which could invoke several methods when it was invoked!

This is called a multicast delegate

Page 61: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

61

Multicast Delegates

Declare a multicast delegateArrayVisitor multiVisitor;

Now, assign a method to itmultiVisitor = new ArrayVisitor(printer);

And then add anothermultiVisitor += new ArrayVisitor(printer1);

Now, when multiVisitor is invoked, it will invoke both printer and printer1

Page 62: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

62

Multicast Delegates

You can add as many delegates as you like to a multicast delegate

You can remove a delegate from a multicast delegate by subtracting it

ArrayVisitor multiVisitor, v1, v2;v1 = new ArrayVisitor(printer);v2 = new ArrayVisitor(printer1);multiVisitor = v1;multiVisitor += v2;multiVisitor -= v1;

* see VisitableArray

Page 63: Windows Programming Using C# Regular Expressions, Files & directories Delegates.

63

Event Handling

GUI programming is event driven When a button is clicked, an event is generated This event is dispatched to any listeners who

have registered an interest in the event This is called the observer pattern or publish and

subscribe Delegates are used to implement lists of event

handlers in .NET GUI programming