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

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
То есть у тебя примерно 56 разных строк, каждая из которых повторяется по 18 тысяч раз? А попробуй протестируй с файлом без повторений совсем. А то твой пример не совсем удачный, так как ты можешь каждый раз удалять все эти 18 тысяч повторов и файл будет резко уменьшаться, поэтому скорость может быть такой высокой. Ты использовал какой-то другой снипет?
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
 
  • Thank you
Reactions: CSS

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
Если у тебя из миллиона строк все будут уникальными, это будет самый жесткий и сложный тест. В том случае, если у какой то строки будет 2 повтора, то скорость уже будет чуть-чуть быстрее. И так далее. Поэтому я всегда всё тестирую при самых сложных условиях. А тестировать конечно не обязан, я же для спортивного интереса тебе это предложил сделать.
 
Last edited:

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
 

Ribas

Client
Joined
May 31, 2014
Messages
1,440
Reaction score
503
Points
113
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
Так код то покажешь? Интересно же
 

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
От 21 то не зависит конечно) А вот когда по 18 тысяч было, тогда непонятно было сам понимаешь. Там ведь на миллион строк шаблону всего 56 циклов надо было сделать. В последнем примере да, всё очень быстро работает
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
Так код то покажешь? Интересно же
ну держи))
C#:
string Dir = project.Variables["project_directory"].Value;
string[] input = File.ReadAllLines(Dir+"test.txt");
int input_cnt = input.Length;
bool appendNewLine = true;
DateTime now = DateTime.Now;
project.SendInfoToLog("", "Начало :: "+now.ToString(), true);
for(int i=5; i >= 0; i--)
{
    int j = i;
    j--;
    var result = string.Join ("\r\n", input.GroupBy((x) => x).Where((x) => x.Count() == i).Select((x) => x.Key +" => "+j));
    FileSystem.FileAppendString(Dir + "test1.txt", result, appendNewLine);
    result = null;
}
project.SendInfoToLog("", "Пауза << 5 секунд >> ", true);
string path_Dir = Dir + "test1";
project.Variables["path_Dir"].Value = path_Dir;
var outputList = project.Lists["OutputList"];
outputList.Bind(path_Dir);
List<string> list = project.Lists["OutputList"].ToList();
outputList.Clear();
System.Threading.Thread.Sleep(5000);
list.Where(s=>!string.IsNullOrWhiteSpace(s)).Distinct()
    .ToList().ForEach(s=>outputList.Add(s));
now = DateTime.Now;
project.SendInfoToLog("", "Завершенно << "+now.ToString()+" >> обработанно << "+input_cnt+" >> строк", true);
project.Variables["path_Dir"].Value = "";
for(int i=5; i >= 0; i--) 5 - это сколько ты хочешь найти повторов, задать можешь любое число, голова просто уже не рубит что бы за проход собрать
 

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18
ну держи))
C#:
string Dir = project.Variables["project_directory"].Value;
string[] input = File.ReadAllLines(Dir+"test.txt");
int input_cnt = input.Length;
bool appendNewLine = true;
DateTime now = DateTime.Now;
project.SendInfoToLog("", "Начало :: "+now.ToString(), true);
for(int i=5; i >= 0; i--)
{
    int j = i;
    j--;
    var result = string.Join ("\r\n", input.GroupBy((x) => x).Where((x) => x.Count() == i).Select((x) => x.Key +" => "+j));
    FileSystem.FileAppendString(Dir + "test1.txt", result, appendNewLine);
    result = null;
}
project.SendInfoToLog("", "Пауза << 5 секунд >> ", true);
string path_Dir = Dir + "test1";
project.Variables["path_Dir"].Value = path_Dir;
var outputList = project.Lists["OutputList"];
outputList.Bind(path_Dir);
List<string> list = project.Lists["OutputList"].ToList();
outputList.Clear();
System.Threading.Thread.Sleep(5000);
list.Where(s=>!string.IsNullOrWhiteSpace(s)).Distinct()
    .ToList().ForEach(s=>outputList.Add(s));
now = DateTime.Now;
project.SendInfoToLog("", "Завершенно << "+now.ToString()+" >> обработанно << "+input_cnt+" >> строк", true);
project.Variables["path_Dir"].Value = "";
for(int i=5; i >= 0; i--) 5 - это сколько ты хочешь найти повторов, задать можешь любое число, голова просто уже не рубит что бы за проход собрать
Круто. Скажи, а в том примере где у тебя по 18 тысяч повторов было получается в коде вместо for(int i=5; i >= 0; i--) было что-то типа for(int i=18000; i >= 0; i--) ? Или другой код был?
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
другой код
 

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
А можешь показать тот код? Буду очень благодарен
тебе этого мало ??)))
 

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18
тебе этого мало ??)))
Этот очень долго обрабатывает, если в к примеру 5000 повторов в файле. Вот сейчас обработать хотел файл на 4 миллиона строк. Там строк, в которых от 0 до 100 повторов 95%. Остальные 10% это от 5 до 5000 повторов содержат. Вот думаю как это всё быстрее подсчитать. Если использовать код что выше, то он отлично справляется если нужно найти до 100 повторов. Но если поставить вместо for(int i=5; i >= 0; i--) к примеру for(int i=5000; i >= 0; i--) , то обрабатывать такой файл будет очень долго.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос

мой пример был с 2 500 000 милионов строк в цикле 5 раз, вот и посчитай, а ты минуты 100 000 обрабатывал
 

stmult

Client
Joined
Nov 19, 2013
Messages
96
Reaction score
37
Points
18
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
2 500 000 умножь на 5 и пройди своим снипетом и сравни, ты в секунду милиард что ли хочешь проходить
 

Zilit

Новичок
Joined
Oct 5, 2015
Messages
12
Reaction score
2
Points
3
В одной из тем увидел код для поиска по таблице и вставке в другую:
Code:
//берем регулярное выражение для парсинга из переменной
var parserRegexPattern = project.Variables["tableSearchRegex"].Value;
var parserRegex = new System.Text.RegularExpressions.Regex(parserRegexPattern);
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["SourceTable"];
// получаем таблицу, в которую будем класть
var destTable = project.Tables["OutputTable"];
// ищем в каждой строчке в таблице
for(int i=0; i < sourceTable.RowCount; i++)
{
// читаем строку из таблицы (это будет массив ячеек)
var cells = sourceTable.GetRow(i).ToArray();
// проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
if (parserRegex.IsMatch(cells[0]))
destTable.AddRow(cells);
}
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.
Может кто-нибудь помочь?
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
ну так сделай сначала поиск значения по одной переменной потом по второй, и можно брать не регулярку а текст и искать по тексту, на это всё секунды уйдут
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
2015-12-09_172906.png
 

Ribas

Client
Joined
May 31, 2014
Messages
1,440
Reaction score
503
Points
113
Так можно лишнее удалить :-) Если день рождения у двух людей совпадает
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
Так можно лишнее удалить :-) Если день рождения у двух людей совпадает
как понять ??? ну если совпадает то и снипет удалит так же
 

Zilit

Новичок
Joined
Oct 5, 2015
Messages
12
Reaction score
2
Points
3
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
 

Ribas

Client
Joined
May 31, 2014
Messages
1,440
Reaction score
503
Points
113
Значит надо регулярку мутить, которая будет брать совпадение по двум полям. Да и можно без неё обойтись - стандартными кубиками, чекаем строку на фио, если совпадает - чекаем её же на др, по результату либо удаляем либо оставляем.
 

ssXXXss

Client
Joined
Dec 23, 2014
Messages
7,375
Reaction score
2,042
Points
113
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


Тут не написано что в двух полях, столбцах и т.д, тут чётко написано найти и удалить а где они будут находиться тут уже не расписано
 

Zilit

Новичок
Joined
Oct 5, 2015
Messages
12
Reaction score
2
Points
3
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


Тут не написано что в двух полях, столбцах и т.д, тут чётко написано найти и удалить а где они будут находиться тут уже не расписано
Ну как-то я упустил момент, но казалось, что это очевидно - поиск по совпадению ФИО и даты рождения. Если нет, то конечно извиняюсь.
 

samsonnn

Client
Joined
Jun 2, 2015
Messages
1,898
Reaction score
1,640
Points
113
свой пост подтер, так как решил нужную мне задачу другим способом
 
Last edited:

allcorrect

Client
Joined
Mar 15, 2015
Messages
105
Reaction score
38
Points
28
Всем привет, прошу помощи в поиске причины ошибки.
Написал код под задачу удаление постов со стены группы Vk.com в которых присутствуют дохлые ссылки, но шаблон останавливается и выскакивает ошибка:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index]
Шаблон выполняет все действия до момента закрытия поста и соответственно удаления.
Вот сам код:
Code:
// Объявляем переменную отвечающую за список ссылок на редактирование
var LinkList = project.Lists["LinkList"];

//Создаём коллекцию из записей с возможностью редактирования + кладём это количество в переменную EditCount
var PostEditCollection = instance.ActiveTab.FindElementsByAttribute("div", "class","post_edit_button", "regexp");
//var EditCount = PostEditCollection.Count;


