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

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
То есть у тебя примерно 56 разных строк, каждая из которых повторяется по 18 тысяч раз? А попробуй протестируй с файлом без повторений совсем. А то твой пример не совсем удачный, так как ты можешь каждый раз удалять все эти 18 тысяч повторов и файл будет резко уменьшаться, поэтому скорость может быть такой высокой. Ты использовал какой-то другой снипет?
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
 
  • Спасибо
Реакции: CSS

stmult

Client
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
18
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
Если у тебя из миллиона строк все будут уникальными, это будет самый жесткий и сложный тест. В том случае, если у какой то строки будет 2 повтора, то скорость уже будет чуть-чуть быстрее. И так далее. Поэтому я всегда всё тестирую при самых сложных условиях. А тестировать конечно не обязан, я же для спортивного интереса тебе это предложил сделать.
 
Последнее редактирование:

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 374
Благодарностей
464
Баллы
83
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
Так код то покажешь? Интересно же
 

stmult

Client
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
18
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
От 21 то не зависит конечно) А вот когда по 18 тысяч было, тогда непонятно было сам понимаешь. Там ведь на миллион строк шаблону всего 56 циклов надо было сделать. В последнем примере да, всё очень быстро работает
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
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
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
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
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
другой код
 

stmult

Client
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
18

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

stmult

Client
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
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
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос

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

stmult

Client
Регистрация
19.11.2013
Сообщения
96
Благодарностей
37
Баллы
18
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
2 500 000 умножь на 5 и пройди своим снипетом и сравни, ты в секунду милиард что ли хочешь проходить
 

Zilit

Новичок
Регистрация
05.10.2015
Сообщения
12
Благодарностей
2
Баллы
3
В одной из тем увидел код для поиска по таблице и вставке в другую:
Код:
//берем регулярное выражение для парсинга из переменной
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
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
ну так сделай сначала поиск значения по одной переменной потом по второй, и можно брать не регулярку а текст и искать по тексту, на это всё секунды уйдут
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
2015-12-09_172906.png
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 374
Благодарностей
464
Баллы
83
Так можно лишнее удалить :-) Если день рождения у двух людей совпадает
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113

Zilit

Новичок
Регистрация
05.10.2015
Сообщения
12
Благодарностей
2
Баллы
3
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
 

Ribas

Client
Регистрация
31.05.2014
Сообщения
1 374
Благодарностей
464
Баллы
83
Значит надо регулярку мутить, которая будет брать совпадение по двум полям. Да и можно без неё обойтись - стандартными кубиками, чекаем строку на фио, если совпадает - чекаем её же на др, по результату либо удаляем либо оставляем.
 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 039
Баллы
113
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


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

Zilit

Новичок
Регистрация
05.10.2015
Сообщения
12
Благодарностей
2
Баллы
3
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


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

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 630
Благодарностей
1 303
Баллы
113
свой пост подтер, так как решил нужную мне задачу другим способом
 
Последнее редактирование:

allcorrect

Client
Регистрация
15.03.2015
Сообщения
105
Благодарностей
38
Баллы
28
Всем привет, прошу помощи в поиске причины ошибки.
Написал код под задачу удаление постов со стены группы Vk.com в которых присутствуют дохлые ссылки, но шаблон останавливается и выскакивает ошибка:
Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.
Имя параметра: index]
Шаблон выполняет все действия до момента закрытия поста и соответственно удаления.
Вот сам код:
Код:
// Объявляем переменную отвечающую за список ссылок на редактирование
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
Регистрация
20.07.2013
Сообщения
142
Благодарностей
5
Баллы
18
Нужен снипет создание txt фаила в UTF-8 без boom, или перекодировка пустого фаила из ansi в utf8 без boom.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
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
 
  • Спасибо
Реакции: Tonny

shved2

Client
Регистрация
16.07.2015
Сообщения
146
Благодарностей
53
Баллы
28
А можно ли сделать сниппет который будет проигрывать mp3 файл?
То есть хочу чтобы как бы было уведомление об окончании работы шаблона)
Пока сделал запуском mp3 из батника.
Может возможно сделать на c# это?
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 099
Баллы
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
Регистрация
16.07.2015
Сообщения
146
Благодарностей
53
Баллы
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); // частота сигнала и длительность, мс

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

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