c#1_osnovy
.PDFПример 1: использование Regex.IsMatch
using System
using System.Text.RegularExpressions;
{
public static void Main()
{string[] txt = { "111-22-33", "111-2-333"}; string reg = @"^\d{3}-\d{2}-\d{2}$"; foreach (string s in txt)
{ if (Regex.IsMatch(s, reg)) Console.WriteLine("{0} номер телефона", s);
else Console.WriteLine("{0} ошибка", s); |
} |
} |
|
} |
// 111-22-33 номер телефона |
|
// 111-2-333: ошибка |
Пример 2: использование Regex.Matches
// совпадения со строкой "abc" в тексте using System;
using System.Text.RegularExpressions;
{
public static void Main()
{string txt = "abc123abc456abc789"; string reg = "abc";
foreach (Match m in Regex.Matches(txt, reg))
Console.WriteLine("нашел {0} с позиции {1}", m.Value, m.Index);
}
} |
// нашел abc с позиции 0 |
|
|
// нашел abc |
с позиции 6 |
|
// нашел abc |
с позиции 12 |
Пример 3: использование Regex.Matches
// создание экземпляра класса Match string txt = "abc123abc456abc789";
string reg = "abc";
Match m = Regex.Match(txt, reg); while (m.Success)
{ Console.WriteLine("нашел {0} с позиции {1}", m.Value, m.Index); m = m.NextMatch(); }
Пример 5: Разбиение строки на слова (метод Split)
string txt = “cалат – 4руб, борщ – 10руб, чай – 1руб."; string reg = "[ -,.]+";
Regex r = new Regex(reg); string[] words = r.Split(txt);
foreach ( string s in words ) Console.WriteLine(s);
Работа с файлами
Принципы работы с файлами
∙Чтение (ввод - input) — передача данных с внешнего устройства
в оперативную память, обратный процесс — запись (вывод - output).
∙Ввод-вывод в C# выполняется с помощью
подсистемы ввода-вывода (IO) и классов библиотеки .NET. Обмен данными реализуется с помощью потоков.
∙Поток (stream) — абстрактное понятие, относящееся к любому переносу данных от источника к приемнику. Потоки обеспечивают надежную работу как со стандартными, так и с определенными пользователем типами данных, а также единообразный и понятный синтаксис.
∙Поток определяется как последовательность байтов и не зависит от конкретного устройства, с которым производится обмен.
∙Обмен с потоком для повышения скорости передачи данных производится, как правило, через буфер.
Буфер выделяется для каждого открытого файла.
Классы .NET для работы с потоками
Уровни обмена с внешними устройствами Выполнять обмен с внешними устройствами можно на уровне:
∙ |
двоичного представления данных |
||
|
|
BinaryReader, |
BinaryWriter; |
∙ |
байтов |
FileStream; |
|
∙ |
текста - строк (последовательности символов) |
||
|
|
StreamWriter, |
StreamReader. |
Доступ к файлам может быть:
∙последовательным – очередной элемент можно прочитать (записать) только после предыдущего элемента;
∙произвольным или прямым – выполняется чтение (запись) произвольного элемента по заданному адресу.
∙Текстовые файлы - только последовательный доступ!
∙В двоичных и байтовых потоках можно использовать оба метода доступа.
∙Прямой доступ при отсутствии дальнейших преобразований обеспечивает высокую скорость получения нужной информации.
Работа с каталогами (папками) и файлами
∙создание, удаление, перемещение файлов и каталогов, получение свойств…
Используются классы: Directory, DirectoryInfo; File, FileInfo пространства имен System.IO (необходимо подключать)
Пример записи в текстовый файл
string s = "Привет"; int a = 15; int b = 12;
StreamWriter fw = new StreamWriter(“D:\\work\\my.txt", true);
// true дозапись, false перезапись |
|
fw.WriteLine("1: Работа с файлом"); |
// строка 1 |
fw.WriteLine("2: "+ s); |
// строка 2 |
fw.Write("3: a = " + a); fw.WriteLine(", b = " + b); |
// строка 3 |
fw.WriteLine("4: 'a + b' = " + a + b); |
// строка 4 |
fw.WriteLine("5: a + b = " + (a + b)); |
// строка 5 |
fw.Close(); |
|
|
|
|
*Варианты: |
“D:\\work\\my.txt" = @“D:\work\my.txt" |
|||
Чтение из текстового файла |
|
|||
Пример 1: весь файл -> в одну строку |
|
|||
try |
|
|
|
|
{ |
StreamReader f = new StreamReader( "text.txt" ); |
|
||
string s = f.ReadToEnd(); |
|
|||
Console.WriteLine(s); |
|
|||
f.Close(); |
} |
|
||
catch(FileNotFoundException ex ) { |
|
|||
|
Console.WriteLine( ex.Message ); |
|
||
|
Console.WriteLine( "Проверьте имя файла!" ); return; |
} |
||
catch |
{ Console.WriteLine( "Неопознанное исключение!" ); |
return; } |
||
Пример 2: Построчное чтение текстового файла |
|
|||
|
StreamReader f = new StreamReader( "text.txt" ); |
|
||
|
string s; |
int i = 0; |
|
while ( ( s = f.ReadLine() ) != null ) Console.WriteLine( "{0} : {1}", ++i , s );
f.Close();
Некоторые методы класса DirectoryInfo
Create, CreateSubDirectory Создать каталог или подкаталог
|
по указанному пути в файловой системе |
|
Delete |
Удалить каталог со всем его содержимым |
|
GetDirectories |
Возвратить массив строк, представляющих все подкаталоги |
|
GetFiles |
Получить файлы в текущем каталоге |
|
|
в виде массива объектов класса FileInfo |
|
MoveTo |
Переместить каталог и все его содержимое |
|
|
на новый адрес в файловой системе |
|
Parent |
Возвратить родительский каталог |
|
Пример 3: Копирование файлов *.jpg из каталога d:\ris в каталог d:\tmp |
||
try { |
|
|
string destName = @"d:\tmp\"; |
|
|
DirectoryInfo |
dir = new DirectoryInfo( @"d:\ris" ); |
|
if ( ! dir.Exists ) |
// проверка существования каталога |
|
{ Console.WriteLine( ”Нет каталога " + dir.Name ); return; } |
||
DirectoryInfo |
dest = new DirectoryInfo( destName ); |
|
dest.Create(); |
|
// создание целевого каталога |
FileInfo[] files = dir.GetFiles( "*.jpg" ); |
//список файлов |
|
foreach( FileInfo f in files ) |
|
|
f.CopyTo( dest + f.Name ); |
// копирование файлов |
|
Console.WriteLine( "Скопировано файлов " + files.Length); |
||
} |
|
// конец блока try |
catch ( Exception e ) {
Console.WriteLine( ”Ошибка: " + e.Message ); }