Ответы пользователя по тегу Программирование
  • Записная книжка программиста?

    StrangeAttractor
    @StrangeAttractor
    Нигде не записываю ибо полезность выдранного из контекста куска кода сомнительна, да и никогда заранее не знаешь что, собственно, понадобится, так что не вижу смысла плодить дополнительные сущности. Просто смотрю в своём старом коде когда надо. Но на вопрос на всякий случай подписался - вдруг кто-то подскажет что-то клёвое.
    Ответ написан
  • Кому нужен разработчик в возрасте ?

    StrangeAttractor
    @StrangeAttractor
    Программизм - редкая область, в которой в настоящее время не имеет решающего значения ничего кроме твоих реальных знаний, умений и работоспособности. Можно при подаче попасть на упоротого кадровика конечно, но их не так много.
    Ответ написан
  • На каком ЯП проще начать удаленную работу или фриланс?

    StrangeAttractor
    @StrangeAttractor
    Если нужно начать немедленно (т.е. собственно ответ на вопрос "на каком проще начать?") и иметь возможность легко и дёшево размещать проекты не заморачиваясь с VPS - то PHP. Если вопрос пропитания сею минуту остро не стоит, то лучше смотреть на будущее, будущее - это JavaScript, C#, Go, возможно Ruby/RoR и Python/Django. Если подумать то, по-моему король всех вариантов - JavaScript (полный стек - и клиент и сервер сайд), не то, чтобы он сильно мне нравился, но вот так.
    Ответ написан
  • Как на C# Получить список ip из диапазона ?

    StrangeAttractor
    @StrangeAttractor
    Попробуй так:

    private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
    {
        var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
    
        var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
    
        Array.Reverse(firstIPAddressAsBytesArray);
    
        Array.Reverse(lastIPAddressAsBytesArray);
    
        var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
    
        var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
    
        var ipAddressesInTheRange = new List<IPAddress>();
    
        for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
        {
            var bytes = BitConverter.GetBytes(i);
    
            var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
    
            ipAddressesInTheRange.Add(newIp);
        }
    
        return ipAddressesInTheRange;
    }


    Преобразовать текстовую строку в IPAddress (чтобы подать на вход вышеприведённой функции) можно так:

    var ipAddres = System.Net.IPAddress.Parse(ipString);


    (подразумевается, что переменная ipString имеет тип string и содержит IP адрес в текстовой нотации).

    Пример использования (при нажатии на кнопку button1 считаем диапазон от 192.168.0.1 до 192.168.0.10 и выкладываем в заголовок формы второй адрес из полученного диапазона):

    private void button1_Click(object sender, EventArgs e)
    {
        var first = "192.168.0.1";
    
        var last = "192.168.0.10";
    
        var range = IPAddressesRange(IPAddress.Parse(first), IPAddress.Parse(last));
    
        Text = range[1].ToString();
    }


    Консольные проги на C# никогда не писал (как-то так исторически сложилось, под консоль писал на других языках) так что вопрос ввода данных предлагаю отладить Вам самому, а что делать далее когда Вы получили первый и последний IP в строковом формате надеюсь понятно их последнего примера (если нет - дайте знать).

    UPDATE: Т.к. вопрошающему, судя по комментам, не помогло, добавляю полный код рабочей WinForms-программы:

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Windows.Forms;
    
    namespace IpRange
    {
        public partial class MainForm : Form
        {
            public MainForm()
            {
                InitializeComponent();
            }
    
            private void goButton_Click(object sender, EventArgs e)
            {
                IPAddress firstIpAddress;
    
                IPAddress lastIpAddress;
    
                if (String.IsNullOrWhiteSpace(firstIpAddressTextBox.Text))
                {
                    MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                if (String.IsNullOrWhiteSpace(lastIpAddressTextBox.Text))
                {
                    MessageBox.Show("Не задан начальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                try
                {
                    firstIpAddress = IPAddress.Parse(firstIpAddressTextBox.Text);
                }
                catch (FormatException)
                {
                    MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                try
                {
                    lastIpAddress = IPAddress.Parse(lastIpAddressTextBox.Text);
                }
                catch (FormatException)
                {
                    MessageBox.Show("Неправильно задан финальный IP-адрес диапазона", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    
                    return;
                }
    
                var range = IPAddressesRange(firstIpAddress, lastIpAddress);
    
                wholeRangeListBox.Items.Clear();
    
                wholeRangeListBox.Items.AddRange(range.ToArray());
    
                // Или так (*вместо* предыдущей строчки - ту убрать, эту разкомментировать):
                // foreach (var ipAddress in range) wholeRangeListBox.Items.Add(ipAddress);
            }
    
            private static List<IPAddress> IPAddressesRange(IPAddress firstIPAddress, IPAddress lastIPAddress)
            {
                var firstIPAddressAsBytesArray = firstIPAddress.GetAddressBytes();
    
                var lastIPAddressAsBytesArray = lastIPAddress.GetAddressBytes();
    
                Array.Reverse(firstIPAddressAsBytesArray);
    
                Array.Reverse(lastIPAddressAsBytesArray);
    
                var firstIPAddressAsInt = BitConverter.ToInt32(firstIPAddressAsBytesArray, 0);
    
                var lastIPAddressAsInt = BitConverter.ToInt32(lastIPAddressAsBytesArray, 0);
    
                var ipAddressesInTheRange = new List<IPAddress>();
    
                for (var i = firstIPAddressAsInt; i <= lastIPAddressAsInt; i++)
                {
                    var bytes = BitConverter.GetBytes(i);
    
                    var newIp = new IPAddress(new[] {bytes[3], bytes[2], bytes[1], bytes[0]});
    
                    ipAddressesInTheRange.Add(newIp);
                }
    
                return ipAddressesInTheRange;
            }
        }
    }


    Обратите внимание, что програма "окультурена", что выражается не только в проверке входных значений на пустоту и обработке неожиданного ввода исключениями, но и использованием информативных имён для элементов: главную форму я по обыкновению переименовываю из Form1 в MainForm, кнопка переименована из button1 в goButton, текстовые поля для ввода - firstIpAddressTextBox и lastIpAddressTextBox, список для вывода - wholeRangeListBox - надеюсь это не доставит дополнительных трудностей с использованием этого кода.
    Ответ написан
  • C# WinForm как очистить все TextBox-ы на форме ?

    StrangeAttractor
    @StrangeAttractor
    Надо заходить внутрь же. Вот простейший вариант модификации вашего кода:

    foreach (Control c in Controls)
    {
        if (c.GetType() == typeof (GroupBox))
            foreach (Control d in c.Controls)
                if (d.GetType() == typeof(TextBox))
                    d.Text = string.Empty;
    
        if (c.GetType() == typeof(TextBox))
            c.Text = string.Empty;
    }


    А вот как (примерно, на самом деле я бы сделал extension method) бы сделал я:

    private static void CleanAllTextBoxesIn(Control parent)
    {
        foreach (Control c in parent.Controls)
        {
            if (c.GetType() == typeof(TextBox))
                c.Text = string.Empty;
    
            if (c.GetType() == typeof (GroupBox))
                CleanAllTextBoxesIn(c);
        }
    }
    
    private void CleanAllTextBoxesButton_Click(object sender, EventArgs e)
    {
        CleanAllTextBoxesIn(this);
    }
    Ответ написан
  • Что изучать веб-программисту самоучке, кроме самого языка?

    StrangeAttractor
    @StrangeAttractor
    Не ответ, но комментарий в поддержку: по-моему миру очень нехватает книги типа «теоретическая информатика (computer science) и профессиональное программирование (консервативные и agile методологии, организация процесса совместной разработки, управление версиями, юнит-тестирование, и т.п.) для чайников самоучек». Я, вот, тоже 20 лет за компом, но всё сам. В результате так или иначе знаю целый ряд языков, паттернов, «секу тему» на практике (но только в одиночку), но не могу решить ни одну элементарную задачку на алгоритмы (в лучшем случае своё что-то выдумаю) и не представляю как можно работать над программой если она не умещается вся у тебя в голове (хотя с архитектурой и паттернами у меня всё в порядке).
    Ответ написан
  • На чем лучше и быстрее написать GUI приложение?

    StrangeAttractor
    @StrangeAttractor
    Лично мне сложно представить себе что-то удобнее и проще C# WinForms. Если задача стоит действительно «здесь и сейчас», то, imho, надо выбирать этот вариант. Если учиться на перспективу с целью научиться чему-то новому и интересному, я бы выбрал WPF. Со стратегической точки зрения наверно правильнее всего освоить какой-нибудь хороший Javascript UI toolkit и делать всё на web-интерфейсах.
    Ответ написан