Будет ли кубик заменяющий рандом?

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
Здравствуйте.

Будет ли кубик реализующий следующую схему ) если не было планов на его создание то вот сама мысль )

Как начать то, в общем расскажу как я себя реализовал а после почему хотелось бы в кубике )
рис.1

random.jpg

Эта схема делает следующее
1) берется случайное число
2) по свичу уходит в нужны блок
3) в блоке генерируются 1 и 2 рандомное число с указанными дипазоном и заносятся в переменные random1 и random2
4) код сишарпа (спасибо ssXXXss)

var TEXT = project.Variables["TEXT"].Value;
int randomm1 = int.Parse(project.Variables["randomm1"].Value);
int randomm2 = int.Parse(project.Variables["randomm2"].Value);

TEXTT = TEXTT.Substring(randomm1);
return TEXTT.Substring(0, TEXTT.Length - randomm2);


Его задача обрезать текст взятый из значения слева по числу 1 и справа по числу 2) (числа создающие в п.3)

в итоге получаем текст обрезанный рандомными числами. а конкретно этот блок расчитан на текст в 6к символов не +-100

отдельно для него схема значений высчитывается
рис.2
random2.jpg


где с первых двух колонок вносятся в значения первого блока случайного числа и со вторых двух колонок во второй блок случайного числа, просчитано с шагом 150 символов.

т.е. 1 строчка которая на рис.2 для 1 блока который на рис.1 и т.д.

т.е. иными словами у нас есть текст в 6 к символов но требуется с него нарезать текста в среднем 500 символов +-200 примерно и что бы текст брался с разных мест этого значения.

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

Подстрока бы могла теоретически заменить кубик C# но там в значении До: нельзя значение переменной воткнуть ( ..... От: почему то можно а До: нельзя ... подстрокой я не пользовался только в видео мельком видел но вроде должна обрезать текста а другими средствами не получилось реализовать рандомную обрезку ... в общем такое в планах есть? если не было будет? )))

Конечно здесь есть спецы которые могут наверное все это в небольшом коде показать но я увы не умею )

а нужен кубик для того что бы заного не надо было высчитывать для каждого блока значения если текст скажем изменится и будет не 6к знаков в нем а 7к или 5к .... вот поэтому хотелось бы в кубике где можно было бы прописать усредненные значение, сколько на выходе должно быть примерно текста а влево вправо сам бы бросал рандомно ... а елси будет определять именно центр текста перед разбросом то можно было бы указать % разброса от центра текста где при значении 1% он бы резал практически всегда центральную часть текста при 50% резал бы с любой стороны текста и при 100% резал бы тексты с краев.

Спасибо за внимание.
 

AloneSlamer

Client
Регистрация
29.01.2013
Сообщения
1 404
Благодарностей
362
Баллы
83

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с AloneSlamer какие-либо сделки.

Может проще поумолять того же @ssXXXss что бы он набросал dll ?
Ну не нужно это 99% пользователей.
 

izubr

Client
Регистрация
11.05.2011
Сообщения
521
Благодарностей
218
Баллы
43
+1 - это слишком частный случай, мне тоже ненадь ). надо просто какую то формулу сделать и подсчет текста изначального. чтобы более универсально работало.
 

S16er1um

