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

Alexmd

Client
Joined
Dec 10, 2018
Messages
1,021
Reaction score
1,427
Points
113

zmike

Client
Joined
Oct 24, 2019
Messages
147
Reaction score
8
Points
18
Код Выполняет именно то, что Вы описали. Проверьте свои списки. Возможно, там на момент выполнения кода лежат не те данные, от которых Вы ждете заказанный результат.
View attachment 78954
C#:
//Очищу списки
foreach(string s in new[]{"A", "B"})
    project.Lists[s].Clear();
//Заполню списки тестовыми данными
var A = project.Lists["A"];
A.Add("какие-то данные_1");
A.Add("какие-то данные_2");
A.Add("какие-то данные_3");
A.Add("какие-то данные_4");
A.Add("какие-то данные_5");
var B = project.Lists["B"];
B.Add("some data_youtube");
B.Add("some data_2");
B.Add("some data_3");
B.Add("some data_4");
B.Add("some data_iframe");
//Выполню замену строк в списке B строками из списка A, если в них имеются слова из массива
for(int i = 0; i < B.Count; i++)
    foreach(string str in new[]{"youtube", "iframe"})
        if(B[i].Contains(str))
            B[i] = A[i];
//Посмотрю, что теперь в списке B
return string.Join(Environment.NewLine, B);
большое спасибо за обновленный код он работает очень хорошо
 

zmike

Client
Joined
Oct 24, 2019
Messages
147
Reaction score
8
Points
18
Можно ли перебрать список и удалить определенные слова / символ из каждой строки по мере его обработки?

Пример:
Если эта строка содержит # или%, или и то, и другое, по мере того, как скрипт запускает каждую строку, он удалит указанное слово / символы.

Возможно, что строка не содержит ни одного из этих слов / символов, и скрипт просто их пропустит.
 

Nord

Client
Joined
Mar 22, 2012
Messages
2,415
Reaction score
1,482
Points
113
Товарищи, поделитесь сниппетом по распаршиванию домена на все урлы.

Он точно когда то был тут, но сейчас не могу найти. Я еще на его основе делел парсер емейлов со всех страниц сайта. Свой парсер тоже где-то протерял давным давно =)

Суть сниппета - заходим на домен и распаршиваем все ссылки с морды, вторая итеррация - распаршиваем распаршенные ссылки и так n-е количество раз. Все это было в несколько строчек кода на запросах. Спасибо
 

Sardol

Client
Joined
Sep 23, 2020
Messages
193
Reaction score
45
Points
28
Нужен сниппет для очистки списка при наступлении новых суток. Возможно ли это сделать?
 
Last edited:

Alexmd

Client
Joined
Dec 10, 2018
Messages
1,021
Reaction score
1,427
Points
113
Можно ли перебрать список и удалить определенные слова / символ из каждой строки по мере его обработки?

Пример:
Если эта строка содержит # или%, или и то, и другое, по мере того, как скрипт запускает каждую строку, он удалит указанное слово / символы.

Возможно, что строка не содержит ни одного из этих слов / символов, и скрипт просто их пропустит.
C#:
var list = project.Lists["список для обработки"];
string[] toDel = new string[]{//массив стоп-слов или символов
    "%",
    "&",
    "стоп-слово",
    "целая стоп фраза"
};
/*тестовые данные
list.Clear();
list.AddRange(new[]{"mama","&","papa","целая стоп фраза","brat%","&sestra","какое-то стоп-слово"});
*/
for(int i = 0; i < list.Count; i++)
    foreach(string del in toDel.Where(x=>list[i].Contains(x)))
        list[i] = list[i].Replace(del, "");
//удаление пустых строк из списка
while(list.Contains(""))
    list.Remove("");
Товарищи, поделитесь сниппетом по распаршиванию домена на все урлы.

Он точно когда то был тут, но сейчас не могу найти. Я еще на его основе делел парсер емейлов со всех страниц сайта. Свой парсер тоже где-то протерял давным давно =)

Суть сниппета - заходим на домен и распаршиваем все ссылки с морды, вторая итеррация - распаршиваем распаршенные ссылки и так n-е количество раз. Все это было в несколько строчек кода на запросах. Спасибо
Универсальный сниппет под это дело отнимет кучу времени, которого у меня нет, но Вы можете начать заново, например, с этой заготовки.
https://zennolab.com/discussion/threads/parser-vneshnix-i-vnutrennix-ssylok.77533/
Нужен сниппет для очистки списка при наступлении новых суток. Возможно ли это сделать?
Возможно, но тут много возможных условий, как и решений. Самое простое, если он привязан к файлу и надо, чтобы каждый день в 00:00 очищался, то можно сделать отдельный шаблон и поставить его на расписание. Отключить использование браузера, а внутри такой код:
C#:
lock(SyncObjects.ListSyncer){
    project.Lists["список для очистки"].Clear();
}
 
  • Thank you
