25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

996 Въведение в програмирането със C#<br />

Може би проблеми ще създаде изчистването на празните редове. Ако<br />

събираме всички редове в някакъв буфер (StringBuilder) и след това<br />

премахваме двойните празни редове, този буфер ще заеме много памет при<br />

големи входни файлове (например при 500 MB входен файл).<br />

За да спестим памет, ще се опитаме да чистим излишните празни редове<br />

още след заместване на таговете със символа за празен ред.<br />

Вече разгледахме внимателно идеята за решаване на задачата, уверихме<br />

се, че е добра и покрива специалните случаи, които могат да възникнат, и<br />

смятаме, че няма да имаме проблеми с производителността. Сега вече<br />

можем спокойно да преминем към имплементация на алгоритъма. Ще пишем<br />

кода стъпка по стъпка, за да откриваме грешките възможно най-рано.<br />

Стъпка 1 – прочитане на входния файл<br />

Първата стъпка от решението на поставената задача е прочитането входния<br />

файл. В нашия случай той е HTML файл. Това не трябва да ни притеснява,<br />

тъй като HTML е текстов формат. Затова, за да го прочетем, ще използваме<br />

класа StreamReader. Ще обходим входния файл ред по ред и за всеки ред<br />

ще извличаме (засега не ни интересува как) нужната ни информация (ако<br />

има) и ще я записваме в обект от тип StringBuilder. Извличането ще<br />

реализираме в следващата стъпка (стъпка 2), а записването в някоя от последващите<br />

стъпки. Да напишем нужния код за реализацията на нашата<br />

първа стъпка:<br />

string line = string.Empty;<br />

StreamReader reader = new StreamReader("Problem1.html");<br />

while ((line = reader.ReadLine()) != null)<br />

{<br />

// Find what we need and save it in the result<br />

}<br />

reader.Close();<br />

Чрез написания код ще прочетем входния файл ред по ред. Да помислим<br />

дали сме реализирали добре първата стъпка. Сещате ли се какво пропуснахме?<br />

С написаното ще прочетем входния файл, но само ако съществува. Ами ако<br />

входния файл не съществува или не може да бъде отворен по някаква<br />

причина? Сегашното ни решение няма да се справи с тези проблеми. В кода<br />

има и още един проблем: ако настъпи грешка при четенето или обработката<br />

на данните от файла, той няма да бъде затворен.<br />

Чрез File.Еxists(…) ще проверяваме дали входния файл съществува. Ако<br />

не съществува, ще извеждаме подходящо съобщение и ще прекратяваме

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!