tag:blogger.com,1999:blog-42311989993199307702024-02-20T01:30:28.764-08:00BStatev - Personal programing blog of Borislav StatevPersonal programing blog of Borislav StatevBobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-4231198999319930770.post-89630310882606646582014-04-24T11:52:00.002-07:002014-04-24T15:30:26.777-07:00Разделяне на числови стойности от текст в SQL<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Wp86Ikc1LBwi6CRnT52PYkNPY0qjdhqDDYzwnPexnS3WtjqfmhqQVHBiCzXd9nyWDSoWA-JVqvVcoKJWyNo2EMDDm4CZJB2kSEAhaMPWZWGZ1J0ssuWfpO97726QwXbPu7Rw0NseWYc/s1600/Split+numbers+in+SQL.PNG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3Wp86Ikc1LBwi6CRnT52PYkNPY0qjdhqDDYzwnPexnS3WtjqfmhqQVHBiCzXd9nyWDSoWA-JVqvVcoKJWyNo2EMDDm4CZJB2kSEAhaMPWZWGZ1J0ssuWfpO97726QwXbPu7Rw0NseWYc/s1600/Split+numbers+in+SQL.PNG" height="137" width="320" /></a></div>
<b>Силата </b>на <b>SQL</b> е в съхранението и обработването на <b>голям обем </b>от <b>структурирана информация</b>. Когато опре до <b>динамични операции</b> като разделянето на един текст на <b>няколко части </b>(неизвестно колко преварително)<b> за предпочитане</b> са програмни езици като <b>C#</b>. Все пак, ако не гледаме толкова <b>по-добрата продуктивност</b>, а за какво после ще ни трябват тези<b> разделени данни</b> има случаи в които <b>по-удобно</b> е това да <b>става директно</b> през <b>базата</b>. И <b>SQL</b> ни предлага <b>тази възможност</b> чрез <b>преобразуването и използването</b> на информацията в <b>XML формат</b>.<br />
<br />
<a name='more'></a><br />
<br />
<h3>
<b>Програмен код:</b></h3>
<div>
<b><br /></b></div>
<pre class="brush:sql" type="syntaxhighlighter"> declare @text nvarchar(max)
declare @splitter varchar(1)
declare @xml xml
set @text = '20,26,8473,98,92,752,87123,73420,8732'
set @splitter = ','
set @xml = cast(('<n>' +
replace(@text, @splitter, '</n><n>') +
'</n>') as xml)
select Y.ID.value('.','int') as ID
from @xml.nodes('/n') as Y(ID)</pre>
<br />
<h3>
<b>Обяснение:</b></h3>
<div>
<br />
Ето и какво представлява <b>самият трик</b> за <b>разделянето на числата </b>от <b>текст</b>. Имаме <b>последователност от числа</b> с <b>разделител </b>между тях в случая е <b>','</b>. <b>Записваме </b>какъв е <b>разделителя </b>в променливата <b>@splitter. Ключовата част</b> е в <b>разменянето </b>на <b>разделителя </b>с <b>затварящ </b>и <b>отварящ</b> <b>xml таг. </b>Освен това добавяме в <b>двата края на текста</b> съответно <b>отварящ в началото</b> и <b>затварящ в края</b> <b>таг</b>. Така полученият <b>нов текст</b> се преобразува до <b>валиден xml</b>, който съдържа само <b>1 тип</b> елементи <b>(n) (пример: <n>1</n><n>2</n><n>3</n>). </b>Самото <b>извличането на данни </b>от записания <b>xml </b>се осъществява чрез използване на <b>xml методите</b> <a href="http://technet.microsoft.com/en-us/library/ms188282.aspx" style="color: #0066dd; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none;">nodes()</a> и <a href="http://technet.microsoft.com/en-us/library/ms178030.aspx" style="color: #0066dd; font-family: 'Segoe UI', 'Lucida Grande', Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; text-decoration: none;">value()</a>.<br />
<br />
<b>Получените числа</b> например може да се използват за записване във <b>временна таблица</b> и <b>join </b>със <b>съществуваща</b> в <b>базата </b>таблица за да <b>отделим </b>само <b>стойностите</b>, които ни <b>трябват</b>. Или за някоя <b>друга операция </b>в базата <b>изборът е ваш</b>.<br />
<br /></div>
Bobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.com0tag:blogger.com,1999:blog-4231198999319930770.post-2578626754626274892012-08-11T13:01:00.000-07:002012-08-11T13:47:25.549-07:00Инструкции за създаване на инсталатор на WPF приложениеНапоследък ми се наложи да пиша някои неща по едно <b>WPF приложение</b>. То ще се използва от следващата <a href="http://telerikacademy.com/" target="_blank"><b>Телерик академия</b></a> и се надявам в бъдеще да споделя повече за него.<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLoNHMQ05bibSaJxqyDTxRldWyHxNZhGQA148d90g3_3WFFXby_pX80bomhLQHN79GgU-oYTlqkTXBHQVlcUYdPBcJJjpR5G4wnG7ouEZpTE1mBAjfS_HY3Cb0wph7vmuMIt6yCG3Vo4Q/s1600/Setup.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLoNHMQ05bibSaJxqyDTxRldWyHxNZhGQA148d90g3_3WFFXby_pX80bomhLQHN79GgU-oYTlqkTXBHQVlcUYdPBcJJjpR5G4wnG7ouEZpTE1mBAjfS_HY3Cb0wph7vmuMIt6yCG3Vo4Q/s320/Setup.png" width="320" /></a>В процеса на работа, а и понеже <b>проектът </b>е почти готов като начален вариант, се замислих как може да се <b>пуска директно</b> без да се build-ва във <b>Visual studio</b>. Отговорът е<b> съвсем очевиден</b> и той е, че има нужда от <b>инсталатор </b>за реализирането на тази програма като <b>exe файл</b>. Това на<b> пръв поглед,</b> като нещо което не съм правил до сега, ми се струваше <b>сложно</b>. Но след известно търсене в <b>Интернет </b>открих съвсем <b>базов начин</b> как да се прави това. Реших да го споделя с тези, които вече са си направили някое <b>WPF приложение</b> и искат да го видят на практика как ще<b> работи като програма</b>.<br />
<br />
В <b>няколко стъпки</b> ще опиша какво точно трябва да направите, за да може вашият <b>инсталатор</b> да бъде готов.<br />
<a name='more'></a><br />
<h4>
<u><b><span style="font-size: large;">Стъпка 1:</span></b></u></h4>
<div>
<u><b><span style="font-size: large;"><br /></span></b></u></div>
Като начало създайте <b>Setup project</b> във вече <b>създадения</b> ви за приложението <b>Solution</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj70HEtsyfKljSpBhEs6Mtdf5hicX8v1Cg9R4WH5Klr5BzjCOFZDlFIkV_ZU_9NHQMqOED-2hoCepXRi8dBFcB6gTxxWaDoJzlF04Av_kJE6V0IXhVgUmhDG42Y3OCR-K1jcNNzGLeAzJk/s1600/New+project.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="387" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj70HEtsyfKljSpBhEs6Mtdf5hicX8v1Cg9R4WH5Klr5BzjCOFZDlFIkV_ZU_9NHQMqOED-2hoCepXRi8dBFcB6gTxxWaDoJzlF04Av_kJE6V0IXhVgUmhDG42Y3OCR-K1jcNNzGLeAzJk/s640/New+project.png" width="640" /></a></div>
<br />
Веднага след <b>създаването </b>на проекта ще ви се отвори<b> File Explorer</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/-EagmHaUV-98/UCaF_jBw3bI/AAAAAAAAATc/RgucTWUa424/s1600/File+explorer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="160" src="http://4.bp.blogspot.com/-EagmHaUV-98/UCaF_jBw3bI/AAAAAAAAATc/RgucTWUa424/s640/File+explorer.png" width="640" /></a></div>
<br />
В <b>лявата част</b> ви се показват <b>системните папки</b>, а в <b>дясната </b>са съдържаните в тях <b>файлове</b>. Както виждате има <b>3 системни папки</b>.<br />
<br />
<h4>
<b><u><span style="font-size: large;">Стъпка 2:</span></u></b></h4>
<div>
<b><u><span style="font-size: large;"><br /></span></u></b></div>
Можете да добавите и <b>други папки</b> на базата на вашите изисквания. Когато кликнете с десния бутон на <b>File System on Target Machine </b>отдолу ще ви се покаже списък. Изберете опцията <b>Add special folder.</b><br />
<b><br /></b>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5WlbS-AcoVOG9d6FKgEBwwj37dqocxCzpEMWra3JbfglJhlU5zOYYzzQ078WdpmTu5n_s4aKIlOvKTYustks6S9OquL9vo_ky44cpm7JKoh_Dof4wMKw_p6YtEPOtNkEBjpRUZArq-M8/s1600/Add+special+folder+list.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5WlbS-AcoVOG9d6FKgEBwwj37dqocxCzpEMWra3JbfglJhlU5zOYYzzQ078WdpmTu5n_s4aKIlOvKTYustks6S9OquL9vo_ky44cpm7JKoh_Dof4wMKw_p6YtEPOtNkEBjpRUZArq-M8/s320/Add+special+folder+list.png" width="192" /></a><br />
Ще добавим <b>Program Files Folder </b>към нашия списък от <b>папки</b>.
<br />
<b><br /></b>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPLOFKIeE71bA9K0o5mNwwupkRBcQYpKh1PCPu8El0_x86n46u7LZFxRzV-ifyunJoW_dT56j9GIKS0yaq1dU9etn477G03H1inEeK9wKOBn93PX081lqWmOzJqe-avzU9xiAfwzytbZ0/s1600/Add+Program+Files+Folder.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPLOFKIeE71bA9K0o5mNwwupkRBcQYpKh1PCPu8El0_x86n46u7LZFxRzV-ifyunJoW_dT56j9GIKS0yaq1dU9etn477G03H1inEeK9wKOBn93PX081lqWmOzJqe-avzU9xiAfwzytbZ0/s200/Add+Program+Files+Folder.png" width="200" /></a>Ето какво се <b>изисква </b>да имате като <b>съдържание </b>във всяка една от тези <b>4 системни папки</b>:<br />
<br />
<b>Application Folder - </b>трябва да съдържа <b>Primary output</b> и <b>dependencies.</b><br />
<b><br /></b>
<b>Program Files Folder </b>- трябва да съдържа папки, където <b>Primary output-a </b>ще бъде копиран <b>след инсталация</b> и други необходими файлове (като иконки, конфигурационни файлове и други).<br />
<b><br /></b>
<b>User's Desktop </b>и <b>User's Programs Menu</b> - трябва да съдържа <b>Shortcut </b>към приложението.<br />
<br />
<h4>
<span style="font-size: large;"><u>Стъпка 3:</u></span></h4>
<b><br /></b>
В <b>следващата стъпка</b> ще добавим <b>Primary output</b> и <b>dependencies</b> към <b>Application folder-а</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicsn6jKqYHKl8yArIHAO9kp7S09xaTE-Bbm_vO7vzNub3siXkH5rEdQNnQAX8wEb5GPOS7LvMgFuuJwxI6WuckQpvwtuUTcOG9RFUti0AAA_jB2kJP7jXiv1u2nig26vABTFCQv8Vsqd8/s1600/Add+Primary+output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicsn6jKqYHKl8yArIHAO9kp7S09xaTE-Bbm_vO7vzNub3siXkH5rEdQNnQAX8wEb5GPOS7LvMgFuuJwxI6WuckQpvwtuUTcOG9RFUti0AAA_jB2kJP7jXiv1u2nig26vABTFCQv8Vsqd8/s640/Add+Primary+output.png" width="640" /></a></div>
<br />
Изберете проекта, за който искате да правите <b>инсталатор</b>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgagDYRH6ZMkVg-feHQg9F8DbgOSCoy5Dyixv-sJRQmuvfac-OHpz3vf4DqEHTHynueylm53Dy3W2WZgOXM9CUpCMKbx5WnBH8yiArqo_b-P_A2aKr-3A_-W5yxlLuyrS2cyT0bxZ3O0J4/s1600/Primary+output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgagDYRH6ZMkVg-feHQg9F8DbgOSCoy5Dyixv-sJRQmuvfac-OHpz3vf4DqEHTHynueylm53Dy3W2WZgOXM9CUpCMKbx5WnBH8yiArqo_b-P_A2aKr-3A_-W5yxlLuyrS2cyT0bxZ3O0J4/s320/Primary+output.png" width="276" /></a></div>
<br />
<br />
В папката ще се добавят всички dll файлове, които са ви необходими и Primary output-a за приложението.<br />
<b><br /></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmt0u5W3XeH8akHZ7r2u-6HHyAg7zMKC0EE83mbqQao-_i7y0uxk4buqIo54DcrvS2cdtNDzfHCRfbkNLTTHy5NS-fzylMMQa4IPmH37bb6wyfAZRG9lkWbTqJ763UCnpFQuD2eR0hMVI/s1600/Primary+output+and+dlls.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="136" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmt0u5W3XeH8akHZ7r2u-6HHyAg7zMKC0EE83mbqQao-_i7y0uxk4buqIo54DcrvS2cdtNDzfHCRfbkNLTTHy5NS-fzylMMQa4IPmH37bb6wyfAZRG9lkWbTqJ763UCnpFQuD2eR0hMVI/s640/Primary+output+and+dlls.png" width="640" /></a></div>
<b><br /></b>
<br />
<h4>
<b><span style="font-size: large;"><u>Стъпка 4:</u></span></b></h4>
<div>
<b><span style="font-size: large;"><u><br /></u></span></b></div>
Сега ще направим същото при <b>Application folder </b>за <b>Program Files Folder </b>като добавим <b>Primary output.</b><br />
<b><br /></b>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiSqURAhcCGZjOCLMpVoeHWCFieEtJShv8I2srd6Nb-0av_x-jObNXTRvla6DVv6WjNtQNxKKEtHnHVRnB8GrnnLhyOLGsjKl5WdEvAMi426CZ26K4T0TjIpScqCKeIoiCX_88-MEVs24/s1600/Program+Files+Folder+-+Add+Primary+output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiSqURAhcCGZjOCLMpVoeHWCFieEtJShv8I2srd6Nb-0av_x-jObNXTRvla6DVv6WjNtQNxKKEtHnHVRnB8GrnnLhyOLGsjKl5WdEvAMi426CZ26K4T0TjIpScqCKeIoiCX_88-MEVs24/s640/Program+Files+Folder+-+Add+Primary+output.png" width="640" /></a></div>
<b><br /></b>
<b><br /></b>Виждаме, че в <b>случая </b>се добавя само <b>Primary output</b>, но не и <b>dll файловете</b>. Тук можете да добавите <b>необходимите файлове,</b> за да може програмата да работи по искания начин като икони и други.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrde8bTBdZIFSkNQVjDN2RgsRYtJjJRYTwMw_g-dBQCvxsZmG6vKoSIEGlmouV4yGhOUVeuh8qUhoCoZHYZub4BWvzhW8rYUYDobBy3VIcweh4EYycmXRDCY_5wYpPx0BongONHeoezLY/s1600/Program+Files+Folder+-+Primary+output.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="130" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrde8bTBdZIFSkNQVjDN2RgsRYtJjJRYTwMw_g-dBQCvxsZmG6vKoSIEGlmouV4yGhOUVeuh8qUhoCoZHYZub4BWvzhW8rYUYDobBy3VIcweh4EYycmXRDCY_5wYpPx0BongONHeoezLY/s640/Program+Files+Folder+-+Primary+output.png" width="640" /></a></div>
<br />
<h4>
<b><span style="font-size: large;"><u>Стъпка 5:</u></span></b></h4>
<div>
<br /></div>
Следва да добавим <b>Shotcut </b>към <b>User's Desktop.</b><br />
<b><br /></b>
Това, което трябва да се направи, е да отидем до папката <b>Application Folder</b>. Оттам ще направим <b>Shorcut </b>на <b>Primary output файла</b>. Наименоваме го както искаме да ни излиза като име на програмата и го премествате в папката <b>User's Desktop. </b>В <b>изображенията</b> <b>по-долу</b> може да видите <b>по-подробно</b> как ще стане това.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc4evKUKnc-JSNqxVs28lfWI113vnCcBRl0_wuKaquPHVG6aCoEnzVhRAIPnlp1d9vYAUxbdLmOLrwkAwmGx8XK1vzDNVD-ohtDLHOBJIQH8F3_HRqtDcLYPiBobCAS-X1JukMONF5g6s/s1600/Create+shortcut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgc4evKUKnc-JSNqxVs28lfWI113vnCcBRl0_wuKaquPHVG6aCoEnzVhRAIPnlp1d9vYAUxbdLmOLrwkAwmGx8XK1vzDNVD-ohtDLHOBJIQH8F3_HRqtDcLYPiBobCAS-X1JukMONF5g6s/s640/Create+shortcut.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicnXkkEpfxhUACiqp8AfaG5A2musisWsekv01Ii1Mqm3gAy8T6yTpPrJRg_JEiRvAAqo7vLX9qjVvG0OJO37irKrptIXYkmQzBsDtqDHbiIRqMQe3pJ6_UzemrKmmlZc_7cFblYrzjb6Q/s1600/Rename+shortcut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="92" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicnXkkEpfxhUACiqp8AfaG5A2musisWsekv01Ii1Mqm3gAy8T6yTpPrJRg_JEiRvAAqo7vLX9qjVvG0OJO37irKrptIXYkmQzBsDtqDHbiIRqMQe3pJ6_UzemrKmmlZc_7cFblYrzjb6Q/s320/Rename+shortcut.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW8DQZEMakCl8Y4TDHM5PgKzBbjdG0Q9cGMsA9a9x75K7h5KQfs7c35HIp5PHdGns2fPL3rmC3HGm2ay5Pa_v8FZobOdFbmumPnqJb3p_WNX0V5ovR9q2Ipb-Dn9hlETGpUd2mjHmr8KY/s1600/Cut+shortcut.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgW8DQZEMakCl8Y4TDHM5PgKzBbjdG0Q9cGMsA9a9x75K7h5KQfs7c35HIp5PHdGns2fPL3rmC3HGm2ay5Pa_v8FZobOdFbmumPnqJb3p_WNX0V5ovR9q2Ipb-Dn9hlETGpUd2mjHmr8KY/s320/Cut+shortcut.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLEjuh_SUWjLK4n9pf0VCXsKxQ4Mh3ZDM5mXyTIy61N8K31izJEGP1MN78ctDNJvLk25hR2PipxoBhvyBwZesJMlbfObsKd0Lnhhhq6eSrlRXHOoodBBsy9rV7ihRU-KCQROR9iuQHLo/s1600/Shortcut+in+User+Desktop.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="128" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXLEjuh_SUWjLK4n9pf0VCXsKxQ4Mh3ZDM5mXyTIy61N8K31izJEGP1MN78ctDNJvLk25hR2PipxoBhvyBwZesJMlbfObsKd0Lnhhhq6eSrlRXHOoodBBsy9rV7ihRU-KCQROR9iuQHLo/s640/Shortcut+in+User+Desktop.png" width="640" /></a></div>
<br />
<h4>
<b><u><span style="font-size: large;">Спъпка 6:</span></u></b></h4>
<div>
<b><u><span style="font-size: large;"><br /></span></u></b></div>
<b>Същата процедура</b> трябва да се повтори и за <b>User's Program Menu</b> папката.<br />
<br />
<h4>
<b><u><span style="font-size: large;">Стъпка 7:</span></u></b></h4>
<div>
<br /></div>
<div>
<b>Последните настройки</b>, които ще направим, са да сложим на <b>всички системни папки</b> опцията <b>AlwaysCreate </b>на <b>true, </b>понеже<b> по подразбиране</b> тя е на <b>false</b>.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhB_Px6277G2AOMQkgi0NIDP6h7oknyc6g3kACwS0jjz7XyZ6dut8LOLax2uY2dWEY5lTSfLSZBVcD5qyZaFqSmu9FU5M573KotyWWak7jBcTDv5QKLgDi1EVXbel05gruuChTBVZkh60/s1600/Properties+Window.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhB_Px6277G2AOMQkgi0NIDP6h7oknyc6g3kACwS0jjz7XyZ6dut8LOLax2uY2dWEY5lTSfLSZBVcD5qyZaFqSmu9FU5M573KotyWWak7jBcTDv5QKLgDi1EVXbel05gruuChTBVZkh60/s320/Properties+Window.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1HkmMDlekFRCbcm5qJWe4WEdkq_gb5NNyJgn18kjOMpAOXTaDCE4FqQPsmVIJ4e-CDIJXKYd25fLIsuZrc5S-cv3452e7mdBBdFcPgr9xu7F87AvFzuUiah18JtT-wfdwEP0BHLUCmWU/s1600/Always+Create.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1HkmMDlekFRCbcm5qJWe4WEdkq_gb5NNyJgn18kjOMpAOXTaDCE4FqQPsmVIJ4e-CDIJXKYd25fLIsuZrc5S-cv3452e7mdBBdFcPgr9xu7F87AvFzuUiah18JtT-wfdwEP0BHLUCmWU/s1600/Always+Create.png" /></a></div>
<div>
<br /></div>
<h3>
<span style="font-size: large;"><u>Финална стъпка:</u></span></h3>
<div>
<br /></div>
<div>
Остава само да<b> Build-</b>нем или <b>Rebuild-</b>нем<b>. </b></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTv9ujUGf6PXLd0Ia2MFhxH9VtY0w-3bANYh827jNKfzNSvsRKEfHbx8Gv6kcr3GgOXiGZKtJ3cXN3_YIWfDAwforHQ5zLUGCj_k4slHTXbbh_gXTEjqUCoKAy1vmmh34WqJoqyOla7U/s1600/Build.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkTv9ujUGf6PXLd0Ia2MFhxH9VtY0w-3bANYh827jNKfzNSvsRKEfHbx8Gv6kcr3GgOXiGZKtJ3cXN3_YIWfDAwforHQ5zLUGCj_k4slHTXbbh_gXTEjqUCoKAy1vmmh34WqJoqyOla7U/s320/Build.png" width="320" /></a></div>
<div>
<br /></div>
<div>
Ако <b>тази операция</b> премине успешно, може да потърсите готовия <b>Setup file</b> в папката <b>Debug</b>. </div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVtEZu2p_kdJZIkmQssaiJNPMyNNVnf5Xlf4ViVGqmjS-9wrt_IJaipMTsQf7Tgt11l45IeXIJRJZXN2gECUEYjfcixxM6j0SzjJ9R0wPec8146zOc1ffSuSpMJuHT6WjbcWC5Z_bpjt8/s1600/Ready+setup.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVtEZu2p_kdJZIkmQssaiJNPMyNNVnf5Xlf4ViVGqmjS-9wrt_IJaipMTsQf7Tgt11l45IeXIJRJZXN2gECUEYjfcixxM6j0SzjJ9R0wPec8146zOc1ffSuSpMJuHT6WjbcWC5Z_bpjt8/s1600/Ready+setup.png" /></a></div>
<div>
<br />
Е това беше. <b>Надявам се</b> тази статия да ви е <b>била от полза</b>.</div>
<div>
<br /></div>Bobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.com0tag:blogger.com,1999:blog-4231198999319930770.post-50190971964010906892012-07-12T07:36:00.000-07:002012-08-11T13:18:49.675-07:00Doodle - лесна и удобна платформа за организиране на вашите срещи и събирания<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0-1zCE16zt7nRqvgo1GiSKDz6kOFDsnFFoT20mNDaPVSs0XEbXxnmtIbNXcH96aUo6VlJecDyPRmMA-avdHglIu09qjC13Eh9HA5eH6opho7HbrUTsWPFHA9qf46LdpJ_7lIkRFWrEM/s1600/adc53f20-4877-4367-ad78-3b6ede0d2411.jpeg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="176" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEil0-1zCE16zt7nRqvgo1GiSKDz6kOFDsnFFoT20mNDaPVSs0XEbXxnmtIbNXcH96aUo6VlJecDyPRmMA-avdHglIu09qjC13Eh9HA5eH6opho7HbrUTsWPFHA9qf46LdpJ_7lIkRFWrEM/s320/adc53f20-4877-4367-ad78-3b6ede0d2411.jpeg" width="320" /></a></div>
<b><a href="http://www.doodle.com/" style="font-family: Georgia, serif; font-size: 14px; line-height: 22px; text-align: left; text-decoration: none;" target="_blank">Doodle</a> </b>е <b>безплатен инструмент</b> за насрочване на <b>срещи </b>с приноса на всички членове на групата. <b>Платформата </b>по същество е <b>избирателна </b>и е под формата на <b>таблици</b>. За да използвате <b>Doodle</b> е необходимо<b> </b>да създадете <b>заглавие </b>на събитието. Избирате поредица от <b>дати </b>и <b>часове </b>за<b> възможна среща</b>, след което <b>поканвате участници </b>в събитието и те избират кои са <b>удобните </b>за тях часове. В крайна сметка на базата на <b>получените резултати </b>вие като <b>администратор </b>можете да зададете <b>решеното </b>за среща време въз основа на <b>най-често</b> <b>избраната дата и час</b>, както и да разберете точно какъв е<b> броят на приелите</b> да дойдат.Bobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.com0tag:blogger.com,1999:blog-4231198999319930770.post-35469348192972492662012-06-20T06:27:00.000-07:002012-06-27T06:42:40.671-07:00Изтриване на папките bin и obj - простичка конзолна програма на C#<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw4gZ4c05fLGrLZwz9VH3_URF54khZSrq7Y2lgCuuxCuOl7PJ0lyKrVLyqyz5x74apg0MnlzWL8Pwdj2-tG-2WeD7tyzMw6-pYUXks9Juf2D2AvnjAuaQz1TzRyMcPxZqN5G5k0jHU5_c/s1600/WinExplConsoleFolderDelete.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiw4gZ4c05fLGrLZwz9VH3_URF54khZSrq7Y2lgCuuxCuOl7PJ0lyKrVLyqyz5x74apg0MnlzWL8Pwdj2-tG-2WeD7tyzMw6-pYUXks9Juf2D2AvnjAuaQz1TzRyMcPxZqN5G5k0jHU5_c/s320/WinExplConsoleFolderDelete.jpg" alt="Изтриване на папките bin и obj" width="320" /></a></div>
Ако ви се е случвало да пишете програма на <b>C#</b>, може би знаете че папките <b>bin </b>и <b>obj </b>се генерират по време на всяко изпълнение на <b>кода </b>и не е необходимо да си ги пазим. Дори е <b>препоръчително</b>, ако кода се изпълнява и на друг компютър да се <b>изтриват</b>. Това се налага при <b>общи отборни проекти</b> или ако искаш <b>някой друг</b> да ти погледне програмата.<br />
<br />
При ръчна обработка трябва да<b> се търси</b> вътре във всяка от папките на отделните проекти за папките <b>bin </b>или <b>debug </b>и подобно действие при <b>много на брой</b> малки проекти си е <b>напрягащо</b>. Ето защо реших да <b>автоматизирам</b> процеса<b> </b>като си напиша <b>простичка програма</b>, която да върши това вместо мен само с <b>2 клика</b>.<br />
<a name='more'></a><br />
<h3>
Програмен код:</h3>
<div>
<br />
<pre class="brush:csharp" type="syntaxhighlighter"> public static void BinObjFoldersDestroyer(string directoryName)
{
DirectoryInfo directory = new DirectoryInfo(directoryName);
foreach (DirectoryInfo subdirectory in directory.GetDirectories())
{
BinObjFoldersDestroyer(subdirectory.FullName);
if (subdirectory.Name == "bin" || subdirectory.Name == "obj")
{
Console.WriteLine(subdirectory.FullName);
subdirectory.Delete(true);
}
}
}
</pre>
<br />
<h3>
Обяснение:</h3>
</div>
<div>
<br /></div>
<div>
Показаният по-горе <b>код </b>е на <b>основния метод</b>, който извършва <b>изтриването </b>на <b>bin </b>и <b>obj </b>папките. Това, което изпълнява е да обхожда <b>поддиректориите </b>на <b>зададената директория</b> и тези които са с имена <b>bin </b>и <b>obj </b>да им изкарва целия път и да биват изтрити. За да се осъществи влизане все по-навътре в поддиректории метода вика себе си рекурсивно.<br />
<br />
Обектът, който се използва за обработка на директории е <b>DirectoryInfo </b>като той е част от <b>входно-изходната</b> библиотека в <b>C#</b>, която се вика чрез използване на <b>System.IO</b>. На самата операция <b>Delete </b>трябва изрично да се зададе като параметър <b>true</b>, което оказва да се <b>изтриват </b>дори <b>непразни </b>директории.<br />
<br />
<br />
<h3>
Цялостната програма:</h3>
</div>
<div>
<span style="background-color: white;"><br /></span></div>
<div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7l870zRXcqILHSPcpgDOLqvts5o34Db_f5PKclTYsZr0UoSnh9vvAfDKtntOl-1EYOEMS9CxjzxzXSabZfTS6IH1jPa-aCI58PYsoY0KCRYiEzXv7xJywnrnnRpKbRhkXm0sfKNtSLoA/s1600/Console.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="161" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7l870zRXcqILHSPcpgDOLqvts5o34Db_f5PKclTYsZr0UoSnh9vvAfDKtntOl-1EYOEMS9CxjzxzXSabZfTS6IH1jPa-aCI58PYsoY0KCRYiEzXv7xJywnrnnRpKbRhkXm0sfKNtSLoA/s320/Console.png" width="320" /></a></div>
Решил да не слагам тук <b>цялостният програмен код</b>, защото в останалите неща няма почти <b>никаква интересна програмна логика</b>, а е само <b>допълнително оформление</b>. <b>Пълният код</b> на програмата, обаче може да намерите на <a href="http://pastebin.com/dzU2YihL">http://pastebin.com/dzU2YihL</a>. Това, което трябва да отбележа е че ако искате да използвате <b>програмата </b>трябва да вземете <b>еxe </b>файла който се получава при <b>компилиране </b>на кода. След това просто трябва да го сложите в <b>папката на проекта</b> ви и да го <b>стартирайте</b>. Натиснете <b>enter </b>и операцията ще се изпълни. А и не забравяйте да изключите програмата (в случая <b>Visual Studio</b>), която използва тези папки. В <b>противен случай</b> ще ви се изкара <b>грешка.</b><br />
<br />
Това е един простичък пример как <b>автоматизацията </b>улеснява <b>живота</b>. Естествено <b>кода</b>, който съм написал може да се използва и за <b>други цели</b> с малко корекции. Но все пак <b>внимавайте </b>какво се опитвате да <b>изтриете </b>да не останете без някоя директория, която ви е била <b>необходима</b>.</div>Bobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.com0tag:blogger.com,1999:blog-4231198999319930770.post-72415760662735227072012-06-18T00:21:00.003-07:002014-04-24T14:15:05.982-07:00Побитови операции - метод за размяна битовете на число в C#<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiK5U1OXMjVNDGi6-QJrW93-d6zonofiJVN09l_86pqaEbP2GYzyPPBytV59gDQvhBDGLVLZkVTMr6xLBXXoVIKT1REc3ZvpE1iagOtlw2boMRQ4O37247lBioB7YO1k2RQLPUzq8DwNc/s1600/wrapping_paper-binary.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="Битове" border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiK5U1OXMjVNDGi6-QJrW93-d6zonofiJVN09l_86pqaEbP2GYzyPPBytV59gDQvhBDGLVLZkVTMr6xLBXXoVIKT1REc3ZvpE1iagOtlw2boMRQ4O37247lBioB7YO1k2RQLPUzq8DwNc/s200/wrapping_paper-binary.jpg" height="200" title="Битове" width="200" /></a></div>
<div style="text-align: left;">
Предполагам голяма част от вас знаят, че информацията в <b>компютрите </b>се съхранява като последователност от <b>нули и единици</b>, т.е. така наречените <b>битове</b>. Ето защо операциите, свързани пряко с тях, са едни от <b>най-бързо осъществяваните</b> от компютърните програми. Известно е и, че работата с някои данни като например <b>IP адрес</b> са пряко свързани с разбирането на тези <b>побитови пресмятания</b>. Друг случай, в който се налага да боравим с побитови преобразования, е при <b>оптимизация </b>на сложни и обемни математически изчисления, извършвани от компютър.<br />
<br />
Задачата, която ще разгледаме, показва как може да се разменят битовете на число в <b>uint </b>формат <b>(32-битово положително число) </b>в езика <b>C# </b>като поставяме ограничение да няма припокриване на първата и втората двойка битове. Тази задача беше част от разгледания материал на курса по <b>C# Fundamentals </b>в<b> <a href="http://academy.telerik.com/" target="_blank">академията на Телерик</a></b>.
<br />
<a name='more'></a><br />
<br />
<h3><b>Програмен код:</b></h3>
<div>
<b><br /></b></div>
<pre class="brush:csharp" type="syntaxhighlighter"> public static uint BitsExchanger(uint number, byte p, byte q, byte range)
{
if ((p + range) > 31 || (q + range) > 31 ||
Math.Abs(p - q) <= range)
{
throw new ArgumentException();
}
uint maskP = new uint();
uint maskQ = new uint();
for (int i = 0; i <= range; i++)
{
maskP = maskP | (uint)(1 << (p + i));
maskQ = maskQ | (uint)(1 << (q + i));
}
uint subBitsP = number & maskP;
uint subBitsQ = number & maskQ;
number = (~maskQ & number) | (subBitsP << q - p);
number = (~maskP & number) | (subBitsQ >> q - p);
return number;
}</pre>
<h3>
<b><br /></b></h3>
<h3>
<b>Обяснение:</b></h3>
<div>
<br />
Методът <b>BitsExchanger </b>изисква като аргументи: числото, на което ще разменяме битовете (<b>number</b>), номера на началния бит на двете последователности от битове за разменяне (<b>p </b>и <b>q</b>) и броя битове след първия на тези две последователности (<b>range</b>). В началото проверяваме дали са изпълнени следните условия: номерът на бита да <b>не излиза</b> от <b>32-битовия формат</b> и евентуално да <b>няма препокриване</b> на разменяните битове. Ако се въведе такава невалидна информация, функцията извежда <b>ArgumentExceprion</b>.<br />
<br /></div>
<div>
<div class="MsoNormal" style="margin-bottom: 6.0pt;">
За самите преобразувания използваме две маски: <b>mask</b><b>P</b> с единични битове на позициите от <b>p</b> до <b>p+k</b> и
<b>mask</b><b>Q</b> с единични битове на позициите
от <b>q</b> до <b>q+range</b>. Маските
се създават чрез използване на цикъл от <b>0</b>
до <b>range</b>. В него се извършва операция <b>побитово или </b>( <b>|</b><b> </b>) на маската с преместен с оператора <b><< </b>единичен бит на необходимите позиции. Чрез тях и операцията <b>побитово и </b>( <b>& </b>) извличаме първата последователност от битове (от <b>p</b> до <b>p+range</b>) в променлива <b>subBits</b><b>P</b>, а втората последователност от битове (от <b>q</b> до <b>q+range</b>) в друга променлива <b>subBits</b><b>Q</b>. Операцията <b>& </b>всъщност занулява всички други битове, освен означените от маската като единици, които си запазват стойността.<br />
<br />
За
битове от <b style="font-family: inherit;">p</b> до <b style="font-family: inherit;">p+range</b> чрез
използване на отрицанието на маската на <b style="font-family: inherit;">maskQ</b> (т.е. зануляване на битове от <b style="font-family: inherit;">q</b> до <b style="font-family: inherit;">q+range</b>) и
използване на | (побитово или) с променливата <b>subBits</b><b>P</b>, преместената с <b style="font-family: inherit;">q-p</b> позиции
чрез оператора <b style="font-family: inherit;"><<</b>. осъществяваме заменяне на първата поредица (от <b style="font-family: inherit;">p</b> до <b style="font-family: inherit;">p+range</b>) от
битове с позициите на втората (от <b style="font-family: inherit;">q</b> до <b style="font-family: inherit;">q+range</b>). Правим подобна операция, но в обратната посока за преместването на втората
последователност от битове.</div>
</div>
</div>
Bobby Statevhttp://www.blogger.com/profile/01018697400983697824noreply@blogger.com0