Reactions: Nord and Sardol

Sardol

Client
Joined
Sep 23, 2020
Messages
193
Reaction score
45
Points
28
Возможно, но тут много возможных условий, как и решений. Самое простое, если он привязан к файлу и надо, чтобы каждый день в 00:00 очищался, то можно сделать отдельный шаблон и поставить его на расписание. Отключить использование браузера, а внутри такой код:
C#:
lock(SyncObjects.ListSyncer){
project.Lists["список для очистки"].Clear();
}
А, если количество потоков ограничено версией стандарт, то как можно сделать?
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,726
Points
113
А, если количество потоков ограничено версией стандарт, то как можно сделать?
1. купить про
2. сделать консольную версию в визуал студии и поставить на расписание через расписание винды.
 
  • Thank you
Reactions: Sardol

SVRyzhov

Client
Joined
May 17, 2017
Messages
52
Reaction score
6
Points
8
Доброго дня!
Подскажите как из C# получить текст WARNINGa выводимого в лог?
project.GetLastError() не подходи, так как туда записывается ошибка приведшая к завершению проекта, а нужно получить предупреждения которые не привели к завершению проекта.
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,726
Points
113
Доброго дня!
Подскажите как из C# получить текст WARNINGa выводимого в лог?
project.GetLastError() не подходи, так как туда записывается ошибка приведшая к завершению проекта, а нужно получить предупреждения которые не привели к завершению проекта.
никак.
цель какая ?
 

SVRyzhov

Client
Joined
May 17, 2017
Messages
52
Reaction score
6
Points
8
цель какая ?
В основном для анализа и принятия решения что скрипту делать дальше. В каких-то случаях не загружается профиль, в каких-то не находится искомый текст. Так то процесс выглядит следующим образом; не нашел один текст, записал в переменную отметку что не нашел, записал в лог или базу что не нашел, пошел искать другой. Если бы была системная переменная в которой уже содержится текст варнинга, то пункт "записал в переменную отметку что не нашел" можно было бы исключить из схемы.
 

Phoenix78

Client
Read only
Joined
Nov 6, 2018
Messages
11,789
Reaction score
5,726
Points
113
В основном для анализа и принятия решения что скрипту делать дальше. В каких-то случаях не загружается профиль, в каких-то не находится искомый текст. Так то процесс выглядит следующим образом; не нашел один текст, записал в переменную отметку что не нашел, записал в лог или базу что не нашел, пошел искать другой. Если бы была системная переменная в которой уже содержится текст варнинга, то пункт "записал в переменную отметку что не нашел" можно было бы исключить из схемы.
для этого есть переменные и ветвление логики. есть проверки по тексту, по регулярке, поиск по списку и в у каждого есть выход по красной линии. логика в скрипте должна выстраиваться так что скрипт однозначно понимал в каком состоянии он находится и всегда знал что он выводит в лог, а не пытался угадать уже постфактум, что же пошло не так. загрузка профиля тоже генерирует выход по красной линии при ошибке загрузки.
 

Alex.A

Client
Joined
Nov 14, 2020
Messages
484
Reaction score
246
Points
43
Добрый день!
Шаблон при выполнении задачи записывает переменную "time_t" в виде "30.07.2021 22:58:09".
Нужно получить другую переменную "time_s" - системное время компютера.
Далее нас интересует разница этих переменных "time_s - time_t". Разница должна быть меньше 7 минут(например).

Далее по логике если разница меньше 7 минут то идет продолжение выполнения шаблона по зеленой ветке, если нет, то шаблон выполняется по красной ветке.

Очень буду благодарен за снипет. Мне не понятно как получить системное время "time_s" и провести вычитание в минутах (хотя понятно, что можно привести все и к секундам).
 

Alexmd

Client
Joined
Dec 10, 2018
Messages
1,021
Reaction score
1,427
Points
113
C#:
if(DateTime.TryParse(project.Variables["time_t"].Value, out DateTime ts)){
    if (ts.AddMinutes(7) - DateTime.Now < TimeSpan.Zero){
        throw new Exception("прошло более 7 минут");
    }
}
else throw new Exception("Не удалось распознать дату в переменной 'time_t'");
 
  • Thank you
Reactions: Alex.A and BAZAg

