Бесплатные снипеты на заказ

Alex.A

Client
Регистрация
14.11.2020
Сообщения
406
Благодарностей
187
Баллы
43
Добрый день!
Переменная var0 может иметь одно из 12-ти значений, буквально: 1,2,3,4,5,6,7,8,9,11,12.
Как написать снипет, чтобы выполнялось следующее условие:
Если значение var0 = 1 или 2 или 3, то оно получает значение var1;
Если значение var0 = 4 или 5 или 6, то оно получает значение var2;
Если значение var0 = 7 или 8 или 9, то оно получает значение var3;
Если значение var0 = 10 или 11 или 12, то оно получает значение var4.

Спасибо.
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
330
Благодарностей
243
Баллы
43
C#:
int var0 = int.Parse( project.Variables["var0"].Value  );
if(var0 >=1 || var0 <= 3){
 return project.Variables["var1"].Value;
} 
 else if(var0 >=4 || var0 <= 6){
 return project.Variables["var2"].Value;
} 
 else if(var0 >=7 || var0 <= 9){
 return project.Variables["var3"].Value;
} 
 else if(var0 >=10 || var0 <= 12){
 return project.Variables["var4"].Value;
}
В кубике со сниппетом снять галку и выставить var0
 
  • Спасибо
Реакции: Alex.A

Alex.A

Client
Регистрация
14.11.2020
Сообщения
406
Благодарностей
187
Баллы
43
C#:
int var0 = int.Parse( project.Variables["var0"].Value  );
if(var0 >=1 || var0 <= 3){
return project.Variables["var1"].Value;
}
else if(var0 >=4 || var0 <= 6){
return project.Variables["var2"].Value;
}
else if(var0 >=7 || var0 <= 9){
return project.Variables["var3"].Value;
}
else if(var0 >=10 || var0 <= 12){
return project.Variables["var4"].Value;
}
В кубике со сниппетом снять галку и выставить var0
Отрабатывает, но выдает пустое значение.
Например var0 изначально равен 12, а var4 по умолчанию имеет значение F11.
После выполнения шаблона var0 не имеет вообще никаких значений, а по идее должен получить значение F11.
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
330
Благодарностей
243
Баллы
43
|| заменить на &&
 
  • Спасибо
Реакции: Alex.A

Alex.A

Client
Регистрация
14.11.2020
Сообщения
406
Благодарностей
187
Баллы
43
Заработало!
 

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["Table From"];
 
    // если ячейка в колонке _MAIN_CATEGORY_ содержит в любом месте текст "из" - удалить строку полностью строку
    int k = sourceTable.GetRow(0).ToList().IndexOf("_MAIN_CATEGORY_");
    if(k > -1){
        for(int i = 1; i < sourceTable.RowCount; i++){
            if(sourceTable.GetCell(k, i).Trim().Contains("из")) {
                sourceTable.DeleteRow(i);
            }
        }
    }
}
Подскажите пожалуйста, что делаю не правильно, почему данный код удаляет строки через одну? а нужно подряд, удалить все строки которые удовлетворяют выражению if(sourceTable.GetCell(k, i).Trim().Contains("из"))
94165
94166
При повторном выполнении кода, удаляет ещё через одну строку и т.д.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
Подскажите пожалуйста, что делаю не правильно, почему данный код удаляет строки через одну? а нужно подряд, удалить все строки которые удовлетворяют выражению if(sourceTable.GetCell(k, i).Trim().Contains("из"))
[
при удалении надо с конца делать цикл или корректировать указатель после удаления строки. ведь размер коллекции меняется при удалении элемента :bk:
 

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
при удалении надо с конца делать цикл или корректировать указатель после удаления строки. ведь размер коллекции меняется при удалении элемента :bk:
Подскажите как это в коде отразить, пока не хватает знаний применить ваши слова на практике.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 719
Баллы
113
Подскажите как это в коде отразить, пока не хватает знаний применить ваши слова на практике.
так попробуй
C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["Table From"];
 
    // если ячейка в колонке _MAIN_CATEGORY_ содержит в любом месте текст "из" - удалить строку полностью строку
    int k = sourceTable.GetRow(0).ToList().IndexOf("_MAIN_CATEGORY_");
    if(k > -1){
        for(int i = sourceTable.RowCount-1; i >= 0; i--){
            if(sourceTable.GetCell(k, i).Trim().Contains("из")) {
                sourceTable.DeleteRow(i);
            }
        }
    }
}
 
  • Спасибо
