C# – Блог Stafox'a https://stafox.cc О программировании и веб-разработке Sun, 01 Oct 2017 19:40:26 +0000 en-US hourly 1 https://wordpress.org/?v=5.8.2 Как массово проверить тИЦ сайтов https://stafox.cc/kak-massovo-proverit-tic-sajtov/ https://stafox.cc/kak-massovo-proverit-tic-sajtov/#comments Wed, 25 Jan 2012 17:00:59 +0000 http://stafox.ru/?p=1451 Совсем недавно, а точнее вчера, предо мной появилась задача – как массово проверить тИЦ и PR у сайтов? Первым делом я бросился её реализовывать при помощи PHP. Однако там я столкнулся с рядом минусов, о которых расскажу в другой статье. Поэтому сегодня решил реализовать эту задачу при помощи Visual Studio и языка программирования C#.К сожалению

Сообщение Как массово проверить тИЦ сайтов появились сначала на Блог Stafox'a.

]]>

Совсем недавно, а точнее вчера, предо мной появилась задача – как массово проверить тИЦ и PR у сайтов? Первым делом я бросился её реализовывать при помощи PHP. Однако там я столкнулся с рядом минусов, о которых расскажу в другой статье. Поэтому сегодня решил реализовать эту задачу при помощи Visual Studio и языка программирования C#.К сожалению как получить PR, я пока не придумал. Правильнее сказать придумал, но способы не очень рациональные и очень долговременные. Поэтому обойдёмся пока массовым получением тИЦ. Алгоритм очень прост: получаем информацию которая предоставляется по адресу http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://stafox.ru. Далее парсим полученный результат и извелкаем из него значение тИЦ.

[csharp] string xml = getHttpPage("http://bar-navig.yandex.ru/u?ver=2&show=32&url=" + url);
xml = xml.Remove(0, xml.IndexOf("value=\""));
xml = xml.Remove(xml.IndexOf("\"/>"));
xml = xml.Substring(7);
[/csharp]

В переменной url содержится адрес сайта, а после выполнения вышеописанного участка кода в переменной xml содержится тИЦ сайта. После я ещё дописал немного кода, и получилась мини-программа, которая позволяет проверить тиц сайтов находящихся в базе, и вывести результат в отдельный файл в виде:

[Адрес сайта][разделитель][тИЦ]

База – это обычный текстовый файл, где в каждой новой строке находится адрес сайта.
Ссылка на сайт может содержать выглядеть и вот так:

http://1kkt.ru/services/ResheniyaPoAvtomatizacii/

Файл с результатом создаётся в директории, из которой была запущена программа. Единственное, что меня не устроило – это время выполнения, хотелось бы как-то быстрее: 10 000 сайтов программа проверяла около 8 минут. Но, впринципе, программа успешно справляется со своей задачей.

Интерфейс программы

С удовольствием делюсь с Вами exe-файлом и исходным кодом


Ну, а чтобы было что проверять, нужно поднимать, поэтому читайте как поднять тиц.

Сообщение Как массово проверить тИЦ сайтов появились сначала на Блог Stafox'a.

]]>
https://stafox.cc/kak-massovo-proverit-tic-sajtov/feed/ 25
Очистка DataGridView или удаление всех записей https://stafox.cc/ochistka-datagridview-ili-udalenie-vsex-zapisej/ https://stafox.cc/ochistka-datagridview-ili-udalenie-vsex-zapisej/#comments Sun, 26 Jun 2011 19:25:27 +0000 http://stafox.ru/?p=944 Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView. И на одном из этапов разработки мне понадобилось очистить весь DataGridView. Вроде бы элементарная задача, однако решить её первым возникшим у меня в голове способом мне не удалось. Начнем с того, что метод Clear() не работает. dataGridView2.Rows.Clear(); Тогда на помощь

Сообщение Очистка DataGridView или удаление всех записей появились сначала на Блог Stafox'a.

]]>

Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView. И на одном из этапов разработки мне понадобилось очистить весь DataGridView. Вроде бы элементарная задача, однако решить её первым возникшим у меня в голове способом мне не удалось.

Начнем с того, что метод Clear() не работает.


dataGridView2.Rows.Clear();

Тогда на помощь приходит цикл:


int rowsCount = dataGridView2.Rows.Count;
for (int i = 0; i < rowsCount; i++) {
    dataGridView2.Rows.Remove(dataGridView2.Rows[0]);
}

Либо