Alex.A

Client
Joined
Nov 14, 2020
Messages
484
Reaction score
246
Points
43
Большое спасибо, работает!
У меня выход по красной ветке, попадает на другую логику.
Если превышение заданных 7минут меньше 1 минуты, то шаблон выполняется по зеленой ветке, если более 1 минуты, то по красной.
У меня просьба, как ts.AddMinutes(7) - DateTime.Now первести в переменную, чтобы иметь возможность сравнить его с заданным значением (1минутой)?
 

Alexmd

Client
Joined
Dec 10, 2018
Messages
1,021
Reaction score
1,427
Points
113
Большое спасибо, работает!
У меня выход по красной ветке, попадает на другую логику.
Если превышение заданных 7минут меньше 1 минуты, то шаблон выполняется по зеленой ветке, если более 1 минуты, то по красной.
У меня просьба, как ts.AddMinutes(7) - DateTime.Now первести в переменную, чтобы иметь возможность сравнить его с заданным значением (1минутой)?
project.Variables["time_s"].Value = (ts.AddMinutes(7) - DateTime.Now).ToString(); вставьте это между 2 и 3 строками. Переменная time_s должна существовать или замените имя на свою.
Или используйте в следующем действии этот же сниппет, только вычитайте не 7, а 8 минут.
 
  • Thank you
Reactions: Alex.A

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
Есть снипет который гинерирует числа от X до X
Например в переменной numb_start = 1
numb_max = 5
На выходе получим в переменную результат
1
2
3
4
5
Как перед цифрой добавить свой текст ? Не знаю как править снипет

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, numbers);
 

The_vAe

Client
Joined
May 30, 2019
Messages
3,627
Reaction score
1,409
Points
113
Есть снипет который гинерирует числа от X до X
Например в переменной numb_start = 1
numb_max = 5
На выходе получим в переменную результат
1
2
3
4
5
Как перед цифрой добавить свой текст ? Не знаю как править снипет

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, numbers);
Так?

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;
string text = project.Variables["ИмяПеременной с текстов"].Value;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, text +"_"+ numbers);
 
  • Thank you
Reactions: udder

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
Так?

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;
string text = project.Variables["ИмяПеременной с текстов"].Value;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, text +"_"+ numbers);
Так?

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;
string text = project.Variables["ИмяПеременной с текстов"].Value;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, text +"_"+ numbers);
Вот такое результат в переменное отдается, не то :-))
test_System.Linq.Enumerable+WhereEnumerableIterator`1[System.Int32]
 

Ilshakin

Client
Joined
Feb 14, 2017
Messages
642
Reaction score
584
Points
93
Есть снипет который гинерирует числа от X до X
Например в переменной numb_start = 1
numb_max = 5
На выходе получим в переменную результат
1
2
3
4
5
Как перед цифрой добавить свой текст ? Не знаю как править снипет

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;

IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, numbers);
C#:
return string.Join("\n", Enumerable.Range(1, 5).ToList().Select(x => "Слоово " + x));
 
  • Thank you
Reactions: udder and Alexmd

The_vAe

Client
Joined
May 30, 2019
Messages
3,627
Reaction score
1,409
Points
113
Вот такое результат в переменное отдается, не то :-))
test_System.Linq.Enumerable+WhereEnumerableIterator`1[System.Int32]
C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);

// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;

while (start <= max)
{
    
    
    // Складируем числа в список
    SpisokChisel.Add(Convert.ToString(text +"_"+ start));
    
    // +1 К цифре
    start++;
    
}

return string.Join("\n", SpisokChisel);
 
  • Thank you
Reactions: udder

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);

// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;

while (start <= max)
{
   
   
    // Складируем числа в список
    SpisokChisel.Add(Convert.ToString(text +"_"+ start));
   
    // +1 К цифре
    start++;
   
}

return string.Join("\n", SpisokChisel);
Почти так как нужно, но еще момент, что результат в переменной должен быть не в одну строку, а с новой.
Например
test1
test2
test3
а сейчас так
test1test2test3
 

The_vAe

Client
Joined
May 30, 2019
Messages
3,627
Reaction score
1,409
Points
113
Почти так как нужно, но еще момент, что результат в переменной должен быть не в одну строку, а с новой.
Например
test1
test2
test3
а сейчас так
test1test2test3

C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);

// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;

while (start <= max)
{
    
    
    // Складируем числа в список
    SpisokChisel.Add(Convert.ToString(text +"_"+ start));
    
    // +1 К цифре
    start++;
    
}

project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel);

return string.Join("\n", SpisokChisel);
 
  • Thank you