Реакции: TeslaCo

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["Table From"];

    // если ячейка в колонке _MAIN_CATEGORY_ содержит в любом месте текст "из" - удалить строку полностью строку
    int k = sourceTable.GetRow(0).ToList().IndexOf("_MAIN_CATEGORY_");
    if(k > -1){
        for(int i = sourceTable.RowCount-1; i >= 0; i--){
            if(sourceTable.GetCell(k, i).Trim().Contains("из")) {
                sourceTable.DeleteRow(i);
            }
        }
    }
}
Спасибо огромное, работает, то что нужно!
 

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
Добрый день, есть две таблицы, у обеих таблицах есть по две колонки ID, NAME в каждой.
нужно из таблицы 1 построчно брать данные и записывать в переменные, решил это так:
C#:
lock(SyncObjects.TableSyncer)
{
    var sourceTable = project.Tables["fromTable"];
   
    // берем данные из колонки ID
    int k = sourceTable.GetRow(0).ToList().IndexOf("ID");
    if(k > -1){
        project.Variables["get_fromTable_id"].Value = sourceTable.GetCell(k, 1);
    }
   
    // берем данные из колонки для сопоставления
    k = sourceTable.GetRow(0).ToList().IndexOf("NAME");
    if(k > -1){
        project.Variables["get_fromTable_name"].Value = sourceTable.GetCell(k, 1);
    }
   
    // удаляем только что взятую строку
    k = sourceTable.GetRow(0).ToList().IndexOf(CompareColumnName);
    if(k > -1){
        sourceTable.DeleteRow(1);
    }
}
далее нужно переменные (взятые из таблицы 1), проверить на вхождение в таблице 2, в колонке NAME и записать совпадения в таблицу 3, решил это так:
C#:
// берем из переменной id текста, который нужно искать
var productId = project.Variables["get_fromTable_id"].Value;
// берем из переменной текст, который надо искать
var findText = project.Variables["get_fromTable_name"].Value;


// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["whereTable"];
// таблица в которую будем вставлять результат найденных сопоставленных комбинаций
var resultTable = project.Tables["resultTable"];


// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    int h = sourceTable.GetRow(0).ToList().IndexOf("ID");
    int k = sourceTable.GetRow(0).ToList().IndexOf("NAME");
    if((h > -1) & (k > -1)){
        for(int i = sourceTable.RowCount-1; i >= 1; i--){
       
            string textCell = sourceTable.GetCell(k, i).Trim().ToLower();
            string textContains = findText.Trim().ToLower();
           
            if(textCell.EndsWith(textContains)){    //EndsWith - поиск в конце
                if(!String.IsNullOrEmpty(textCell)){
                    resultTable.AddRow(new []{productId, sourceTable.GetCell(h, i), findText, sourceTable.GetCell(k, i)});
                }
            }
        }
    }
}
return "no";
Помогите пожалуйста объединить эти два кода, что бы работало одним кубиком. и не было вот так:
94353
 
Последнее редактирование:

Alex.A

Client
Регистрация
14.11.2020
Сообщения
406
Благодарностей
187
Баллы
43
Добрый день!

переменная number2 может иметь одно из буквенных значений: a, b, c, d
переменная num3 может иметь одно из цифровых значений: 1, 2, 3, 4

Как написать снипет, чтобы выполнялось следующее условие:
если number2 = a, то num3 = 1;
если number2 = b, то num3 = 2;
если number2 = c, то num3 = 3;
если number2 = d, то num3 = 4;

