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

Manless

Client
Регистрация
09.01.2014
Сообщения
186
Благодарностей
33
Баллы
28
Всем добрый!
Версия 5.9.5.1
Подскажите пожалуйста, как узнать код прошлого выполненного экшена?
 

tka4enko.ilya

Client
Регистрация
20.10.2015
Сообщения
61
Благодарностей
9
Баллы
8
Всем добрый!
Версия 5.9.5.1
Подскажите пожалуйста, как узнать код прошлого выполненного экшена?
Как вариант в кубике C# его в переменную писать. Как то делал в одном проекте для разбора логов.
Если это обычный экшен, то вроде ни как
 

GreenWay

Client
Регистрация
11.05.2012
Сообщения
428
Благодарностей
132
Баллы
43
Для рандомизации действий часто выполняю 2 кубика -
1) - Рандом 0-2
2) - Если =0-выход по yes, если =1-выход по no
Подскажите пожалуйста, можно ли это запихнуть в сниппет?
 
  • Спасибо
Реакции: Osminogus

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Для рандомизации действий часто выполняю 2 кубика -
1) - Рандом 0-2
2) - Если =0-выход по yes, если =1-выход по no
Подскажите пожалуйста, можно ли это запихнуть в сниппет?
Код:
int chance = Global.Classes.rnd.Next(2);
if (chance!=0) return null;
 
  • Спасибо
Реакции: sentinel и GreenWay

GreenWay

Client
Регистрация
11.05.2012
Сообщения
428
Благодарностей
132
Баллы
43
Спасибо!
Правильно я понял?
Если нужно вероятность 25%, то код будет такой?
Код:
int chance = Global.Classes.rnd.Next(4);

if (chance!=0) return null;
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
  • Спасибо
Реакции: GreenWay

vizards

Client
Регистрация
26.02.2012
Сообщения
74
Благодарностей
5
Баллы
8

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Продублируй сюда код, который всегда выходит по зеленой
 

vizards

Client
Регистрация
26.02.2012
Сообщения
74
Благодарностей
5
Баллы
8

Trader1985

Client
Регистрация
14.12.2011
Сообщения
131
Благодарностей
31
Баллы
28
Здравствуйте, уважаемые форумчане!
В общем, ситуация такая, перед загрузкой файлов на сервер я, дабы меньше палиться, меняю хеш-суммы файла.
Делаю я это просто:
1) Генерирую рандомное двухзначное число;
2) Стандартным экшеном "работа с файлами", выбираю "записать текст" (дописать в файл)
Всё, в конец файла дописываються два символа и хеш-сумма файла меняется. Происходит это очень быстро, что удобно.

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

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

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

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
409
Благодарностей
155
Баллы
43
Подскажите сниппет который сможет сделать следующее.

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

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

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

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
409
Благодарностей
155
Баллы
43

one

Client
Регистрация
22.09.2015
Сообщения
6 793
Благодарностей
1 264
Баллы
113
Ну в этом снипете подправьте под переменную а с мешаниной не подсажу, поищите по форуму. ну в крайнем случае экшеном выгрузить в список, перемешать и загрузить обратно в переменную потом сниппетом взять что нужно.
 
  • Спасибо
Реакции: fri-lancer

Spaik

Client
Регистрация
25.05.2015
Сообщения
42
Благодарностей
3
Баллы
8
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.
 
  • Спасибо
Реакции: Radzhab

Spaik

Client
Регистрация
25.05.2015
Сообщения
42
Благодарностей
3
Баллы
8
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.
 

Spaik

Client
Регистрация
25.05.2015
Сообщения
42
Благодарностей
3
Баллы
8

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
Нужно проверить наличие 1?aa в тексте посредством C#, какая регулярка будет правильная? А то с этими знаками вопросов запутался
Конструктор дает 1\?aa.*?
Тогда в коде проверка на совпадение выглядеть должна как? У меня if (Regex.Match(text, "1\\?aa.*?").Value == "1?aa")
P.S. Все работает
 
Последнее редактирование:

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
del
 
Последнее редактирование:

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
Нужно проверить наличие 1?aa в тексте посредством C#, какая регулярка будет правильная? А то с этими знаками вопросов запутался
Конструктор дает 1\?aa.*?
Тогда в коде проверка на совпадение выглядеть должна как? У меня if (Regex.Match(text, "1\\?aa.*?").Value == "1?aa")
P.S. Все работает
Регулярка тут не нужна. используй конструкцию
if (переменная.Contains("1?aa"))
 
  • Спасибо
Реакции: Nord

BraG.A

Пользователь
Регистрация
05.08.2016
Сообщения
81
Благодарностей
7
Баллы
8

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 804
Баллы
113
Необходим следующий сниппет: Нужно получить всю строку из списка в которой есть определенное значение. Т.е. найти в списке значение из переменной, и взять всю ту строку в которой есть это значение.
Находим первое совпадение и возвращаем его:

Код:
/*Возвращается первое совпадение.
Если совпадений не найдено, возвращается -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

nicanil

Client
Регистрация
06.03.2016
Сообщения
2 242
Благодарностей
1 804
Баллы
113
Подскажите сниппет который сможет сделать следующее.

В переменной есть строки:
строка 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

fri-lancer

Client
Регистрация
01.10.2013
Сообщения
409
Благодарностей
155
Баллы
43
Как-то так. Возвращается половина строк из исходного списка (если длина исходного списка нечётная, то она округляется в большую сторону)
Код:
// Переменная, в которой лежат строки.
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));
Отлично все работает. Спасибо!
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
В коде делается 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"+ ?
 
Регистрация
08.07.2015
Сообщения
2 848
Благодарностей
712
Баллы
113
В коде делается 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

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113
Как взять рандомное число от а до б в диапазоне long ?

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

Так выдает ошибку, так как превышен диапазон int32
 

LaGir

Client
Регистрация
01.10.2015
Сообщения
211
Благодарностей
853
Баллы
93
Как взять рандомное число от а до б в диапазоне 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

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 598
Баллы
113
это генерация boundary?
я не морочился, разбивал 1 длинный рандом на 2 коротких)
 

Nord

Client
Регистрация
22.03.2012
Сообщения
2 375
Благодарностей
1 435
Баллы
113

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