• Как на python3 сделать аналог cmd?

    @alex-t
    Прогр. в команде rco.ru
    Если вводящий человек знаком с питоном - можно просто ввести структуру, например:
    [11, 'qwerty', {'a': 15, 'b':33}]
    а в программе превратить текст в питон-данные с помощью ast.literal_eval()
    Если незнаком - лучше просто вводить отдельными input'ами каждый фрагмент.
    Ответ написан
    Комментировать
  • Как создать проинициализированное статическое поле?

    @alex-t
    Прогр. в команде rco.ru
    2 варианта на выбор:
    class Foo
    {
    	static boost::array<std::string,3> a3;
    	static std::vector<std::string> v3;
    };
    boost::array<std::string,3> Foo::a3 = {"aa", "bb", "cc"};
    std::vector<std::string> Foo::v3 = boost::assign::list_of("aa")("bb")("cc");


    Можно просто С-массив из const char * проинициализировать первым способом, но с ним чуть сложнее работать.
    А проверку наличия надо не через std::vector, а через std::set (вторым способом тоже можно заполнить).
    Ответ написан
    Комментировать
  • Есть ли разница между char* и char[число] при передаче аргументов функции?

    @alex-t
    Прогр. в команде rco.ru
    Проблема в том, что именно компилятор НЕ будет ругаться...
    Передавая (точно так же) массив ( process_array(array);) можно либо явно контролировать длину массива
    void process_array4 (char (&array)[4]) {
      for (int i = 0; i < 4; i++)
        array[i]++;
    }

    Либо написать функцию, которая скомпилируется с нужной длиной
    template <size_t N>
    void process_arrayN (char (&array)[N]) {
      for (int i = 0; i < N; i++)
        array[i]++;
    }
    Ответ написан
    Комментировать
  • Как выбрать питон, если их установлено 2 версии?

    @alex-t
    Прогр. в команде rco.ru
    С последними виндовыми питонами пришла команда-стартер py (pyw для гуевых программ). Соответственно вызываем
    для последнего 3-го
    py -3 -m pip install
    для второго
    py -2 -m pip install
    и т.д. см. py --help
    Кстати, последние питоны, вероятно в связи с появлением этой команды, перестали по умолчанию ставиться в корень диска C:.
    Ответ написан
    Комментировать
  • Таблица с разными типами данных в c++, как создать?

    @alex-t
    Прогр. в команде rco.ru
    Уже упоминавшийся boost::variant, если определен список возможных типов, в boost::variant удобно организовать общие оперции, специфицируя их для каждого типа.
    Если тип вообще не известен - boost::any (но так бывает уж совсем редко).
    Ответ написан
    Комментировать
  • Как получить дату и время из текста на python?

    @alex-t
    Прогр. в команде rco.ru
    Ого... Это в общем-то серьезный разбор текста, надо обычно не только время из текста выделить, но еще и найти к какому факту это упоминание времени относится, своими силами за несколько лет можно сделать... Наша фирма как раз ставит недешевую и достаточно нагружающую комп (код на С++) систему, которая это делает.
    Ну если на вход уже поступают только строчки времени, то задача обозрима. За несколько недель работы 90% строчек будут определяться, думаю :)
    Ответ написан
    1 комментарий
  • Что лучше выбрать, мультипоточность или мультипроцессинг?

    @alex-t
    Прогр. в команде rco.ru
    Маленький "фокус" питона, если захотите писать без фреймворка (scrapy и пр.), что один и тот же код создается и для многопоточной, и для многопроцессной задачи, отличаясь только используемым пакетом и классом (threading / multiprocrssing). Так что на этапе разработки можно пробовать оба варианта, и уже по ходу решить, что лучше.
    Ответ написан
    Комментировать
  • Как убрать знаки экранирования в Python?

    @alex-t
    Прогр. в команде rco.ru
    Вот это имелось в ввиду?
    >>> import re
    >>> ss = 'aaa\\nbbb\\tccc'
    >>> re.sub('\\\\.', ss, '\\$')
    'aaa\nbbb\tccc'
    Ответ написан
    Комментировать
  • Как вызывать MultiByteToWideChar?

    @alex-t
    Прогр. в команде rco.ru
    Преобразование, скорее всего, правильное, если хотите проверить результат без проблем, смотрите в отладчике VisualStudio, а вот если с проблемами, то осваивайте консоль Windows. Там работает только такой извращенный способ:
    #include <windows.h>
    ....
    DWORD n;
    WriteConsoleW(GetStdHandle(STD_OUTPUT_HANDLE), L"фыва", 4, &n, 0);
    Ответ написан
    Комментировать
  • Указатель на указатель?

    @alex-t
    Прогр. в команде rco.ru
    Указатель на указатель часто встречается в "старых" интерфейсах С++ и в "просто С", когда надо в функции выделить память и что-то туда положить. Что-то типа
    int foo(int **bar)
    {
    	*bar = new int;
    	**bar = 123;
    	return 0; // код ошибки
    }

    В современном С++ лучше написать функцию вида
    std::unique_ptr<int> foo();
    а возможные ошибки реализовать на исключениях, так и память не утечет, и код ошибки при каждом вызове проверять не надо. Кроме того, возврат автоуказателя не вызовет у "вызывающего" кода вопросов, должен ли он потом освободить память полученную по указателю, или нет.
    Ответ написан
    Комментировать
  • Почему так происходит?

    @alex-t
    Прогр. в команде rco.ru
    Ну вот так она (консоль в Винде) устроена... Правильный вывод 2-байтовых символов будет системным вызовом WriteConsoleW. Если захотите использовать вывод через потоки, придется написать свой. При этом, для большего развлечения, не забудьте учесть возможность перенаправления вывода программы в файл.
    Ответ написан
    Комментировать
  • Как начать работать с базой данных Access в visual studio на C++?

    @alex-t
    Прогр. в команде rco.ru
    Если с базой данных вообще, и в частности с Access, то можно смотреть интерфейс работы с ODBC. Там, с помощью драйверов, есть достаточно похожий доступ к разным БД. Хотя, ИМХО, Access не лучший выбор... Если все-таки по каким-то требованиям Access, то можно поискать, есть ли у MS соответствующий SDK, хотя с точки зрения универсальности и дальнейшего использования опыта все равно можно использовать SQL-запросы через ODBC.
    Ответ написан
    Комментировать
  • Полиморфизм в C++ и как правильно его реализовать с использованием указателя на void?

    @alex-t
    Прогр. в команде rco.ru
    1. Ну еще раз, а то это где-то в комментариях не очевидно. Оператор ++ для указателя должен сместиться на размер объекта. Поэтому 100% правильно будет работать только на конкретном унаследованном классе. А на базовых, тем более интерфейсных, если "сильно повезет".
    2. Из примера непонятно, зачем нужно использовать указатель void, вместо итератора по массиву.
    Ответ написан
    1 комментарий