Спасибо.
 

djaga

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
549
Благодарностей
1 130
Баллы
93
Добрый день!

переменная number2 может иметь одно из буквенных значений: a, b, c, d
переменная num3 может иметь одно из цифровых значений: 1, 2, 3, 4

Как написать снипет, чтобы выполнялось следующее условие:
если number2 = a, то num3 = 1;
если number2 = b, то num3 = 2;
если number2 = c, то num3 = 3;
если number2 = d, то num3 = 4;

Спасибо.
Привет. Думаю можно так.)

Если в переменной, то назначить:
switch (project.Variables["number2"].Value)
{
    case "a" : return "1";
    case "b" : return "2";
    case "c" : return "3";
    case "d" : return "4";
}
Нужно снять галочку "Не возвращать значение" и указать переменную num3
94399

Upd:
Или вот такой пример, если "num3" это абстрактная переменная и имена переменных будут разные в будущем.
Важно, назначение будет происходить сразу, снимать галочку "Не возвращать значение" не нужно.
Если значение не из перечисленных, то выход по красной ветке.
Назначение переменой значением с помощью switch:
switch (project.Variables["number2"].Value)
{
    case "a" : project.Variables["num3"].Value = "1"; break;
    case "b" : project.Variables["num3"].Value = "2"; break;
    case "c" : project.Variables["num3"].Value = "3"; break;
    case "d" : project.Variables["num3"].Value = "4"; break;
    default:   throw new Exception("В переменной number2 нет подходящего варианта");
}
 
Последнее редактирование:
  • Спасибо
Реакции: Alex.A

Alex.A

Client
Регистрация
14.11.2020
Сообщения
406
Благодарностей
187
Баллы
43
Привет. Думаю можно так.)

Если в переменной, то назначить:
switch (project.Variables["number2"].Value)
{
    case "a" : return "1";
    case "b" : return "2";
    case "c" : return "3";
    case "d" : return "4";
}
Нужно снять галочку "Не возвращать значение" и указать переменную num3
Посмотреть вложение 94399

Upd:
Или вот такой пример, если "num3" это абстрактная переменная и имена переменных будут разные в будущем.
Важно, назначение будет происходить сразу, снимать галочку "Не возвращать значение" не нужно.
Если значение не из перечисленных, то выход по красной ветке.
Назначение переменой значением с помощью switch:
switch (project.Variables["number2"].Value)
{
    case "a" : project.Variables["num3"].Value = "1"; break;
    case "b" : project.Variables["num3"].Value = "2"; break;
    case "c" : project.Variables["num3"].Value = "3"; break;
    case "d" : project.Variables["num3"].Value = "4"; break;
    default:   throw new Exception("В переменной number2 нет подходящего варианта");
}
Красиво! У меня так же получилось (пробовал по другому), но у Вас красиво!!! За основу взял первый вариант)
 
  • Спасибо
Реакции: djaga

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
Добрый день, есть две таблицы, у обеих таблицах есть по две колонки ID, NAME в каждой.
нужно из таблицы 1 построчно брать данные и записывать в переменные, решил это так:
C#:
lock(SyncObjects.TableSyncer)
{
    var sourceTable = project.Tables["fromTable"];
 
    // берем данные из колонки ID
    int k = sourceTable.GetRow(0).ToList().IndexOf("ID");
    if(k > -1){
        project.Variables["get_fromTable_id"].Value = sourceTable.GetCell(k, 1);
    }
 
    // берем данные из колонки для сопоставления
    k = sourceTable.GetRow(0).ToList().IndexOf("NAME");
    if(k > -1){
        project.Variables["get_fromTable_name"].Value = sourceTable.GetCell(k, 1);
    }
 
    // удаляем только что взятую строку
    k = sourceTable.GetRow(0).ToList().IndexOf(CompareColumnName);
    if(k > -1){
        sourceTable.DeleteRow(1);
    }
}
далее нужно переменные (взятые из таблицы 1), проверить на вхождение в таблице 2, в колонке NAME и записать совпадения в таблицу 3, решил это так:
C#:
// берем из переменной id текста, который нужно искать
var productId = project.Variables["get_fromTable_id"].Value;
// берем из переменной текст, который надо искать
var findText = project.Variables["get_fromTable_name"].Value;


// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["whereTable"];
// таблица в которую будем вставлять результат найденных сопоставленных комбинаций
var resultTable = project.Tables["resultTable"];


// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    int h = sourceTable.GetRow(0).ToList().IndexOf("ID");
    int k = sourceTable.GetRow(0).ToList().IndexOf("NAME");
    if((h > -1) & (k > -1)){
        for(int i = sourceTable.RowCount-1; i >= 1; i--){
     
            string textCell = sourceTable.GetCell(k, i).Trim().ToLower();
            string textContains = findText.Trim().ToLower();
         
            if(textCell.EndsWith(textContains)){    //EndsWith - поиск в конце
                if(!String.IsNullOrEmpty(textCell)){
                    resultTable.AddRow(new []{productId, sourceTable.GetCell(h, i), findText, sourceTable.GetCell(k, i)});
                }
            }
        }
    }
}
return "no";
Помогите пожалуйста объединить эти два кода, что бы работало одним кубиком. и не было вот так:

Может кому то пригодится, проблему решил вот так:
C#:
project.Tables["resultTable"].Clear();
var fromTable = project.Tables["fromTable"];
var whereTable = project.Tables["whereTable"];
var resultTable = project.Tables["resultTable"];


lock(SyncObjects.TableSyncer)
{
    // автопривязка колонок по названию
    int h = fromTable.GetRow(0).ToList().IndexOf("ID");
    int k = fromTable.GetRow(0).ToList().IndexOf("NAME");
    //Процесс взятия колонок из таблицы fromTable (циклично)
    if((h > -1) & (k > -1)){
        for(int i = fromTable.RowCount-1; i >= 1; i--){
            var productId = fromTable.GetCell(h, i); // id, который нужно искать
            var findText = fromTable.GetCell(k, i); // имя, которое нужно искать
            fromTable.DeleteRow(i);
           
            //resultTable.AddRow(new []{productId, findText});
            int f = whereTable.GetRow(0).ToList().IndexOf("ID"); // h -> f
            int t = whereTable.GetRow(0).ToList().IndexOf("NAME"); // k -> t
            if((f > -1) & (t > -1)){
                for(int j = whereTable.RowCount-1; j >= 1; j--){
                    string textCell = whereTable.GetCell(t, j).Trim().ToLower();
                    string textContains = findText.Trim().ToLower();
                   
                    if(textCell.EndsWith(textContains)){    //EndsWith - поиск в конце
                        if(!String.IsNullOrEmpty(textCell)){
                            resultTable.AddRow(new []{productId, whereTable.GetCell(f, j), findText, whereTable.GetCell(t, j)});
                        }
                    }
                }
            }
        }
    }
}
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
Как генерить в таком формате рандомный год и месяц? 2022-07
Нужно в диапозоне стартовом и финишном. Например с 2010-01 по 2022-08
 

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
var rand =new random();
var randyear= rand.Next("1999","2022");
var randmonth=rand.Next("1","12");
var date= randyear.toString()+"-"+randmonth.toString();
 
Последнее редактирование:
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
  • Спасибо
Реакции: udder

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
var rand =new random();
var randyear= rand.Next("1999","2022");
var randmonth=rand.Next("1","12");
var date= randyear.ToString()+"-"+randmonth.ToString();


это c#
Компиляция кода Ошибка в действии "CS0246" "The type or namespace name 'random' could not be found (are you missing a using directive or an assembly reference?)". [Строка: 1; Cтолбец: 15]
 

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
var rand =new Random();
var randyear= rand.Next("1999","2022");
var randmonth=rand.Next("1","12");
var date= randyear.ToString()+"-"+randmonth.ToString();


это c#
с телефона просто, поправил


