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

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 777
Благодарностей
1 447
Баллы
113
Ребята, помогите пожалуйста написать на C# такой обработчик.

Нужно обрабатывать переменную Text регулярками, которые применяются к переменной по очереди. Количество регулярок задается в переменной Count, а сами регулярки и их последовательность задаются в таблице:
В столбце E задается количество применяемых регулярок (от 0 до 6). Если будет 0, то нужно завершить сниппет и дальше не идти
В столбце F задается тип регулярки: del, probel и regex. По сути это означает то, что нужно будет сделать: удалить, заменить на пробел и применить текст регулярки соответственно
В столбце G:
  • если тип регулярки del, задается то, что нужно удалить из Text (ну или заменить на пустоту "")
  • если тип регулярки probel, задается то, что в Text нужно заменить на пробел
  • если тип регулярки regex, то просто задается текст регулярного выражения из тестера регулярок ПМ
Если в столбце E указана цифра 1, то после применения регулярки, завершаем сниппет.

Если в столбце E указана цифра 2, то это означает, что регулярок к Text применяется 2, значит в таблице присутствуют значения в столбцах H и I, суть которых идентична значениям столбцов F и G. И так далее, если в столбце E указано 3, то после F и G идут еще два столбца по порядку, в первом из которых будет тип регулярки, а во втором что нужно удалить из Text, либо текст регулярного выражения, и так далее до 6. 6 я взял с запасом, это максимум, обычно 3-4 буду использовать.

На стандартных кубах зенки это жесть как громоздко
Огоо это полноценное ТЗ вам лутче создать тему в разделе реклама, там точно вам помогут, одно дело написать снипет на 5-7 строк, и совсем другое дело делать полное ТЗ
 
  • Спасибо
Реакции: iblohin

iblohin

Client
Регистрация
10.09.2015
Сообщения
64
Благодарностей
2
Баллы
8
спасибо, создам там.
 

Ikigai

Client
Регистрация
13.12.2016
Сообщения
276
Благодарностей
27
Баллы
28
Подскажите пожалуйста сниппет для Обработки текста→Regex→и получить все значения сразу в переменную, а не в список.
 

amyboose

Client
Регистрация
21.04.2016
Сообщения
2 312
Благодарностей
1 191
Баллы
113
Нужен сниппет обрезки аудиофайла по отрезкам между звуковыми пустотами :ah:
 
  • Спасибо
Реакции: Samoylov_83

Samoylov_83

Client
Регистрация
25.08.2015
Сообщения
229
Благодарностей
70
Баллы
28

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
390
Баллы
63
Подскажите пожалуйста сниппет для Обработки текста→Regex→и получить все значения сразу в переменную, а не в список.
Код:
var text = project.Variables["Text"].Value;
var pattern = @"регулярка";
var result = System.Text.RegularExpressions.Regex.Match(text, pattern).Value;
if(string.IsNullOrEmpty(result)) throw new Exception("Не найден текст регулярным выражением");
return result;
здесь берется только одно значение,как получить несколько значений не знаю,может кто подскажет​
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 684
Благодарностей
4 641
Баллы
113
Код:
var text = project.Variables["Text"].Value;
var pattern = @"регулярка";
var result = System.Text.RegularExpressions.Regex.Match(text, pattern).Value;
if(string.IsNullOrEmpty(result)) throw new Exception("Не найден текст регулярным выражением");
return result;
здесь берется только одно значение,как получить несколько значений не знаю,может кто подскажет​
C#:
var text = project.Variables["Text"].Value;
var pattern = @"регулярка";
return string.Join("\r\n", Regex.Matches(text, pattern).Cast<Match>().Select(x=>x.Value));
 
  • Спасибо
Реакции: Ikigai и Sanekk

Ikigai

Client
Регистрация
13.12.2016
Сообщения
276
Благодарностей
27
Баллы
28
Спасибо , я пока ждал ) уже забыл куда это впихнуть хотел ))
 
  • Спасибо
Реакции: Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Помогите разгадать загадку, разобраться к кодом.
Есть необходимость удалить "," запятую отсюда, из такой конструкции - "232,432", в общем, цифры
Нашёл код, но не хочет работать как надо. Вернее, то работает, то нет, и, обнаружил одну особенность:
- в новой, последней версии 5.10.4.1, может просто не обработать код, но молчит
- в версии 5.9.9.1 - выдаёт ошибку и не хочет выполняться
Вот код:
Код:
string text1 = project.ExecuteMacro("{-Variable.Esti-}");
project.Variables["Esti"].Value = Macros.TextProcessing.Replace(text1, ",", "", "Text", "First");
Что ещё заметил, если попадается цифра без запятой "343", то код не выполняется (опять же, в старой версии выдаёт ошибку и не хочет ничего делать, а в новой 5.10.4.1, просто не отрабатывает), но переменную делает пустой. У меня в одной переменной происходят действие

