Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Image

Red Hood and the Big Bad Wolf

redHood1

Това стана малко Creepy, ама какво да се прави 🙂 redHood2

ПП: Червената шапчица е по урок от IDrawGirls.com

Aside

PHP Homework 7

Домашно № 7 – от курса по PHP в Telerik
Както беше условието на домашното – надградил съм старата система като съм добавил система за регистрация, страница users.php и books.php.

Няма да изпадам в разяснения на кода, понеже почти всичко е по заданието – така че ако има нещо неясно или някаква критика към кода – пишете в коментарите:

Demo

Source

Image

Nqkvi Random neshta

little_guy

crossroads

acid_lake

ПП: Рисунките са на база уроци от Dragoart и Idrawgirls

Image

MindMap – Strings

Тука стана яко драсканица, но ще свърши работа.
Така е като всичко се оставя за последния момент.mindmap

Aside

C#2 (CSharp) 07-TextFiles

Здравейте,

От доста време не бях поствал нещо свързано с академията, но това е не защото не ми се занимава, ами просто материята във втората част на CSharp е доста по-трудна и бях малко назад с материала.

Но тази тема специално се оказа доста приятна и за това ще пусна кода с кратко обяснение за всяка задача:

01. Напишете програма която чете от текстов файл и принтира всички четни редове на конзолата.

Обяснение: Опитваме да заредим файла със StreamReader като сме го поставили във using поле, за да сме сигурни, че стриима ще се затвори след прочитане на файла.
Въртим един while цикъл и като условие за цикъла поставяме – докато имаме редове които не са null. Тоест цикъла се върти докато имаме редове в файла.
След това правим проверка на променливата lineCounter, която се увеличава с единица на всеки нов ред, дали е четна или не. Ако е четна – печатаме реда.

 

02. Напишете програма която свързва два текстови файла в трети общ файл.

Обяснение: Първо прочитаме съдържанието и на двата файла и го записваме в две променливи firstFile и secondFile, след това с помощта на StreamWriter записваме двата файла в нов файл combine.txt като добавяме нов ред между тях с помощта на Enviroment.NewLine. Хубаво е да слагате нов ред с Enviroment.NewLine понеже това е универсален клас който работи за всички операционни системи.

 

03. Напишете програма която прочита текстови файл и добавя номера на реда пред всеки ред. Резултата трябва да се запише в нов файл.

Обяснение: Зареждаме файла с StreamReader и въртим цикъл докато имаме редове. При всяко завъртане конкатенираме текущия ред с една нарастваща променлива lineCounter. Записваме резултата в новия файл с помощта на StreamWriter.

 

04. Напишете програма която сравнява два текстови файла ред по ред и принтира на конзолата броя на редовете, които са еднакви и броя на редовете, които са различни.

Обяснение: Записвам редовете и на двата файла в стринг масив. След това въртя един for цикъл до дължината на някой от масивите като за всеки ред правя проверка дали текущия ред съвпада или не. Ако имаме съвпадение – увеличаваме int променливата same++, която всъщност ще ни покаже какъв е броя на еднаквите редове. Броя на различните редове намираме като извадим стойността на same от дължината на масива.

 

05. Напишете програма която чете текстов файл който съдържа квадратна матрица от числа и намира подматрицата която има най-голяма сума. Пъврия ред от файла показва големината на матрицата.

Обяснение: Тук по особената и нова за нас част е парсването на матрицата. Това става като първо прочитаме всички редове от файла и ги записваме в стринг масив. След това вземаме размера на матрицата (matrixSize) от първия ред на файла (int.Parse(lines[0])). След това прочитаме останалите редове от файла и попълваме int[,] matrix матрицата. Тук е важно да започнем въртенето на цикъла един ред надолу, за да пропуснем първия ред. След като сме парснали успешно файла – на получената матрица прилагаме метода FindMaxSubmatrixSum(), който знаем от домашните за многомерни масиви в началото на този курс. Накрая записваме резултата в нов файл с помощта на File.WriteAllText().

 

06. Напишете програма която прочита файл, който съдържа списък с стрингове, сортира ги и ги записва в нов файл.

Обяснение: Доста кратка задачка. Първо четем всички редове и ги записваме в стринг масив с помощта на File.ReadLines(). След това прилагаме Array.sort() и накрая записваме в нов файл с File.WriteAllLines().

 

07. & 08. Напишете програма която заменя всички ‘start’ субстрингове с ‘finish’. Проверете дали програмата Ви работи коректно за големи файлове (Пр. 100mb) 

Обяснение: Отново кратка задачка. Четем и записваме съдържанието на файла в string fileContent след което прилагаме заменяне с регулярен израз @’\bstart\b’ и накрая записваме резултата в файла finish.txt. В програмата съм Ви предоставил и метод който генерира голям текстов файл автоматично. GenerateLargeFile(). Ако имате нужда може да го използвате – като предварително трябва да замените текста <!–PUT SIME TEXT HERE–> със текст по ваш избор.

 

