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

  • Автор темы Автор темы CSS
  • Дата начала Дата начала
Всем добрый!
Версия 5.9.5.1
Подскажите пожалуйста, как узнать код прошлого выполненного экшена?
 
Всем добрый!
Версия 5.9.5.1
Подскажите пожалуйста, как узнать код прошлого выполненного экшена?
Как вариант в кубике C# его в переменную писать. Как то делал в одном проекте для разбора логов.
Если это обычный экшен, то вроде ни как
 
Для рандомизации действий часто выполняю 2 кубика -
1) - Рандом 0-2
2) - Если =0-выход по yes, если =1-выход по no
Подскажите пожалуйста, можно ли это запихнуть в сниппет?
 
  • Спасибо
Реакции: Osminogus
Для рандомизации действий часто выполняю 2 кубика -
1) - Рандом 0-2
2) - Если =0-выход по yes, если =1-выход по no
Подскажите пожалуйста, можно ли это запихнуть в сниппет?
Код:
Развернуть Свернуть Копировать
int chance = Global.Classes.rnd.Next(2);
if (chance!=0) return null;
 
  • Спасибо
Реакции: izubr, sentinel и GreenWay
Спасибо!
Правильно я понял?
Если нужно вероятность 25%, то код будет такой?
Код:
Развернуть Свернуть Копировать
int chance = Global.Classes.rnd.Next(4);

if (chance!=0) return null;
 
  • Спасибо
Реакции: izubr
Спасибо!
Правильно я понял?
Если нужно вероятность 25%, то код будет такой?
Код:
Развернуть Свернуть Копировать
int chance = Global.Classes.rnd.Next(4);

if (chance!=0) return null;
такой
 
  • Спасибо
Реакции: GreenWay
Здравствуйте, уважаемые форумчане!
В общем, ситуация такая, перед загрузкой файлов на сервер я, дабы меньше палиться, меняю хеш-суммы файла.
Делаю я это просто:
1) Генерирую рандомное двухзначное число;
2) Стандартным экшеном "работа с файлами", выбираю "записать текст" (дописать в файл)
Всё, в конец файла дописываються два символа и хеш-сумма файла меняется. Происходит это очень быстро, что удобно.

Уважаемые знатоки, внимание, вопрос: как после загрузки файла на сервер мне удалить это рандомное число из файла?
То есть, я хочу тем самым вернуть файл в первоначальное его состояние.
У меня есть две переменные: {-Variable.Path-} - путь к файлу; И {-Variable.Random-} - рандомное число.

Хоть я и не понимаю ничего в СИ шарп, мне кажется, что такой синипет легко написать, ведь условия всегда одинаковы:
1) Это двухзначное число;
2) Оно всегда в конце файла;

Вопрос: как удалить два (3-6) ЛЮБЫХ символа в конце файла?
 
Последнее редактирование:
Подскажите сниппет который сможет сделать следующее.

В переменной есть строки:
строка 1
строка 2
строка 3
строка 4
строка 5
строка 6
строка 7

нужно их перемещать и взять половину (или меньше/больше) строк, т.е в итоге должно получиться например так:
строка 5
строка 2
строка 4
строка 7

и вернуть их в эту же перемменную.
 
Ну в этом снипете подправьте под переменную а с мешаниной не подсажу, поищите по форуму. ну в крайнем случае экшеном выгрузить в список, перемешать и загрузить обратно в переменную потом сниппетом взять что нужно.
 
  • Спасибо
Реакции: fri-lancer
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.
 
  • Спасибо
Реакции: Radzhab
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.
 
Нужно проверить наличие 1?aa в тексте посредством C#, какая регулярка будет правильная? А то с этими знаками вопросов запутался
Конструктор дает 1\?aa.*?
Тогда в коде проверка на совпадение выглядеть должна как? У меня if (Regex.Match(text, "1\\?aa.*?").Value == "1?aa")
P.S. Все работает
 
Последнее редактирование:
del
 
Последнее редактирование:
Нужно проверить наличие 1?aa в тексте посредством C#, какая регулярка будет правильная? А то с этими знаками вопросов запутался
Конструктор дает 1\?aa.*?
Тогда в коде проверка на совпадение выглядеть должна как? У меня if (Regex.Match(text, "1\\?aa.*?").Value == "1?aa")
P.S. Все работает
Регулярка тут не нужна. используй конструкцию
if (переменная.Contains("1?aa"))
 
  • Спасибо
Реакции: Nord
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.

Находим первое совпадение и возвращаем его:

Код:
Развернуть Свернуть Копировать
/*Возвращается первое совпадение.
Если совпадений не найдено, возвращается -1.*/

// Список в котором ищем.
var source_list = project.Lists["source"];
// Строка, которую ищем в списке.
string pattern = project.Variables["pattern"].Value;

foreach (string item in source_list)
{
    if (item.Contains(pattern))
        return item;
}