Видимо для старой версии (а может быть и для новой), что-то не так в "Macros.TextProcessing.Replace", ошибка говорит "ZennoLab. Macros. TextProcessing1 не содержит определение для 'Replace'", но, что это значит не могу понять, то ли ему нечего удалять, нет запятой, то ли ошибка в коде? И, если на 5.10.4.1 ничего не делает и идёт дальше, на 5.9.9.1 стопорится на ошибке
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
227
Благодарностей
927
Баллы
93
Есть необходимость удалить "," запятую отсюда, из такой конструкции - "232,432", в общем, цифры
Если только цифры с одной запятой, точно нужно использовать именно зенновский метод, а не обычный Replace? Он и без запятой тем более нормально работает.
Код:
project.Variables["Esti"].Value = project.Variables["Esti"].Value.Replace(",", String.Empty);
Видимо для старой версии (а может быть и для новой), что-то не так в "Macros.TextProcessing.Replace", ошибка говорит "ZennoLab. Macros. TextProcessing1 не содержит определение для 'Replace'", но, что это значит не могу понять, то ли ему нечего удалять, нет запятой, то ли ошибка в коде?
Просто в 5.9.9.1 у класса TextProcessing ещё не было метода Replace.
 
  • Спасибо
Реакции: Valiksim

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Если только цифры с одной запятой, точно нужно использовать именно зенновский метод, а не обычный Replace? Он и без запятой тем более нормально работает.
Код:
project.Variables["Esti"].Value = project.Variables["Esti"].Value.Replace(",", String.Empty);
Мне без разницы какой метод использовать, главное, чтобы работало.
C# только-только начинаю ощупывать, ещё мало в нём разбираюсь

Просто в 5.9.9.1 у класса TextProcessing ещё не было метода Replace.
Вот, я предполагал, что ему "чего-то не хватает"

Спасибо за помощь!
 

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Код берет из списка рандомно 20 строк и ложит их в 20 переменных. Допишите код, чтобы он еще и удалял эти строки из списка.
Код:
var list = project.Lists["secondList"];
Random rnd = new Random();
//20 - количество переменных
for(int i=1; i<=20; i++)
//записать
project.Variables["ID"+i.ToString()].Value = list[rnd.Next(list.Count)];
//удалить
????????
Спасибо.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Код берет из списка рандомно 20 строк и ложит их в 20 переменных. Допишите код, чтобы он еще и удалял эти строки из списка.
Код:
var list = project.Lists["secondList"];
Random rnd = new Random();
//20 - количество переменных
for(int i=1; i<=20; i++)
//записать
project.Variables["ID"+i.ToString()].Value = list[rnd.Next(list.Count)];
//удалить
????????
Спасибо.
C#:
var list = project.Lists["secondList"];
Random rnd = new Random();
//20 - количество переменных
for(int i = 0; i < 20; i++)
{
    //записать
    int index = Global.Classes.rnd.Next(0, list.Count);
    project.Variables["ID" + i.ToString()].Value = list[index];
    //удалить
    list.RemoveAt(index);
}
 
  • Спасибо
Реакции: WEISS

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
C#:
var list = project.Lists["secondList"];
Random rnd = new Random();
//20 - количество переменных
for(int i = 0; i < 20; i++)
{
    //записать
    int index = Global.Classes.rnd.Next(0, list.Count);
    project.Variables["ID" + i.ToString()].Value = list[index];
    //удалить
    list.RemoveAt(index);
}
Спасибо! То, что доктор прописал.
А можно чуть-чуть допилить.
Сейчас, если в списке меньше 20 строк, выходит по красному. А можно, чтобы только если список пуст выходил по красному, а при взятии менее 20 но более 0, выходил по зеленому.
Спасибо.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Спасибо! То, что доктор прописал.
А можно чуть-чуть допилить.
Сейчас, если в списке меньше 20 строк, выходит по красному. А можно, чтобы только если список пуст выходил по красному, а при взятии менее 20 но более 0, выходил по зеленому.
Спасибо.
а если больше 20 строк ?
 

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
а если больше 20 строк ?
Всё Ок. Например строк 112. Берет 20, удаляет, выходит по зеленой и т.д. возьмет 5 раз, останется 12, берет 12, удаляет и выходит по красной и попадает в неправильный путь шаблона.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Всё Ок. Например строк 112. Берет 20, удаляет, выходит по зеленой и т.д. возьмет 5 раз, останется 12, берет 12, удаляет и выходит по красной и попадает в неправильный путь шаблона.
C#:
var list = project.Lists["secondList"];
Random rnd = new Random();