Client
Регистрация
14.04.2016
Сообщения
826
Благодарностей
240
Баллы
43
а нужен кубик для того что бы заного не надо было высчитывать для каждого блока значения если текст скажем изменится и будет не 6к знаков в нем а 7к или 5к .... вот поэтому хотелось бы в кубике где можно было бы прописать усредненные значение, сколько на выходе должно быть примерно текста а влево вправо сам бы бросал рандомно ... а елси будет определять именно центр текста перед разбросом то можно было бы указать % разброса от центра текста где при значении 1% он бы резал практически всегда центральную часть текста при 50% резал бы с любой стороны текста и при 100% резал бы тексты с краев.
Шаг1. Берёшь считаешь количество символов в тексте (кубиком С#). Делишь это значение на 100. Таким образом вы получаете информацию , какое к-во символов в одном %( с учётом пробелов, если не ошибаюсь).

Вариант1.Генерируете случайное число. Например, вы хотите, чтоб с конца отсекалось от 1го до 3х%, а с начала от 2х до 4%х процентов. тогда рандом от 1 до 4х и от 2х до 5ти. Умножаете полученые числа на выше полученый результат и засовываете в регулярку, которой вы отсекаете сейчас текст.

Вариант2.если у вас постоянно нужно урезать одинаковый процент текста. например 10% и вам важно чтоб это было именно 10%, но с каких сторон как вас не интересует - то. генерируете рандомно 1но число (от 1го до 11). 2ым кубиком делаете вычитание (10-это число). всё. вы получили сколько процентов с конца и сколько сначала вам обрезать. теперь эти проценты нужно умножить на Шаг1 и засунуть в регулярку.

Вариант3.или другой вариант. если вы всегда урезаете текст , например, на 5% - то просчитайте пары и запишите в блокнот через двоеточие. вот
0:5
1:4
2:3
3:2
2:3
4:1
5:0.
первое число % вначале, а 2ое число % с конца которые нужно урезать
Этот метод подойдёт только если у вас нужно урезать небольшой процент. далее засуньте эти данные в список (текстовый документ) и берите рандомно (без удаления). Опять же после того как взяли значения просто умножаете их на полученый результат в 1ом шаге и засовываете это значение в регулярку, которой сейчас пользуетесь. вот так у вас всегда будет рандомное кол-во текста)

В принципе геморно конечно, но таким образом вам ненужно постоянно вручную менять диапазон рандома, в котором обрезать текст) ибо фактически он будет меняться в процентах
 
Последнее редактирование:
  • Спасибо
Реакции: Mikle

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
Шаг1. Берёшь считаешь количество символов в тексте (кубиком С#). Делишь это значение на 100. Таким образом вы получаете информацию , какое к-во символов в одном %( с учётом пробелов, если не ошибаюсь).

Вариант1.Генерируете случайное число. Например, вы хотите, чтоб с конца отсекалось от 1го до 3х%, а с начала от 2х до 4%х процентов. тогда рандом от 1 до 4х и от 2х до 5ти. Умножаете полученые числа на выше полученый результат и засовываете в регулярку, которой вы отсекаете сейчас текст.

Вариант2.если у вас постоянно нужно урезать одинаковый процент текста. например 10% и вам важно чтоб это было именно 10%, но с каких сторон как вас не интересует - то. генерируете рандомно 1но число (от 1го до 11). 2ым кубиком делаете вычитание (10-это число). всё. вы получили сколько процентов с конца и сколько сначала вам обрезать. теперь эти проценты нужно умножить на Шаг1 и засунуть в регулярку.

Вариант3.или другой вариант. если вы всегда урезаете текст , например, на 5% - то просчитайте пары и запишите в блокнот через двоеточие. вот
0:5
1:4
2:3
3:2
2:3
4:1
5:0.
первое число % вначале, а 2ое число % с конца которые нужно урезать
Этот метод подойдёт только если у вас нужно урезать небольшой процент. далее засуньте эти данные в список (текстовый документ) и берите рандомно (без удаления). Опять же после того как взяли значения просто умножаете их на полученый результат в 1ом шаге и засовываете это значение в регулярку, которой сейчас пользуетесь. вот так у вас всегда будет рандомное кол-во текста)

В принципе геморно конечно, но таким образом вам ненужно постоянно вручную менять диапазон рандома, в котором обрезать текст) ибо фактически он будет меняться в процентах
Спасибо! натолкнули на мысли как упростить схему с использованием
0:5
1:4
2:3
3:2
2:3
4:1
5:0.
когда реализую попроще вариант что бы не надо было в куче кубиков менять значение ) отпишусь
просто мало опыта еще )
надо было хоть как то вначале реализовать функцию )) получился огород )

а вот так вот подсчитаю количество символов в кубике кода если понадобится )

  • string str = project.Variables["text"].Value;
  • return str.Length;
может когда до ума доведу действительно что то дельное получится и более простое в обращении )
 
Последнее редактирование:

VladZen