09. Напишете програма която изтрива от даден текстови файл – всички нечетни редове.

Обяснение: тук също не е сложно. Това е почти 1 към 1 като първа задача, само, че вместо да пишем на конзолата – записваме в същия файл с StreamWriter.

 

10. Напишете програма която екстрактва всичкия смислен текст от подаден XML файл (без xml таговете).

Обяснение: Четем ред по ред от xml файла като на всеки ред завъртаме for цикъл който върви по буквите и проверява дали имаме символ ‘>’. Ако сме срещнали ‘>’ правим проверка дали не сме на края на реда и дали следващия символ не е затваряща скоба ‘<‘. Ако минем проверката – завъртаме още един цикъл, който брои дължината на думата докато не срещнем ‘<‘. След края на този цикъл – ние вече знаем началния индекс на текста който ни трябва и дължината му. С помощта на тези две променливи – извличаме субстринга с line.Substring() и го записваме в List с всички текстове.

 

11. Напишете програма която изтрива от текстови файл всички думи които започват с префикс “test”.

Обяснение: Записваме съдържането на файла в променливата fileContent. След това записваме резултата в същия файл с File.WriteAllText като предварително обработваме текста с регулярен израз който изтрива всички срещания на думи с prefix test @”\b(test\w*)\b”

 

12. Напишете програма която приема списък с ключови думи от един текстов файл и изтрива тези думи от друг текстов файл.

Обяснение: Най-важното в този метод е да си генерираме правилен регулярен израз. Това става с този ред: string regex = @”\b(” + String.Join(“|”, File.ReadAllLines(“../../words.txt”)) + @”)\b”; – Това реално ни връща следното нещо: При файл с съдържание:
words.txt:
barbarian
fury
strength
ние получаваме резултат – \b(barbarian|fury|strength)\b, което на практика ни върши перфектна работа за тази задача. След това записваме новия текст в нов файл като предварително сме го обработили с въпросния регулярен израз. Хубаво е да използваме RegexOptions.IgnoreCase,  ако искаме да засичаме и думи с различен case. Накрая си засичаме всички ексепшъни по стандартния начин.

 

13. Напишете програма която приема списък с ключови думи от файл words.txt, намира колко пъти всяка дума се среща в друг файл test.txt и накрая записва резултата в трети файл – result.txt. Резултата трябва да бъде сортиран по брой срещания – в намаляващ ред.

Обяснение: Тук е по-интересно. Ще се наложи да използваме dictionary за целта. Или с други думи – асоциативен масив. (задачата може да се реши и без dictionary, но така е най-приятно). Първо си четем думите и ги записваме в масив words[], иницираме си Dictionary. Започваме да четем файла – ред по ред, като за всеки ред завъртаме по един for цикъл който ни върти всички думи. При този for цикъл правим проверка с регулярен израз дали думата се среща и ако да – колко пъти. Ако имаме срещане на думата – проверяваме дали тази дума вече е записана в dictionary-то – ако да -> увеличаваме бройката с 1ца. Ако не -> добавяме думата в речника. След като сме намерили всички думи и техните бройки – въртим един foreach цикъл при който с помощта на Lambda израз – сортираме речника по подходящия начин и печатим в файла result.txt

 

Това са задачките от домашното – като цяло са доста лесни и приятни. В същото време са практични и полезни.
Силно ви препоръчвам да прочетете повече за регулярните изрази. Те са изключително полезни при работа с стрингове и текст.

Ако имате някакви въпроси или критика – пишете в коментарите.
Полезни връзки:
Тестър за Регулярни изрази
Полезна статия за работа с файлове в C#

Image

New World

Реших да направя background за Paladin-a но нещо се заиграх и то си стана отделна рисунка.
Ще видя по-късно да комбинирам двете рисунки да видим какво ще се получи.

new-world

ПП: Между другото – играта за Telerik е готова и скоро ще я пусна тук заедно с кода и кратко обяснение – кое как.

Image

Holy Warrior

Хубаво си е да имаш скенер 🙂
Тук съм започнал един паладин от книгата на Matt Dixon, но е още в начален етап и не е завършен.

Скица:
holy warrior

Начални цветове:

Paladin basic colors

Image

Zefacet Ad Update

Вкарах цветове и малко надписи 🙂

zefacet_choveche_colors

Скица на бактериите:

zefacet_update

Image

Zefacet Ad

Днес се разлигавихме яко и реших да пусна към клиента един малко по-нестандартен проект за реклама на лекарство 🙂
Идеята, е че лекарството е от ново поколение и е супер ефективно.
Не мисля, че може да предадем по ясно идеята за “Супер лекарство” 😀

zefacet_choveche

Image

Le Ogre

Най-накрая вкарах малко цвят в огрето 🙂
OGRE
Ето и скицата:
OGRE_Sketch_only