while (dataGridView2.Rows.Count !== 0) {
    dataGridView2.Rows.Remove(dataGridView2.Rows[dataGridView2.Rows.Count - 1]);
}

Производим удаление последней записи до тех пор, пока количество записей не будет равно нулю.

Как подсказали в комментариях, происходило это потому, что вероятно был биндинг с DataSource.
В таком случае стоит попробовать следующий вариант:


dataGridView2.DataSource = new object();

Но сейчас я бы предпочел получить BindingSource и очистить его.


dataGridView2.DataSource.Clear();

Вот так нужно очищать DataGridView, если метод Clear() не срабатывает. Вот такой своеобразный клининг получился.

Сообщение Очистка DataGridView или удаление всех записей появились сначала на Блог Stafox'a.

]]>
https://stafox.cc/ochistka-datagridview-ili-udalenie-vsex-zapisej/feed/ 10
Программа для распознавания букв на C# https://stafox.cc/programma-dlya-raspoznavaniya-bukv-na-c-sharp/ https://stafox.cc/programma-dlya-raspoznavaniya-bukv-na-c-sharp/#comments Sun, 24 Apr 2011 10:15:54 +0000 http://stafox.ru/?p=906 В этом учебном семестре у меня появился довольно интересный предмет “Методы распознавания образов”. Существуют такие предметы или явления, для которых характерно такое свойство, что ознакомившись с конечным представителем этих предметов или явлений люди оказываются способными узнавать сколь угодно большое число других представителей этих предметов или явлений. Предметы и явления – образы, а их отдельные представители

Сообщение Программа для распознавания букв на C# появились сначала на Блог Stafox'a.

]]>

В этом учебном семестре у меня появился довольно интересный предмет “Методы распознавания образов”.

Существуют такие предметы или явления, для которых характерно такое свойство, что ознакомившись с конечным представителем этих предметов или явлений люди оказываются способными узнавать сколь угодно большое число других представителей этих предметов или явлений. Предметы и явления – образы, а их отдельные представители – объекты. Воспринимая окружаюший мир, мы всегда проводим классификацию явлений, т.е. разбиваем все явления на группы похожих. Для принятия решения необходимо выполнить распознавание, т.е. отнести незнакомый объект (ситуацию) к классу (образу, группе) ранее известных и классифицированных.

Моим первым практическое задание, заключалось в написании программы, которая могла бы распознать буквы Y, R, N. Для этого нужно немножко окунуться в теорию. Распознавание выполняется попиксельно. Каждый пискель имеет 8 соседей.

Тип пикселя определяется из количества и вида его соедей, т.е. с точки зрения связности. Для определения типа пикселя введены понятия связности и характеристичесие числа

  • количество единичных элементов по 4-х свзяности A4(аij) = ∑ а2k-1, k=1..4
  • количество единичных элементов по 8-ми свзяности A8(аij) = ∑ аk, k=1..8
  • количество единичных двоек  B8(аij) = ∑ аkk+1, k=1..8
  • количество единичных двоек в окреснтности пикселя Cn(аij) = A8(аij) -B8(аij)

Изолированный пиксель имеет А8=0, конечный писксель A8=1,

Cn=0 – изолированный пиксель, Сn=1 – конечный пиксель, Сn=2 – связующий пиксель, Сn≥3 – пиксель ветвления.

Помимо этого, мне нужно было осуществить возможность подгружать изображения, и выводить схему буквы. На данный момент программа распознаёт три буквы (Y, R, N), нарисованные однопиксельной кистью.

Приведу несколько строк из кода:
Метод, который определяет закрашенность пикселя (чёрный или белый)
[cpp] public int pixel_value(int X, int Y)
{
Color clr; byte val;
clr = (pictureBox1.Image as Bitmap).GetPixel(X, Y);
if ((clr.R.Equals(0)) && (clr.G.Equals(0)) && (clr.B.Equals(0))) val = 1;
else val = 0;
return val;
}