Administrator
Команда форума
Регистрация
05.11.2014
Сообщения
22 233
Благодарностей
5 846
Баллы
113
Наверное это стоит писать в раздел Предложения:-)
Ну и все-таки непонятно, что вы хотите видеть в кубике. Поясните. Целый шаблон туда, к сожалению, не получится запихнуть.
 

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
Наверное это стоит писать в раздел Предложения:-)
Ну и все-таки непонятно, что вы хотите видеть в кубике. Поясните. Целый шаблон туда, к сожалению, не получится запихнуть.
в конечном виде я представляю себе это так (сейчас более собрал мысли)
1) Поле в котором нужно ввести текст или макрос можно было вставить со значением переменной ( текст с которым будет работа )

2) 2 поля небольших от и до (к примеру от 400 до 600 символов что бы оставлял от всего текста)

3) поле для возможности указания процента разброса выборки количества символов т.е.
если ставим 1 (минимальное значение) % то он будет резать свободно от 300 до 600 где 99% макс значение будет резать 420-480 символов и в этом поле что бы макрос можно было поставить

4) поле отвечающее за разброс от центра текста в % (т.е. кубик автоматически определял центр текста в значении) при значении 1% он бы резал практически всегда центральную часть текста при 50% резал бы с любой стороны текста и при 100% резал бы тексты с краев но не меньше значения значения пункта 2 и тоже что бы в этом поле можно было поставить макрос

Написал бы в раздел предложения, вначале так и хотел но там не увидел кнопки Upliad a File ((( а в первом посту изображения надо загрузить было.
 

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
Упростил схему рандомной обрезки до минимума )))
Спасибо (S16er1um) натолкнул на мысль

random3.jpg


Где в первом кубике таблица со значениями резки

blok.jpg


с нее берется случайная строка (без удаления) и размещается в 4 переменные (кстати уже не впервый раз замечаю что при таком просмотре показывает только первые 14 строк хотя строк больше версия 5.9.9.1 pro)
а значения с этих переменных макросом добавляются в следующие 2 кубика в поля от и до т.е. (пример) берется строка к примеру 1 и в первый кубик рандома вставляются от 150 и до 299 и во второй кубик рандома от 5200 до 5349 где получаем к примеру 1 число 200 второе число 5300

ну и последний кубик
код сишарпа (спасибо ssXXXss)

var TEXT = project.Variables["TEXT"].Value;
int randomm1 = int.Parse(project.Variables["randomm1"].Value);
int randomm2 = int.Parse(project.Variables["randomm2"].Value);

TEXTT = TEXTT.Substring(randomm1);
return TEXTT.Substring(0, TEXTT.Length - randomm2);

Который берет сгенерированные значения и обрезает по ним текста справа и слева.

продолжаю пример обрезает 200 символов слева и 5300 символов справа если текст 6к символов то мы получим кусок текста в 500 символов.

Упростить то упростил схему и не надо ручками кучу кубиков редактировать, достаточно только просчитать зная объем текста, но все равно приходится высчитывать значения... буду думать как еще упростить, в сторону что бы не надо было высчитывать ручками значения для 1 кубика ... на случай если текст будет не 6к а 5к к примеру или 15к
 
Последнее редактирование:

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
Вот что пробую сделать на данный момент, что бы более понятно было. ) Там где вопрос тот участок еще не продуман.
r1.jpg

Если значение random1 больше чем TEXTSUMMA то кубик С# не выполнился

где 2 кубик

string str = project.Variables["TEXT"].Value;
return str.Length;

и ложит результат в переменную в TEXTSUMMA

где 5 кубик

var TEXT = project.Variables["TEXT"].Value;
int randomm2 = int.Parse(project.Variables["randomm2"].Value);
int randomm3 = int.Parse(project.Variables["randomm3"].Value);

TEXT = TEXT.Substring(randomm2);
return TEXT.Substring(0, TEXT.Length - randomm3);

и ложит результат в переменную TEXT2
 
Последнее редактирование:

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
C#:
string str = project.Variables["Text"].Value; // исходный текст
int min = int.Parse(project.Variables["RndMin"].Value); // минимальное количество символов для возвращаемого результата
int max = int.Parse(project.Variables["RndMax"].Value); // максимальное количество символов для возвращаемого результата

int length = str.Length;
if (min > length)
    throw new Exception("Ошибка! Минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте");