// Создаём цикл обработки ссылок
for (int l = 0; l<= PostEditCollection.Count; l++)
{
// Очищаем список ссылок для обработки
project.Lists["LinkList"].Clear();

// Нажимаем на кнопку редактирования поста
var EditButton = PostEditCollection.GetByNumber(l);
EditButton.Click();
System.Threading.Thread.Sleep(1000); // пауза

// Находим поле с текстом для редактирования
var GetText = instance.ActiveTab.FindElementByAttribute("div", "id", "wpe_text", "regexp", 0);

// Берём текст для редактирования
var InnerText = GetText.GetAttribute("innertext");
//return InnerText;
// Вытягиваем регулярками все ссылки в посте + перекладываем их в массив
var matches = Regex.Matches(InnerText, @"(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?").Cast<Match>().Select(m => m.Value).ToArray();
// Перекладываем данные из массива в список
LinkList.AddRange(matches);
//return LinkList.Count;

////////////////////////// производим обработку взятых линков /////////////////////////////////
for (int a = 0; a <= LinkList.Count; a++ )
{

// Берём ссылку под индексом (а)
var LinkForEdit = LinkList[a];
//return LinkForEdit;
// Производим Get запрос по этой ссылке
var GetAliForRealLink = ZennoPoster.HttpGet(LinkForEdit, String.Empty, "UTF-8", ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.HeaderOnly);
var response = Regex.Matches(GetAliForRealLink, @"HTTP/.*").Cast<Match>().Select(m => m.Value).ToArray();
project.Variables["Parsresponse"].Value = string.Join("; ", response);
//return project.Variables["Parsresponse"].Value;
}
if (project.Variables["Parsresponse"].Value.Contains("404 Not Found"))
{

//Закрываем пост
var CloseButton = instance.ActiveTab.FindElementByAttribute("button", "innertext", "Сохранить", "regexp", 0);
CloseButton.Click();
// Жмём на удаление поста
var PostDelit = instance.ActiveTab.FindElementByAttribute("div", "class", "post_delete_button", "regexp", l);
PostDelit.Click();
}
//Пересчитываем посты с возможностью редактирования
PostEditCollection = instance.ActiveTab.FindElementsByAttribute("div", "class","post_edit_button", "regexp");

}
Не могу додуматься, как сконструировать логику этого кода, может другой цикл, или ещё чего посоветуете?
 

Tonny

Client
Joined
Jul 20, 2013
Messages
142
Reaction score
5
Points
18
Нужен снипет создание txt фаила в UTF-8 без boom, или перекодировка пустого фаила из ansi в utf8 без boom.
 

Dimionix

Moderator
Joined
Apr 9, 2011
Messages
3,068
Reaction score
3,131
Points
113
Нужен снипет создание txt фаила в UTF-8 без boom, или перекодировка пустого фаила из ansi в utf8 без boom.
С пустым файлом такое не сделать. Да и зачем, если он пустой? Если же в файл что-то записывать, то он по умолчанию будет в кодировке UTF-8 без BOM.
Но у пустого файла можно поменять кодировку на UTF-8
http://zennolab.com/discussion/threads/pri-soxranenii-txt-csv-dobavljat-v-fajl-bom-byte-order-mark.21644/#post-144384
 
  • Thank you
Reactions: Tonny

shved2

Client
Joined
Jul 16, 2015
Messages
146
Reaction score
53
Points
28
А можно ли сделать сниппет который будет проигрывать mp3 файл?
То есть хочу чтобы как бы было уведомление об окончании работы шаблона)
Пока сделал запуском mp3 из батника.
Может возможно сделать на c# это?
 

Dimionix

Moderator
Joined
Apr 9, 2011
Messages
3,068
Reaction score
3,131
Points
113
А можно ли сделать сниппет который будет проигрывать mp3 файл?
То есть хочу чтобы как бы было уведомление об окончании работы шаблона)
Пока сделал запуском mp3 из батника.
Может возможно сделать на c# это?
3 варианта воспроизведения звуков:
C#:
// 1 вариант
// Проигрывает любой .wav файл

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"путь к файлу");
player.Play();

// 2 вариант

System.Media.SystemSounds.Exclamation.Play();

// 3 вариант

Console.Beep(800, 500); // частота сигнала и длительность, мс
 

shved2

Client
Joined
Jul 16, 2015
Messages
146
Reaction score
53
Points
28
3 варианта воспроизведения звуков:
C#:
// 1 вариант
// Проигрывает любой .wav файл

System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"путь к файлу");
player.Play();

// 2 вариант

System.Media.SystemSounds.Exclamation.Play();

// 3 вариант

Console.Beep(800, 500); // частота сигнала и длительность, мс

Хотел сделать по первому варианту, добавил с# кубик, в него вставил код, но кубик не выполняется...
Code:
System.Media.SoundPlayer player = new System.Media.SoundPlayer(@"C:\1.wav");
player.Play();
 

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