return -1;

Находим все совпадения и копируем в новый список:
Код:
Развернуть Свернуть Копировать
/*Каждое совпадение перемещается в другой список*/

// Список в котором ищем.
var source_list = project.Lists["source"];
// Список в который перемещаем совпадения.
var dest_list = project.Lists["results"];
// Строка, которую ищем в списке.
string pattern = project.Variables["pattern"].Value;

lock (SyncObjects.ListSyncer)
{
    foreach (string item in source_list)
    {
        if (item.Contains(pattern))
            dest_list.Add(item);
    }
}

Во втором снипете я не уверен, нужна ли конструкция lock{...}. Если я правильно всё понимаю, то она нужна только в том случае, если список привязан к файлу, если же список локальный и с внешним миром никак не связан, то можно обойтись и без неё.
 
Последнее редактирование:
  • Спасибо
Реакции: GreenWay
Подскажите сниппет который сможет сделать следующее.

В переменной есть строки:
строка 1
строка 2
строка 3
строка 4
строка 5
строка 6
строка 7

нужно их перемещать и взять половину (или меньше/больше) строк, т.е в итоге должно получиться например так:
строка 5
строка 2
строка 4
строка 7

и вернуть их в эту же перемменную.

Как-то так. Возвращается половина строк из исходного списка (если длина исходного списка нечётная, то она округляется в большую сторону)
Код:
Развернуть Свернуть Копировать
// Переменная, в которой лежат строки.
string input_str = project.Variables["input"].Value;

// Преобразовываем в список.
var list = input_str.Split('\n').ToList();
// Получаем количество возвращаемых строк (половина исходного списка).
// Если длина списка нечётное число, то округляем в большую сторону
int return_strings_count = Convert.ToInt32(Math.Ceiling((double)list.Count/2));
// Перемешиваем строки.
list.Shuffle();

return String.Join("\n", list.GetRange(0, return_strings_count));
 
  • Спасибо
Реакции: fri-lancer
Как-то так. Возвращается половина строк из исходного списка (если длина исходного списка нечётная, то она округляется в большую сторону)
Код:
Развернуть Свернуть Копировать
// Переменная, в которой лежат строки.
string input_str = project.Variables["input"].Value;

// Преобразовываем в список.
var list = input_str.Split('\n').ToList();
// Получаем количество возвращаемых строк (половина исходного списка).
// Если длина списка нечётное число, то округляем в большую сторону
int return_strings_count = Convert.ToInt32(Math.Ceiling((double)list.Count/2));
// Перемешиваем строки.
list.Shuffle();

return String.Join("\n", list.GetRange(0, return_strings_count));
Отлично все работает. Спасибо!
 
В коде делается Post с мультипартом , как красиво засунуть конструкцию

Код:
Развернуть Свернуть Копировать
-----------------------------{-Variable.boundary-}
Content-Disposition: form-data; name="NAME"

{-Profile.Name-}
profile
-----------------------------{-Variable.boundary-}
Content-Disposition: form-data; name="Update"
.....

content:body_text;

Как сформировать body_text, чтоб сохранились все переносы строк?
Писать все в одну строку, делая замену переменных на c#вые, вместо переноса строки писать +"/n"+ ?
 
В коде делается Post с мультипартом , как красиво засунуть конструкцию
Метод POST.
В случае HTTP запроса типа POST существует два варианта передачи полей из HTML форм, а именно, используя алгоритм application/x-www-form-urlencoded и multipart/form-data. Различия между данными алгоритмами весьма существенные. Дело в том, что алгоритм первого типа создавался давным-давно, когда в языке HTML еще не предусматривали возможность передачи файлов через HTML формы. Итак, давайте рассмотрим эти алгоритмы на примерах.

3.1 Content-Type: application/x-www-form-urlencoded.
Пишем запрос, аналогичный нашему запросу GET для передачи логина и пароля, который был рассмотрен в предыдущей главе:


POST http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Content-Length: 35\r\n
\r\n
login=Petya%20Vasechkin&password=qq

Здесь мы видим пример использования Content-Type и Content-Length полей заголовка. Content-Length говорит, сколько байт будет занимать область данных, которая отделяется от заголовка еще одним переводом строки \r\n. А вот параметры, которые раньше для запроса GET помещались в Request-URI, теперь находятся в Entity-Body. Видно, что они формируются точно также, просто надо написать их после заголовка. Хочу отметить еще один важный момент, ничто не мешает, одновременно с набором параметров в Entity-Body, помещать параметры с другими именами в Request-URI, например:


POST http://www.site.ru/news.html?type=user HTTP/1.0\r\n
.....
\r\n
login=Petya%20Vasechkin&password=qq