Reactions: udder

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);

// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;

while (start <= max)
{
   
   
    // Складируем числа в список
    SpisokChisel.Add(Convert.ToString(text +"_"+ start));
   
    // +1 К цифре
    start++;
   
}

project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel);

return string.Join("\n", SpisokChisel);
Огонь , вы настоящий гуру в C# :-)
Жаль я сразу не сказал как нужно, вынужден опять дополнить:

на выходе получаю как и просил
test1
test2
test3

пожалуйста, еще один вариант, чтобы на выходе было
test1.domain.ru
test2.domain.ru
test3.domain.ru
 

The_vAe

Client
Joined
May 30, 2019
Messages
3,627
Reaction score
1,409
Points
113
Огонь , вы настоящий гуру в C# :-)
Жаль я сразу не сказал как нужно, вынужден опять дополнить:

на выходе получаю как и просил
test1
test2
test3

пожалуйста, еще один вариант, чтобы на выходе было
test1.domain.ru
test2.domain.ru
test3.domain.ru
C#:
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);

// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;

while (start <= max)
{
    
    
    // Складируем числа в список
    SpisokChisel.Add(Convert.ToString("test" + start +".domain.ru"));
    
    // +1 К цифре
    start++;
    
}

project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel);

return string.Join("\n", SpisokChisel);
 
  • Thank you
Reactions: udder

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
У меня есть снипет, который получает количество txt файлов из папки заданной в переменной path_Save_Text_Dir
C#:
return System.IO.Directory.GetFiles(project.Variables["path_Save_Text_Dir"].Value,"*.txt").Length;
Нужно подправить, чтобы получить количество папок в основной папки.
 

daVinchi

Client
Joined
Jan 11, 2019
Messages
60
Reaction score
68
Points
18
У меня есть снипет, который получает количество txt файлов из папки заданной в переменной path_Save_Text_Dir
C#:
return System.IO.Directory.GetFiles(project.Variables["path_Save_Text_Dir"].Value,"*.txt").Length;
Нужно подправить, чтобы получить количество папок в основной папки.
C#:
return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
 
  • Thank you
Reactions: udder

udder

Client
Joined
Mar 28, 2017
Messages
633
Reaction score
138
Points
43
C#:
return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
C#:
return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
Логично кстати, только сейчас обратил внимание GetFiles и GetDirectories, спасибо дружище
 

eksin

Client
Joined
Dec 9, 2010
Messages
62
Reaction score
28
Points
18
Добрый день.
ниже пример кода, который выводит инфу в лог, а как изменить, чтобы вывод был в переменные
к примеру:
в выводе будет к примеру 12 строк, каждую строку положить в свою переменную( img1,img2,img3...img12)

C#:
var fs = Helper.GetFotoService().service;
//var list = project.Lists["list"];
var list = Directory.GetFiles(@"D:\ML\repos\","*.jpg");
foreach (var f in list)
{
    var answer = fs.CheckFoto(@f);
    var fname = Path.GetFileName(f);
    
    project.SendInfoToLog(
        fname+" "+
        answer.Name + ":" + answer.Score
    );
}
 

daVinchi

Client
Joined
Jan 11, 2019
Messages
60
Reaction score
68
Points
18
в выводе будет к примеру 12 строк, каждую строку положить в свою переменную( img1,img2,img3...img12)
C#:
var fs = Helper.GetFotoService().service;
//var list = project.Lists["list"];
var list = Directory.GetFiles(@"D:\ML\repos\","*.jpg");

string vParamName = "img"; // Название переменной
int i = 0; // Счетчик

foreach (var f in list)
{
    var answer = fs.CheckFoto(@f);
    var fname = Path.GetFileName(f);
    
    project.SendInfoToLog(
        fname+" "+
        answer.Name + ":" + answer.Score
    );
    
    //проверяем существование переменной, если нет то создаем новую
    if (project.Variables.Keys.Contains(vParamName + i.ToString()))
    {
        project.SendInfoToLog("Переменная "+ vParamName + i.ToString() + " уже существует - присваиваем ей значение");                 
        project.Variables[vParamName].Value = f;
    } else
    {
        project.SendInfoToLog("Создаем переменную " + vParamName + i.ToString() + " и присваиваем ей значение");
        object obj = project.Variables;
        obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{vParamName + i.ToString()});
        project.Variables[vParamName + i.ToString()].Value = fname;
    }
    
    i++;
}
 
  • Thank you
Reactions: eksin

Users Who Are Viewing This Thread (Total: 1, Members: 0, Guests: 1)