Ежедневник IT-ка
133 subscribers
22 photos
4 videos
1 file
43 links
Программируем на практике!!
По вопросам по поводу проектов: @vladimir_dzen
Download Telegram
​​Немного предыстории.
Заказчик хотел получать сигналы от биржи в телеграмм используя Emoji.
На первый взгляд, всё просто, если вы знаете как...., но тут явного решения не было, поэтому пришлось напрячься, чтобы найти его.

1. Переходим на сайт с emoji (пример: unicode-table.com)

2. Копируем emoji в Юникоде.

3. Пишем код:

    private static ITelegramBotClient _botClient;

    static void Main(string[] args)
    {

// Читаем данные для нашего бота с ранее подготовленного .json
 BotData botData = GetUserCredential<BotData>();

 // Создаём экземпляр класса TelegramBotClient используя ITelegramBotClient
 _botClient = new TelegramBotClient(botData.Token);

   // Получаем чат ID.
 string chatID = botData.Chat;

  // Эмоджи в Юникоде.
 string emoji = "U+1F600";

  // Парсим в INT эмоджи, но уже "1F600"(т.е. без 1-х 2-х знаков), через HexNumber(шестнадцатеричное число)
 int _emoji = int.Parse(emoji.Substring(2), NumberStyles.HexNumber);

  // Отсылаем сообщение.
 _botClient.SendTextMessageAsync(chatID, "Как прекрасен этот мир! " + char.ConvertFromUtf32(_emoji)).Wait();
}

// Метод получение данных из .json
    private static T GetUserCredential<T>()
    {
      using (var fileStream = new FileStream("TGbot.json", FileMode.Open, FileAccess.Read))
      {
        string contents;
        using (var sr = new StreamReader(fileStream))
        {
          contents = sr.ReadToEnd();
        }
        return JsonConvert.DeserializeObject<T>(contents);
      }
    }

На этом всё. Код работает.

#Telegram, #CSharp
SENDEREMOJITELEGRAM.zip
6.7 MB
Код для примера! Без вирусов :).
Публикация приложения одна из простых и желанных вещей в программирование. Поэтому покажу как происходит это у меня:
1. Выбираем, то проект который будем публиковать.
2. Открываем в терминале.
3. Запускаем команду в терминале PowerShell:
dotnet publish -c Release --self-contained -p:PublishSingleFile=true
4. В конф. проекта добавляем эту строку:
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
Она необходима для того, чтобы программа запускалась на всех операц. системах Windows.
Подробнее можно посмотреть по ссылке.

 #CSharp, #WPF
Сегодня коснусь SQL запроса.
Очень часто необходимо взять данные с двух табл., которые имеют один(минимум) общий столбец с одинаковыми значениями(это условие Обязательно).

Цель: 
Сделать запрос, который выберет название товаров и артикулов из 2-х разных таблиц согласно названия города и категории , в которых совпадает sku(id) товаров.
1. Таблицы для анализа, для которых и создаётся SQL запрос.
2. Содержание 1 табл.: 'olx_sales_week_by_wh'
3. Содержание 2 табл.: 'products'
4. Запрос и результат:

SELECT olx_sales_week_by_wh.sku,products.articul,products.name
FROM olx_sales_week_by_wh
 LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2
WHERE olx_sales_week_by_wh.name ='Львов'
 AND products.category = 'кдх2б' GROUP BY olx_sales_week_by_wh.sku

Получили название товаров и артикулов, где sku(из 1-ой табл.) = sku2(из 2-ой табл.).

Внимание(важная часть запроса, без которой он просто бесполезен): LEFT JOIN products ON olx_sales_week_by_wh.sku = products.sku2

#Sql, #MySql
Хочу сегодня добавить несколько сниппетов по LINQ запросам:

1. Поиск текста по регулярке, множество совпадений в список:

Regex regexJson = new Regex(@"[a-zA-Z0-9]{20,}.*?}");

List<string> tmpList = regexJson.Matches(result).Cast<Match>().Select(m => m.Value).ToList();

List<string> resultsList = tmpList.Where(s => s.Contains("index") && s.Contains("id") && s.Contains("brandId") && !s.Contains("Отзывы") && !s.Contains("advert")).ToList();

2. Создать список ID(индексы строк), в которых содержатся необходимый ключ(особенность: создание анонимного типа с свойствами(Index и Value)):

tmpList.Select((v, i) => new { Index = i, Value = v })
            .Where(p => p.Value.Contains("brandId")).Select(p => p.Index.ToString()).ToList();

3. Получение суммы из списка, которые имеет тип данных string(List<string>) т.е. необходимо значения string сконвертировать в int:

var sumTempResList = tmpResList.Where(d => !string.IsNullOrEmpty(d.Trim())).Select(s => int.Parse(s.Replace("-",""))).ToList().Sum();

4. Создание Dictionary<string,string> из двух разных Списков(List<string>):

List<string> keysList = new List<string>{"2569746", "9876415", "6957459"};

List<string> valuesList = new List<string>{"val1", "val2", "val3"};

Dictionary<string,string> resDict = keysList.Zip(valuesList, (k, v) => new { k, v }).ToDictionary(x => x.k, x => x.v);

5. Создание списка из двух списков, в которых значения не совпадают(т.е. в одном списке, есть в другом нет и те значения, которых нет в другом списке добавляем в новый третий список):

List<string> artsG = new List<string>{"2569746", "9876415", "6957459", "5947945", "9874647"};

List<string> skues = new List<string>{"2569746", "9876415", "6957459"};

List<string> compR_GBD = artsG.Where(n => !skues.Any(s => s.ToLower() == n.ToLower())).ToList();

Получается новый список "compR_GBD" состоящий из этих двух значений("5947945", "9874647")

#LINQ , #CSharp
Хочу показать пример SQL запроса, который пришлось использовать.

Цель: 
Сделать запрос, который покажет ежедневные суммы расходов на рекламу за "текущий" и "прошлый" месяц, для определенной категории товара.
SELECT date, ROUND(sum(spend),2) spend
FROM `reklama` WHERE category = 'одеяла' AND (MONTH(date) = MONTH(CURRENT_DATE()) OR MONTH(date) = MONTH(CURRENT_DATE() - INTERVAL 1 MONTH))
GROUP BY date
ORDER BY date ASC

В этом запросе играет ключевую роль, функция MONTH() - предназначена для того, чтобы извлекать месяц из даты, как раз то, что нам необходимо.
И конечно, помним о том, чтобы увидеть все даты, необходимо сделать группировку GROUP BY date,без этой функции просто будет показана одна дата(одна строка).

#Sql, #MySql
Есть хорошая программа для просмотра данных в Б.Д. heidisql и хочется использовать её для работы с локальной базой к примеру: (localdb)\MSSQLLocalDB используя SQL Server.

Но, просто подключиться к ней, не так уж и просто, для этого необходимо сделать ряд действий:

1. Узнаём куда подключаемся:
2. Настраиваем heidisql:
​​3. Вопрос. Как получить правильный адрес хоста, чтобы подключиться к Б.Д.?

а). Запускаем "cmd"

б). Вбиваем: sqllocaldb s
где: sqllocaldb - база
s - старт сервера(обязательно)

в). Вбиваем: sqllocaldb i MSSQLLocalDB

выводятся ряд строк, но необходима только одна:

Имя канала экземпляра: np:\\.\pipe\LOCALDB#F8B4165B\tsql\query

Вот это и есть адрес хоста, к которому необходимо подключиться.

#Sql, #MySql