• C# - Как удалить символ из строки при посимвольной обработке строки в цикле?

    Проще всего использовать регулярные выражения, если это допустимо:
    string value = "ab+0.1973-1.1";
    string result = Regex.Replace(value, @"(\.\d{2})\d+", "$1");

    Если использовать цикл, то нужно создавать новую строку, но вместо string лучше использовать StringBuilder, т.к. при добавлении данных к string строка постоянно будет пересоздаваться, что в конечном итоге может негативно отразиться на производительности:

    string inputString = "ab+0.1973-1.1";
    var result = new StringBuilder();
    bool hasDot = false;
    int digits = 0;
    
    foreach(char ch in inputString)
    {
      if (char.IsDigit(ch) && hasDot)
      {
        digits++;
      }
      else
      {
        digits = 0;
        hasDot = (ch == '.');
      }
    
      if (digits <= 2)
      {
        result.Append(ch);
      }
    }
    
    Console.WriteLine(result.ToString());

    Если хорошо подумать и если это допустимо, то задачу можно решить с одним только StringBuilder (одним экземпляром), в котором изначально будет строка для обработки, используя метод Remove для удаления ненужных данных. При такой реализации, будет использоваться цикл for.
    Ответ написан
    Комментировать
  • Нужен ли установленный .NET для запуска программы?

    Для Windows XP нужен .NET Framework 4, выше уже не подойдет.
    Со старшими версиями систем проблем возникнуть не должно.

    https://docs.microsoft.com/ru-ru/dotnet/framework/...

    Как вариант, можно сделать мультиплатформенное приложение, для новых платформ использовать новые версии .NET, а для XP писать вставки под .NET 4.0. Код может быть не очень удобно поддерживать:

    #if NET40
    // код для .NET 4.0
    #else
    // код для остальных версий
    #enif

    Если делать так, то при наличии возможности, лучше всего использовать .NET Core.
    Ответ написан
    4 комментария
  • Как отключить encode в WebClient UploadValues?

    Если параметр в Url, то можно сделать экземпляр Uri и отключить кодирование:
    var url = new Uri("http://site.com/index.php?199|&param=1", true);
    // ...
    var response = wb.UploadValues(url, "POST", data);

    Без кодирования параметров с помощью HttpClient
    using (var client = new HttpClient())
    {
      var url = new Uri("http://site.com/index.php?199|&param=1", true);
      var data = new StringBuilder();
      data.AppendLine("abc=199|");
    
      using (var content = new StringContent(data.ToString(), Encoding.UTF8, "application/x-www-form-urlencoded"))
      {
        using (var request = new HttpRequestMessage(HttpMethod.Post, url))
        {
          request.Content = content;
    
          using (var response = client.SendAsync(request).Result)
          {
            response.EnsureSuccessStatusCode();
    
            // var result = await response.Content.ReadAsStringAsync();
            var result = response.Content.ReadAsStringAsync().Result;
          }
        }
      }
    }

    Ответ написан
    3 комментария
  • Почему не получается вычесть время?

    Еще DateTime.Subtract можно использовать:

    WorkTimeLabel.Content = $"Рабочее время: {DateTime.Now.Subtract(timeStart).ToString(@"hh\:mm")}";

    Разделители и прочие «непонятные» символы лучше экранировать (слешем, как показано в примере).

    Если timeStart будет раньше на 24 часа, то в формате hh:mm эта информация не отразится. Можно использовать такой вариант:

    WorkTimeLabel.Content = "Рабочее время: " + 
      (DateTime.Now - timeStart).ToString(@"d\д\ hh\:mm").TrimStart('0', 'д').Trim();

    См. также: Stopwatch
    Ответ написан
    Комментировать
  • Для чего нужны спецификаторы доступа в C#/Java и др. подобных языках?

    Модификаторы помогают организовать работу с кодом. Избавить от потенциальных проблем неправильного использования кода, особенно малоопытными программистами. Иногда работаю с PHP, модификаторов типа internal очень сильно не хватает, приходится извращаться, чтобы другим работать с кодом было удобно; чтобы не было возможность залезть туда, куда не нужно и нарушить логику работы; чтобы на поверхности все выглядело проще, чем есть на самом деле.

    Чем сложнее проект, чем больше людей работают с кодом, тем сильнее потребность в порядке, изоляции отдельных участков проекта.

    В тоже время, если неправильно использовать модификаторы и излишне ограничить доступ, то это может стать проблемой. Нужно хорошенько продумывать архитектуру, чтобы минимизировать возникновение подобных ситуаций.
    Ответ написан
    Комментировать
  • Ошибка в при получении маркера доступа к странице Graph API Explorer?

    Чтобы иметь право запрашивать manage_pages нужно пройти проверку. Для этого нужно будет доказать Facebook, что это разрешение действительно нужно и показать, каким образом оно используется (сделать screencast). Практика показывает, что англоязычные запросы на проверку обрабатываются быстрее.

    См. раздел Проверка приложения.

    5b3b8d472cb04328696971.png
    Ответ написан
    Комментировать
  • Как повторить последнее действие в приложении?

    Действие выполнять в отдельном методе, а потом просто вызвать этот метод повторно. Примерно так:
    static Action lastAction = null;
    
    static void AnyAction()
    {
      Console.WriteLine("Выполняю какое-то действие. Не отключайтесь...");
      Thread.Sleep(3000);
    }
    
    static void Repeat()
    {
      Console.WriteLine("Хотите повторить? [Д/н]");
    
      if (char.ToUpper(Console.ReadKey().KeyChar) == 'Д')
      {
        Console.WriteLine();
        lastAction();
        Repeat();
      }
    }
    
    static void Main(string[] args)
    {
      lastAction = AnyAction;
      lastAction();
      Repeat();
    }

    Или использовать очереди и добавлять действие в очередь при необходимости выполнить повтор:

    static Queue<Action> actions = new Queue<Action>();
    
    static void AnyAction()
    {
      Console.WriteLine("Выполняю какое-то действие. Не отключайтесь...");
      Thread.Sleep(3000);
    }
    
    static void Main(string[] args)
    {
      actions.Enqueue(AnyAction);
    
      while (actions.Count > 0)
      {
        actions.Dequeue()();
    
        Console.WriteLine("Хотите повторить? [Д/н]");
    
        if (char.ToUpper(Console.ReadKey().KeyChar) == 'Д')
        {
          Console.WriteLine();
          actions.Enqueue(AnyAction);
        }
      }
    }
    Ответ написан
    1 комментарий
  • Как сделать solution explorer в С#?

    Какие нужны классы - зависит от задачи. Чтобы вывести список каталогов и файлов, дополнительные классы не нужны. Код может быть примерно таким:

    treeView1.Items.Clear();
    GetFiles("C:/Windows/Microsoft.NET", null);

    private void GetFiles(string path, TreeViewItem parent)
    {
      var node = new TreeViewItem() { Header = System.IO.Path.GetFileName(path) };
          
      if (parent == null)
      {
        treeView1.Items.Add(node);
      }
      else
      {
        parent.Items.Add(node);
      }
    
      var attr = System.IO.File.GetAttributes(path);
    
      if (attr.HasFlag(System.IO.FileAttributes.Directory))
      {
        var directories = System.IO.Directory.GetDirectories(path);
    
        foreach (var dir in directories)
        {
          GetFiles(dir, node);
        }
    
        var files = System.IO.Directory.GetFiles(path);
    
        foreach (var file in files)
        {
          node.Items.Add(System.IO.Path.GetFileName(file));
        }
      }
    }
    Ответ написан
    2 комментария
  • Почему с view на контроллер не идет модель?

    Скорее всего имена HTML-элементов получаются неправильные (одинаковые). Попробуйте через обычный for, тогда на выходе должны будут получаться имена с указанием индекса (типа: [0].Html, [1].Html и т.п.):
    @for (int i = 0, count = Model.Count; i < count; ++i)
    {
      @Html.TextAreaFor(m => m[i].Html, new { @class = "Width500", @style = "height:130px;" })
    }
    Ответ написан
    1 комментарий
  • Почему не срабатывает insert into через php?

    $db_table = "articles"; // Имя Таблицы БД

    Нет, не имя таблицы, а имя базы данных ($dbname).

    if (!$mysqli->query($query)) {
        printf("Errormessage: %s\n", $mysqli->error);
    }

    См. также: SQL Injection
    Ответ написан
    2 комментария
  • C# Xml Как занести в массив соответствующие элементы дерева?

    Взять head и перебирать дочерние узлы, которые можно найти в свойстве ChildNodes:
    var xml = @"<head>
    <block1>
     <block_header></block_header>
     <block_picture></block_picture>
     <block_text></block_text>
    </block1>
    <block2></block2>
    <block3>
     <block_header></block_header>
     <block_picture></block_picture>
     <block_text></block_text>
    </block3>
    </head>";
    
    var doc = new XmlDocument();
    doc.LoadXml(xml);
    
    var head = doc.SelectSingleNode("/head");
    
    var list = new List<string>();
    
    foreach (XmlNode node in head.ChildNodes)
    {
      list.Add(node.Name);
      // node.InnerXml - содержимое узла
      Console.WriteLine("{0}={1}", node.Name, node.InnerXml);
    }
    
    // в коллекции list будет список имен дочерних узлов корневого узла

    Всех детей, при необходимости, можно перебрать рекурсией, или с помощью стека:

    var doc = new XmlDocument();
    // определение переменной xml см. в предыдущем коде
    doc.LoadXml(xml);
    
    // создаем стек
    var stack = new Stack<XmlNode>();
    
    // добавляем в стек корневой элемент
    stack.Push(doc.SelectSingleNode("/head"));
    
    // var list = new List<string>();
    
    // перебираем все элементы стека
    while(stack.Count > 0)
    {
      // берем верхний элемент и удаляем его и стека
      var node = stack.Pop();
    
      // выводим
      // если требуется, можно добавить в коллекцию
      // list.Add(node.Name);
      Console.WriteLine("Node: {0}, childs: {1}", node.Name, node.ChildNodes.Count);
    
      Console.WriteLine(node.InnerXml);
    
      // если есть дети, добавляем их в стек
      if (node.ChildNodes.Count > 0)
      {
        // берем с конца, чтобы сохранить порядок
        for (int i = node.ChildNodes.Count - 1; i >= 0; --i)
        {
          stack.Push(node.ChildNodes[i]);
        }
      }
    }
    Ответ написан
  • C# XML Как проверить существование узла?

    using System.Xml;
    var xml = @"<head>
     <block1></block1>
     <block2></block2>
     <block3></block3>
    </head>";
    
    var doc = new XmlDocument();  
    doc.LoadXml(xml);
    
    var node = doc.SelectSingleNode("/head/block3");
    
    if (node != null)
    {
      Console.WriteLine("Узел существует!");
    }
    else
    {
      Console.WriteLine("Узел не найден...");
    }
    Ответ написан
    1 комментарий
  • Как создать платежный агрегатор?

    1. Составить бизнес-план, чтобы было понятно, сколько это будет примерно стоить и как быстро окупится.
    2. Изучить правила интеграции с платежными системами, технические возможности и требования.
    3. Если планируется работа с банковскими картами напрямую, то пройти сертификацию. Процесс сложный, длительный и дорогостоящий.
    4. По стоимости, очень грубо, если на интеграцию с одним сервисом уйдет порядка 30 часов (разработка, тестирование). Если сервисов будет, скажем, с 20, то 20 * 30 = 600 часов. Дальше зависит от ставки, возьмем маленькую - 500 рублей в час, на выходе получим 300 000 рублей. Но эту сумму можно смело умножать на два или даже на три. Чтобы на выходе с большой долей вероятности получить что-то работающие, придется обращаться к компании, специализирующейся на подобных разработках, ставка будет выше, скорее всего от 1 500 рублей в час, или еще выше. В общем, пару миллионов выйдет, но скорее всего больше :-)
    5. Искать инвесторов и убеждать их в целесообразности реализации этого проекта :-)
    Ответ написан
    1 комментарий
  • Как задать значение по умолчанию текстовому полю в React final form?

    initialValues
    (
      <Form
        onSubmit={onSubmit}
        subscription={{ dirty: true }}
        initialValues={{ foo: 'bar' }}
      >
        {({ handleSubmit }) => (
          <form onSubmit={handleSubmit}>
            <Field name="foo" component="input" />
            <button type="submit">Submit</button>
          </form>
        )}
      </Form>
    )
    Ответ написан
  • Каким сниппетом можно отправить следующий POST запрос на C#?

    using System.Net.Http;
    using System.Text;

    using (var client = new HttpClient())
    {
      var url = "https://dns.api.gandi.net/api/v5/zones/93cc9312-a214-408b-a75b-9d4172984746/records";
    
      // можно просто строку (string) сделать, как будет удобно
      var data = new StringBuilder();
      data.AppendLine("www IN A 192.168.0.1");
      data.AppendLine("    IN A 192.168.0.2");
      data.AppendLine("    IN A 192.168.0.2");
      data.AppendLine("@   IN MX 10 spool.mail.gandi.net.");
    
      using (var content = new StringContent(data.ToString(), Encoding.UTF8, "text/plain"))
      {
        // HttpMethod.Post, если нужен POST
        using (var request = new HttpRequestMessage(HttpMethod.Put, url))
        {
          // request.Headers.Authorization = new AuthenticationHeaderValue("", "");
          request.Headers.Add("X-Api-Key", "$APIKEY");
    
          request.Content = content;
    
          // using (var response = await client.SendAsync(request)
          using (var response = client.SendAsync(request).Result)
          {
            // выбросить исключение, если сервер вернул ошибку
            response.EnsureSuccessStatusCode();
    
            // var result = await response.Content.ReadAsStringAsync();
            var result = response.Content.ReadAsStringAsync().Result;
            // в result будет ответ сервера
          }
        }
      }
    }
    Ответ написан
    2 комментария
  • Где можна подучить дизайн в Windows Form?

    FlowLayoutPanel и TableLayoutPanel - вот и весь дизайн :-)

    5b3601df55816684367353.png
    Ответ написан
    Комментировать
  • Как в WPF скрыть кнопки при нажатии?

    Поместить кнопки в контейнер и менять статус видимости у контейнера:
    <Button Content="Ok" HorizontalAlignment="Left" VerticalAlignment="Top" 
      Width="75" Margin="0,75,0,0" 
      Click="Button_Click"
    />
    
    <WrapPanel Name="Buttons" Orientation="Horizontal">
      <Button Name="Button1" Content="Button" HorizontalAlignment="Left" 
        VerticalAlignment="Top" Width="75"
      />
      <Button Name="Button2" Content="Button" HorizontalAlignment="Left" 
        VerticalAlignment="Top" Width="75" 
      />
      <Button Name="Button3" Content="Button" HorizontalAlignment="Left" 
        VerticalAlignment="Top" Width="75" 
      />
      <Button Name="Button4" Content="Button" HorizontalAlignment="Left" 
        VerticalAlignment="Top" Width="75"
      />
    </WrapPanel>

    private void Button_Click(object sender, RoutedEventArgs e)
    {
      Buttons.Visibility = Visibility.Hidden; // Visibility.Visible
    
      /*
      if (Buttons.Visibility == Visibility.Hidden)
      {
        Buttons.Visibility = Visibility.Visible;
      }
      else
      {
        Buttons.Visibility = Visibility.Hidden;
      }
      */
    }
    Ответ написан
    2 комментария
  • Php как проверить строку?

    if (count(explode('.', $value)) == 3) {
      echo "ok";
    }

    Проверка строки в формате NN.NN.NNNN:

    if (preg_match('/\d{2}\.\d{2}\.\d{2,4}/', $value) === 1) {
      echo "ok";
    }

    Проверка на наличие трех точек с любым содержимым:

    if (preg_match('/.+\..+\..+/', $value) === 1) {
      echo "ok";
    }
    Ответ написан
    Комментировать