if (list.Count <= 0)
{
    project.SendWarningToLog("", "Список secondList пуст", true);
    return null;
}

if (list.Count < 20)
{
    for (int i = 0; i < list.Count; i++)
    {
        int index = Global.Classes.rnd.Next(0, list.Count);
        project.Variables["ID" + i.ToString()].Value = list[index];
        list.RemoveAt(index);
    }
    return 1;
}
else
{
    for (int j = 0; j < 20; j++)
    {
        int index2 = Global.Classes.rnd.Next(0, list.Count);
        project.Variables["ID" + j.ToString()].Value = list[index2];
        list.RemoveAt(index2);
    }
}
 
  • Спасибо
Реакции: WEISS

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
C#:
var list = project.Lists["secondList"];
Random rnd = new Random();

if (list.Count <= 0)
{
    project.SendWarningToLog("", "Список secondList пуст", true);
    return null;
}

if (list.Count < 20)
{
    for (int i = 0; i < list.Count; i++)
    {
        int index = Global.Classes.rnd.Next(0, list.Count);
        project.Variables["ID" + i.ToString()].Value = list[index];
        list.RemoveAt(index);
    }
    return 1;
}
else
{
    for (int j = 0; j < 20; j++)
    {
        int index2 = Global.Classes.rnd.Next(0, list.Count);
        project.Variables["ID" + j.ToString()].Value = list[index2];
        list.RemoveAt(index2);
    }
}
Спасибо!!!
 

sum41

Client
Регистрация
09.10.2014
Сообщения
7
Благодарностей
0
Баллы
1
Доброго времени, коллеги! Подскажите пожалуйста, как реализовать такой сниппет - есть таблица в которой один столбец и нужно посчитать все числа в нем( числа вида 0.1, 0.2346, 0.1823) и передать в переменную. Поиском на форуме нашел такую конструкцию (спасибо автору), но получаю сообщение CSharp OwnCode Input string was not in a correct format. Понимаю что неверен тип данных, что нужно изменить?
Код:
var table = project.Tables["Buy"];
List<int> numbers = new List<int>();
for(int i=0; i < table.RowCount; i++)
{
    var cells = table.GetRow(i).ToArray();
    numbers.Add(Convert.ToInt32(cells[0]));
}
project.Variables["buy_summ"].Value = Convert.ToString(numbers.Sum());
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
с права кнопку такую придумали Спасибо вместо слов ))
 
  • Спасибо
Реакции: WEISS и sum41

Sanekk

Client
Регистрация
24.06.2016
Сообщения
999
Благодарностей
390
Баллы
63
как сложить в массив несколько фраз\слов чтобы потом вызывать по одному?
например string x = "Random|Yandex|Google";
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
  • Спасибо
Реакции: Sanekk

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Плиз, помогите
Код 1 - работает
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_invitation"].Value);
if (match1.ToString() != "1")
{
return match1;
}
return null;
Код 2 - работает
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_member"].Value);
if (match1.ToString() == "0")
{
return match1;
}
return null;
Код 3 - код 1+код 2, все время по зеленой, т.е. работает некорректно.
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_invitation"].Value);
var match2 = Regex.Match(text, project.Variables["Regex_member"].Value);
{
    if (match1.ToString() != "1")
   {
       return match1;
   }
  else
   {
    if (match2.ToString() == "0")
        {
        return match2;
        }
    else 
        {
        return null;
        }
    }
}
Подправьте кто может.
Спасибо.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Плиз, помогите
Код 1 - работает
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_invitation"].Value);
if (match1.ToString() != "1")
{
return match1;
}
return null;
Код 2 - работает
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_member"].Value);
if (match1.ToString() == "0")
{
return match1;
}
return null;
Код 3 - код 1+код 2, все время по зеленой, т.е. работает некорректно.
Код:
string text = project.Variables["GET"].Value;
var match1 = Regex.Match(text, project.Variables["Regex_invitation"].Value);
var match2 = Regex.Match(text, project.Variables["Regex_member"].Value);
{
    if (match1.ToString() != "1")
   {
       return match1;
   }
  else
   {
    if (match2.ToString() == "0")
        {
        return match2;
        }
    else
        {
        return null;
        }
    }
}
Подправьте кто может.
Спасибо.
Ты даже не отблагодарил лайком первый раз за помощь, я смотрю у нас сейчас пользователи со статусом клиент так относятся к тому когда им решение готовое выкладывают, может и дерзко высказано но как то так
 
  • Спасибо