3.2 Content-Type: multipart/form-data
Как только интернет мир понял, что неплохо бы было через формы отсылать еще и файлы, так W3C консорциум взялся за доработку формата POST запроса. К тому времени уже достаточно широко применялся формат MIME (Multipurpose Internet Mail Extensions — многоцелевые расширения протокола для формирования Mail сообщений), поэтому, чтобы не изобретать велосипед заново, решили использовать часть данного формата формирования сообщений для создания POST запросов в протоколе HTTP.

Каковы же основные отличия этого формата от типа application/x-www-form-urlencoded?

Главное отличие в том, что Entity-Body теперь можно поделить на разделы, которые разделяются границами (boundary). Что самое интересное — каждый раздел может иметь свой собственный заголовок для описания данных, которые в нем хранятся, т.е. в одном запросе можно передавать данные различных типов (как в Mail письме Вы одновременно с текстом можете передавать файлы).

Итак, приступим. Рассмотрим опять все тот же пример с передачей логина и пароля, но теперь в новом формате.


POST http://www.site.ru/news.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/index.html\r\n
Cookie: income=1\r\n
Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n
Content-Length: 209\r\n
\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="login"\r\n
\r\n

Petya Vasechkin\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="password"\r\n
\r\n

qq\r\n
--1BEF0A57BE110FD467A--\r\n

Теперь давайте разбираться в том что написано. :-) Я специально выделил некоторые символы \r\n жирным, чтобы они не сливались с данными. Присмотревшись внимательно можно заметить поле boundary после Content-Type. Это поле задает разделитель разделов — границу. В качестве границы может быть использована строка, состоящая из латинских букв и цифр, а так же из еще некоторых символов (к сожалению, не помню каких еще). В теле запроса в начало границы добавляется '--', а заканчивается запрос — границей, к которой символы '--' добавляются еще и в конец. В нашем запросе два раздела, первый описывает поле login, а второй поле password. Content-Disposition (тип данных в разделе) говорит, что это будут данные из формы, а в поле name задается имя поля. На этом заголовок раздела заканчивается и далее следует область данных раздела, в котором помещается значение поля (кодировать значение не требуется!).

Хочу обратить Ваше внимание та то, что в заголовках разделов не надо использовать Content-Length, а вот в заголовке запроса надо и его значение является размером всего Entity-Body, стоящего после второго \r\n, следующего за Content-Length: 209\r\n. Т.е. Entity-Body отделяется от заголовка дополнительным переводом строки (что можно заметить и в разделах).

А теперь давайте напишем запрос для передачи файла.


POST http://www.site.ru/postnews.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/news.html\r\n
Cookie: income=1\r\n
Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n
Content-Length: 491\r\n
\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="news_header"\r\n
\r\n

Пример новости\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="news_file"; filename="news.txt"\r\n
Content-Type: application/octet-stream\r\n
Content-Transfer-Encoding: binary\r\n
\r\n

А вот такая новость, которая лежит в файле news.txt\r\n
--1BEF0A57BE110FD467A--\r\n

В данном примере в первом разделе пересылается заголовок новости, а во втором разделе пересылается файл news.txt. Внимательный да увидит поля filename и Content-Type во втором разделе. Поле filename задает имя пересылаемого файла, а поле Content-Type — тип данного файла. Application/octet-stream говорит о том, что это стандартный поток данных, а Content-Transfer-Encoding: binary говорит на о том, что это бинарные данные, ничем не закодированные.

Очень важный момент. Большинство CGI скриптов написано умными людьми, поэтому они любят проверять тип пришедшего файла, который стоит в Content-Type. Зачем? Чаще всего закачка файлов на сайтах используется для получения картинок от посетителя. Так вот, браузер сам пытается определить что за файл посетитель хочет отправить и вставляет соответствующий Content-Type в запрос. Скрипт его проверяет при получении, и, например, если это не gif или не jpeg игнорирует данный файл. Поэтому при "ручном" формировании запроса позаботьтесь о значении Content-Type, чтобы оно было наиболее близким к формату передаваемого файла.

image/gif для gif
image/jpeg для jpeg
image/png для png
image/tiff для tiff (что используется крайне редко, уж больно емкий формат)
В нашем примере формируется запрос, в котором передается текстовый файл. Точно так же формируется запрос для передачи бинарного файла.
 
  • Спасибо
Реакции: Nord
Как взять рандомное число от а до б в диапазоне long ?

Random num = new Random();
var rand_num = num.Next(100000000000000,999999999999999).ToString();

Так выдает ошибку, так как превышен диапазон int32
 
Как взять рандомное число от а до б в диапазоне long ?
C#:
Развернуть Свернуть Копировать
Random num = new Random();
var a = 100000000000000;
var b = 999999999999999;
byte[] buffer = new byte[8];
num.NextBytes(buffer);
var longRand = BitConverter.ToInt64(buffer, 0);
var rand_num = (Math.Abs(longRand % (b - a)) + a);
return rand_num;
 
  • Спасибо
Реакции: GreenWay, Nord и doc

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