var rand =new Random();
var randyear= rand.Next(1999,2022);
var randmonth=rand.Next(1,12);
var date= randyear.ToString()+"-"+randmonth.ToString();


проверил, работает
 

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
с телефона просто, поправил


var rand =new Random();
var randyear= rand.Next(1999,2022);
var randmonth=rand.Next(1,12);
var date= randyear.ToString()+"-"+randmonth.ToString();


проверил, работает
А как чтобы в переменную вернуло результат, а не ответ удачного выполнения ОК
 

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 260
Благодарностей
679
Баллы
113
  • Спасибо
Реакции: udder

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
Как правильно поправить этот код, что бы заработал? Сейчас выдает ошибки:
10:33:25 Компиляция кода Ошибка в действии "CS1503" "Argument 1: cannot convert from 'int' to 'string'". [Строка: 9; Cтолбец: 23]
10:33:25 Компиляция кода Ошибка в действии "CS1503" "Argument 3: cannot convert from 'double' to 'string'". [Строка: 9; Cтолбец: 29]

C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["startTable"];
   
    /*Округлить цены до целых чисел*/
    int k = sourceTable.GetRow(0).ToList().IndexOf("Price");
    if(k > -1){
        for(int i = 1; i < sourceTable.RowCount; i++){
           sourceTable.SetCell(k, i, Math.Round(double.Parse(sourceTable.GetCell(k, i).Trim().Replace(".", ",")), 0));
        }
    }
}
 

tanichev

Client
Регистрация
14.08.2020
Сообщения
654
Благодарностей
761
Баллы
93
C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["startTable"];
 
    /*Округлить цены до целых чисел*/
    int k = sourceTable.GetRow(0).ToList().IndexOf("Price");
    if(k > -1){
        for(int i = 1; i < sourceTable.RowCount; i++){
           sourceTable.SetCell(k, i, Convert.ToString(Math.Round(double.Parse(sourceTable.GetCell(k, i).Trim().Replace(".", ",")), 0)));
        }
    }
}
 
  • Спасибо
Реакции: TeslaCo

TeslaCo

Client
Регистрация
25.10.2016
Сообщения
62
Благодарностей
2
Баллы
8
C#:
lock(SyncObjects.TableSyncer)
{
     var sourceTable = project.Tables["startTable"];

    /*Округлить цены до целых чисел*/
    int k = sourceTable.GetRow(0).ToList().IndexOf("Price");
    if(k > -1){
        for(int i = 1; i < sourceTable.RowCount; i++){
           sourceTable.SetCell(k, i, Convert.ToString(Math.Round(double.Parse(sourceTable.GetCell(k, i).Trim().Replace(".", ",")), 0)));
        }
    }
}
Спасибо, отлично работает!
 
  • Спасибо
Реакции: tanichev

udder

Client
Регистрация
28.03.2017
Сообщения
618
Благодарностей
128
Баллы
43
@tanichev

C#:
var rand =new Random();
var randyear= rand.Next(1999,2022);
var randmonth=rand.Next(1,12);
var date= randyear.ToString()+"-"+randmonth.ToString();
return date;
Скажи, пожалуйста, как генерировать месяц в формате 01, 02, 03 т.д, сейчас генерит от 1- до 12 без нуля перед цифрой одиночной
 
  • Спасибо
Реакции: tanichev

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 260
Благодарностей
679
Баллы
113
@tanichev

C#:
var rand =new Random();
var randyear= rand.Next(1999,2022);
var randmonth=rand.Next(1,12);
var date= randyear.ToString()+"-"+randmonth.ToString();
return date;
Скажи, пожалуйста, как генерировать месяц в формате 01, 02, 03 т.д, сейчас генерит от 1- до 12 без нуля перед цифрой одиночной
Можно вот так просто генерить попробовать

C#:
return new DateTime(1999, 1, 1).AddDays(new Random().Next(1,1092)).ToString("yyyy.MM.dd");
 

Кто просматривает тему: (Всего: 8, Пользователи: 0, Гости: 8)