Реакции: Sanekk и WEISS

WEISS

Client
Регистрация
11.12.2015
Сообщения
115
Благодарностей
25
Баллы
28
Ты даже не отблагодарил лайком первый раз за помощь, я смотрю у нас сейчас пользователи со статусом клиент так относятся к тому когда им решение готовое выкладывают, может и дерзко высказано но как то так
Сорри, 4+поставил
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Помогите, пожалуйста, с решением задачи:
В общем, нужна проверка наличия на странице Фразы, и далее,- если есть - по зелёной, если нет выход по красной. Что-то наваял, исходя из того, что нашёл тут на форуме, но не работает
Код:
string strAttribute = instance.ActiveTab.FindElementByXPath("//h2[@class='title']",0).GetAttribute("OuterHtml");
strAttribute = new Regex(@"(?<=<h2.*>)Приветствую.*(?=</h2>)").Match(strAttribute).Value;
if (strAttribute.Contains("Приветствую"));
{
return -1;
}else{    Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Это заголовок", "Что-то пошло НЕ так", null, 15000);   
return null;
}
xPath текст на странице находит, регулярка обрабатывает правильно, а вот дальше тьма. Если else убрать всё время идёт по зелёной, независимо от кода на странице, а с else вообще ПМ ругается
 

orka13

Client
Регистрация
07.05.2015
Сообщения
2 177
Благодарностей
2 184
Баллы
113
Помогите, пожалуйста, с организацией работы полнотекстового поиска в БД SQlite. Уже самостоятельно сварганил выборку в обычной БД "SQlite". Но надо заставить зенку работать с выборкой в БД "SQlite FTS5". Фактически осталось пару строк на C# подключить. Подробности в этой теме http://zennolab.com/discussion/threads/oshibka-polnotekstovogo-poiska-sqlite-fts5.35290/#post-263600
 

surrealmix

Client
Регистрация
07.03.2013
Сообщения
715
Благодарностей
409
Баллы
63
Помогите, пожалуйста, с решением задачи:
В общем, нужна проверка наличия на странице Фразы, и далее,- если есть - по зелёной, если нет выход по красной.
C#:
var pattern = "искомая фраза";
if(!instance.ActiveTab.DomText.Contains(pattern))
    throw new Exception(string.Format("Pattern with value '{0}' not found", pattern));
 
  • Спасибо
Реакции: Valiksim и Sanekk

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
C#:
var pattern = "искомая фраза";
if(!instance.ActiveTab.DomText.Contains(pattern))
    throw new Exception(string.Format("Pattern with value '{0}' not found", pattern));
Независимо ни от чего, выдаётся ОК. Дело в том, что фраза содержится в коде каждой страницы, уникальным является только на странице приветствия и распознаётся по h2
"Пришлось" приспособить код под свой
Код:
// Парсим текст из страницы
Tab tab = instance.ActiveTab;
if (tab.IsBusy) tab.WaitDownloading();
string text = tab.PageText;

string strAttribute = instance.ActiveTab.FindElementByXPath("//h2[@class='title']",0).GetAttribute("OuterHtml");
strAttribute = new Regex(@"(?<=<h2.*>)Приветствую.*(?=</h2>)").Match(strAttribute).Value;

var Attribute = "Attribute";
if(!instance.ActiveTab.DomText.Contains(Attribute))
    throw new Exception(string.Format("Pattern with value '{0}' not found", Attribute));
    Global.SpecialForms.AlertNotificator.Instance.DisplayAlert("Это заголовок", "Что-то пошло НЕ так", null, 15000);
И добавить вывод оповещения, но в один кубик вставить не получается, только в отдельном кубике работает. Но, это уже хорошо, шаг вперёд в деле освоения C#
Спасибо за подсказку
 

infosimple

Client
Регистрация
01.01.2015
Сообщения
427
Благодарностей
61
Баллы
28
Прошу помощи, как в данном случае положить ответ сервера в переменную:
C#:
string cookie = "куки";
string url = "урл";
string useragent = "юзерагент";
var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
httpWebRequest.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
httpWebRequest.Method = "PUT";
httpWebRequest.Headers.Add("Cookie", cookie);
httpWebRequest.UserAgent =  useragent;
using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
  string json = "json";
  streamWriter.Write(json);
  streamWriter.Flush();
  streamWriter.Close();
}
var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
  var result = streamReader.ReadToEnd();
return result;
}
Ответ приходит в виде ошибки 428, но так и должно быть.
 

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