//    return str; // если минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте, возвращаем исходный текст полностью (предыдущее закомментировать!)
if (max > length) max = length;

Random random = new Random();
int rnd = random.Next(min, max + 1);
int startIndex = random.Next(0, length - rnd + 1);
return str.Substring(startIndex, rnd);
 

rich7

Client
Регистрация
18.02.2016
Сообщения
66
Благодарностей
40
Баллы
18

Обращаем Ваше внимание на то, что данный пользователь заблокирован.
Не рекомендуем проводить с rich7 какие-либо сделки.

когда знаешь что можно сделать проще и правильнее,
но делаешь как можешь, зная что так делать не правильно
и ведь при этом еще делаешь это красиво, с душою,
а потом всю эту красоту сносишь нахрен, меняешь на 1 кубик, и доволен как слон)
ох уж эта нерациональность человеческая :-)
 
  • Спасибо
Реакции: Mikle

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
C#:
string str = project.Variables["Text"].Value; // исходный текст
int min = int.Parse(project.Variables["RndMin"].Value); // минимальное количество символов для возвращаемого результата
int max = int.Parse(project.Variables["RndMax"].Value); // максимальное количество символов для возвращаемого результата

int length = str.Length;
if (min > length)
    throw new Exception("Ошибка! Минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте");
//    return str; // если минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте, возвращаем исходный текст полностью (предыдущее закомментировать!)
if (max > length) max = length;

Random random = new Random();
int rnd = random.Next(min, max + 1);
int startIndex = random.Next(0, length - rnd + 1);
return str.Substring(startIndex, rnd);
Спасибо буду пробовать сейчас ....

думал что ни кто уже не поможет и взялся рисовать большущую схему (на скрине просто при макс увеличении в прожекте не вмещается она) где был вначале кубик определяющий количество символов в переменной
далее шел расчет используя модуль if (расчеты подводил от 125 до 16к символов если в тексте было бы) т.е. вначале if определял больше 8к или меньше 8к символов и т.д. до 125) после определения сколько примерно символов в тексте т.к. точное число тут бесполезно и нужен был диапазон ... иначе говоря после определения в какой диапазон символов этот текст попадает (далее в шабе не успел еще дописать) выход шел бы на кубик рандома с заданым диапазоном числа от и до, после этого шел бы на таблицу что бы взять строку (в таблице заранее должны были бы быть прописаны все варианты для диапазонов от 125 до 16к) и вуаля все бы работало .... только мне это писать еще день бы пришлось .... и каждый раз этот кусок с определением диапазона в который попадает искомый текст из переменной пришлось бы вставлять в шаб возможно бы я бы визуально как бы это дело уменьшил бы но этот комбайн бы все равно работал бы но с одним ограничением что способен нормально работать с текстом до 16к символов ... заготовку оставлю а пока буду предложенный просто вариант кода использовать ))) спасибо за помощь!

P.S. на скрине не завершенная модель )

4456.jpg
 
  • Спасибо
Реакции: Dimionix

Mikle

Client
Регистрация
31.01.2017
Сообщения
162
Благодарностей
131
Баллы
43
C#:
string str = project.Variables["Text"].Value; // исходный текст
int min = int.Parse(project.Variables["RndMin"].Value); // минимальное количество символов для возвращаемого результата
int max = int.Parse(project.Variables["RndMax"].Value); // максимальное количество символов для возвращаемого результата

int length = str.Length;
if (min > length)
    throw new Exception("Ошибка! Минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте");
//    return str; // если минимальное количество символов для возвращаемого результата превышает количество символов в исходном тексте, возвращаем исходный текст полностью (предыдущее закомментировать!)
if (max > length) max = length;

Random random = new Random();
int rnd = random.Next(min, max + 1);
int startIndex = random.Next(0, length - rnd + 1);
return str.Substring(startIndex, rnd);
да Благословят Вас боги известные и не известные! Работает! то что нужно!

Вот именно об этом кубике я и просил что бы добавили в мейкер ))) Но Добрый человек Dimionix смог понять чего я стараюсь добиться и решил задачу ) в церковь что ли сходить свечку за благополучие его поставить )
 
Последнее редактирование:
  • Спасибо
Реакции: WalkODoff и Dimionix

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