[/cpp] Подсветка количества соседей у пикселя в ReachTextBox
[cpp] static void Highlight(RichTextBox box, string phrase, Color color)
{
int pos = box.SelectionStart;
string s = box.Text;
for (int ix = 0; ; )
{
int jx = s.IndexOf(phrase, ix, StringComparison.CurrentCultureIgnoreCase);
if (jx < 0) break;
box.SelectionStart = jx;
box.SelectionLength = phrase.Length;
box.SelectionColor = color;
ix = jx + 1;
}
box.SelectionStart = pos;
box.SelectionLength = 0;
}
[/cpp]

 
Обработка события нажатия кнопки Распознать
[cpp] private void button1_Click(object sender, EventArgs e)
{
int pX, pY, A4 = 0, A8 = 0, B8 = 0, C8 = 0, NC4 = 0, CN = 0, pxKon = 0, pxNor = 0, pxVet = 0;
Color clr;
for (pY = 0; pY < pictureBox1.Height; pY++)
{
for (pX = 0; pX < pictureBox1.Width; pX++)
{
pictureBox1.Refresh();
clr = (pictureBox1.Image as Bitmap).GetPixel(pX, pY);
if ((clr.R.Equals(0)) && (clr.G.Equals(0)) && (clr.B.Equals(0)))
{
A4 = 0; A8 = 0;
A4 = pixel_value(pX – 1, pY) + pixel_value(pX + 1, pY) + pixel_value(pX, pY – 1) + pixel_value(pX, pY + 1);
A8 = A4 + pixel_value(pX + 1, pY – 1) + pixel_value(pX – 1, pY – 1) + pixel_value(pX – 1, pY + 1) + pixel_value(pX + 1, pY + 1);
B8 = pixel_value(pX + 1, pY) * pixel_value(pX + 1, pY – 1) + pixel_value(pX + 1, pY – 1) * pixel_value(pX, pY – 1) + pixel_value(pX, pY – 1) * pixel_value(pX – 1, pY – 1) + pixel_value(pX – 1, pY – 1) * pixel_value(pX – 1, pY) + pixel_value(pX – 1, pY) * pixel_value(pX – 1, pY – 1) + pixel_value(pX – 1, pY + 1) * pixel_value(pX, pY + 1) + pixel_value(pX, pY + 1) * pixel_value(pX + 1, pY + 1) + pixel_value(pX + 1, pY + 1) * pixel_value(pX + 1, pY);
C8 = pixel_value(pX + 1, pY) * pixel_value(pX + 1, pY – 1) * pixel_value(pX, pY – 1) + pixel_value(pX, pY – 1) * pixel_value(pX – 1, pY – 1) * pixel_value(pX – 1, pY) + pixel_value(pX – 1, pY) * pixel_value(pX – 1, pY + 1) * pixel_value(pX, pY + 1) + pixel_value(pX, pY + 1) * pixel_value(pX + 1, pY + 1) * pixel_value(pX + 1, pY);
NC4 = A4 – C8;
CN = A8 – B8;
if (A8 == 1) pxKon++;
if (A8 == 2) pxNor++;
if (A8 > 2) pxVet++;
pCount++;
}
if (pixel_value(pX, pY) == 1)
richTextBox1.Text += A8;
else richTextBox1.Text += "_";
progressBar1.Value += 1;
}
richTextBox1.Text += "\n";
}
if (/*(pxVet == 1) && */(pxKon == 3)) MessageBox.Show("Y", "Ваша буква", MessageBoxButtons.OK, MessageBoxIcon.Information);
if ((pxVet > 4) && (pxKon == 2)) MessageBox.Show("R", "Ваша буква", MessageBoxButtons.OK, MessageBoxIcon.Information);
if ((pxVet > 1) && (pxVet < 5) && (pxKon == 2)) MessageBox.Show("N", "Ваша буква", MessageBoxButtons.OK, MessageBoxIcon.Information);
Highlight(richTextBox1, "_", Color.LightGray);
Highlight(richTextBox1, "1", Color.White);
Highlight(richTextBox1, "1", Color.Green);
Highlight(richTextBox1, "2", Color.Orange);
Highlight(richTextBox1, "3", Color.OrangeRed);
Highlight(richTextBox1, "4", Color.Firebrick);
richTextBox1.Visible = true;
label3.Text = "Количество чёрных пикселей: " + pCount;
pCount = 0;
progressBar1.Value = 0;
}
[/cpp]

Ну, а вот и собственно исходник программы. Ах да, при запуске программы выскакивает окно, для выбора изображения из файла (3 файла изображения также в архиве с исходником), если хотите нарисовать букву самостоятельно, жмите отмена.

Надеюсь пригодилось?

Если вдруг Вы решили затеять ремонт, то Вам определённо стоит обратить внимание на металлопластиковые окна.

Сообщение Программа для распознавания букв на C# появились сначала на Блог Stafox'a.

]]>
https://stafox.cc/programma-dlya-raspoznavaniya-bukv-na-c-sharp/feed/ 18