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

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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
Joined
Jan 29, 2013
Messages
1,404
Reaction score
362
Points
83

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

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

izubr

Client
Joined
May 11, 2011
Messages
581
Reaction score
259
Points
63
+1 - это слишком частный случай, мне тоже ненадь ). надо просто какую то формулу сделать и подсчет текста изначального. чтобы более универсально работало.
 

S16er1um

Client
Joined
Apr 14, 2016
Messages
826
Reaction score
240
Points
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ом шаге и засовываете это значение в регулярку, которой сейчас пользуетесь. вот так у вас всегда будет рандомное кол-во текста)

В принципе геморно конечно, но таким образом вам ненужно постоянно вручную менять диапазон рандома, в котором обрезать текст) ибо фактически он будет меняться в процентах
 
Last edited:
  • Thank you
Reactions: Mikle

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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;
может когда до ума доведу действительно что то дельное получится и более простое в обращении )
 
Last edited:

VladZen

Administrator
Staff member
Joined
Nov 5, 2014
Messages
22,569
Reaction score
5,951
Points
113
Наверное это стоит писать в раздел Предложения:-)
Ну и все-таки непонятно, что вы хотите видеть в кубике. Поясните. Целый шаблон туда, к сожалению, не получится запихнуть.
 

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
43
Наверное это стоит писать в раздел Предложения:-)
Ну и все-таки непонятно, что вы хотите видеть в кубике. Поясните. Целый шаблон туда, к сожалению, не получится запихнуть.
в конечном виде я представляю себе это так (сейчас более собрал мысли)
1) Поле в котором нужно ввести текст или макрос можно было вставить со значением переменной ( текст с которым будет работа )

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

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

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

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

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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к
 
Last edited:

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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
 
Last edited:

Dimionix

Moderator
Joined
Apr 9, 2011
Messages
3,068
Reaction score
3,130
Points
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
Joined
Feb 18, 2016
Messages
66
Reaction score
40
Points
18

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

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

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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
 
  • Thank you
Reactions: Dimionix

Mikle

Client
Joined
Jan 31, 2017
Messages
162
Reaction score
131
Points
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 смог понять чего я стараюсь добиться и решил задачу ) в церковь что ли сходить свечку за благополучие его поставить )
 
Last edited:

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