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

  • Автор темы Автор темы CSS
  • Дата начала Дата начала
То есть у тебя примерно 56 разных строк, каждая из которых повторяется по 18 тысяч раз? А попробуй протестируй с файлом без повторений совсем. А то твой пример не совсем удачный, так как ты можешь каждый раз удалять все эти 18 тысяч повторов и файл будет резко уменьшаться, поэтому скорость может быть такой высокой. Ты использовал какой-то другой снипет?
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
 
  • Спасибо
Реакции: CSS
Ну ты прям красава, сначала пишишь одно, что повторы должны быть и найти их колличество, позже пишишь что уже кто то неудачно решение показывает, конечно я в тестировщики не записывался что бы мне тут говорили затести а потом отпиши, но специально для тебя на 2 500 000 строк сделал тест
Если у тебя из миллиона строк все будут уникальными, это будет самый жесткий и сложный тест. В том случае, если у какой то строки будет 2 повтора, то скорость уже будет чуть-чуть быстрее. И так далее. Поэтому я всегда всё тестирую при самых сложных условиях. А тестировать конечно не обязан, я же для спортивного интереса тебе это предложил сделать.
 
Последнее редактирование:
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
 
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
Так код то покажешь? Интересно же
 
21 повтор из 2 500 00 строк скорость зависит сильно ))) я просто маленько повтор специально наглядно сделал, ты то хоть уложился в секунды со 100 повторами
От 21 то не зависит конечно) А вот когда по 18 тысяч было, тогда непонятно было сам понимаешь. Там ведь на миллион строк шаблону всего 56 циклов надо было сделать. В последнем примере да, всё очень быстро работает
 
Так код то покажешь? Интересно же
ну держи))
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 - это сколько ты хочешь найти повторов, задать можешь любое число, голова просто уже не рубит что бы за проход собрать
 
ну держи))
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--) ? Или другой код был?
 
другой код
 
тебе этого мало ??)))
Этот очень долго обрабатывает, если в к примеру 5000 повторов в файле. Вот сейчас обработать хотел файл на 4 миллиона строк. Там строк, в которых от 0 до 100 повторов 95%. Остальные 10% это от 5 до 5000 повторов содержат. Вот думаю как это всё быстрее подсчитать. Если использовать код что выше, то он отлично справляется если нужно найти до 100 повторов. Но если поставить вместо for(int i=5; i >= 0; i--) к примеру for(int i=5000; i >= 0; i--) , то обрабатывать такой файл будет очень долго.
 
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос

мой пример был с 2 500 000 милионов строк в цикле 5 раз, вот и посчитай, а ты минуты 100 000 обрабатывал
 
)))))))))) ты определись что тебе надо, а то ты сам запутался и в каждом топике всё разное пишишь и вернулся опять в первый вопрос
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
 
А в чем разное? Условия всё те же, найти повторы как можно быстрее в большом файле. Повторов может не быть совсем, может быть 10 , а может и 5000.
2 500 000 умножь на 5 и пройди своим снипетом и сравни, ты в секунду милиард что ли хочешь проходить
 
В одной из тем увидел код для поиска по таблице и вставке в другую:
Код:
Развернуть Свернуть Копировать
//берем регулярное выражение для парсинга из переменной
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).
В случае нахождения совпадения, удалить строку из таблицы.
Может кто-нибудь помочь?
 
ну так сделай сначала поиск значения по одной переменной потом по второй, и можно брать не регулярку а текст и искать по тексту, на это всё секунды уйдут
 
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
2015-12-09_172906.png
 
и почему сразу снипет если тебе его тяжело осилить, почему не воспользоваться стандартным методом
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
 
Значит надо регулярку мутить, которая будет брать совпадение по двум полям. Да и можно без неё обойтись - стандартными кубиками, чекаем строку на фио, если совпадает - чекаем её же на др, по результату либо удаляем либо оставляем.
 
Спс за пример, удалить нужно именно по совпадению в двух полях. В этом то и сложность. Полных тезок в таблице достаточно, а уж про даты рождения и говорить нечего.
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


Тут не написано что в двух полях, столбцах и т.д, тут чётко написано найти и удалить а где они будут находиться тут уже не расписано
 
У меня задача несколько иная, нужно осуществить поиск в таблице по двум переменным из проекта (fio, birthday).
В случае нахождения совпадения, удалить строку из таблицы.


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

Ну как-то я упустил момент, но казалось, что это очевидно - поиск по совпадению ФИО и даты рождения. Если нет, то конечно извиняюсь.
 
Всем привет, прошу помощи в поиске причины ошибки.
Написал код под задачу удаление постов со стены группы 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");

}
Не могу додуматься, как сконструировать логику этого кода, может другой цикл, или ещё чего посоветуете?
 
Нужен снипет создание txt фаила в UTF-8 без boom, или перекодировка пустого фаила из ansi в utf8 без boom.
 
Нужен снипет создание txt фаила в UTF-8 без boom, или перекодировка пустого фаила из ansi в utf8 без boom.
С пустым файлом такое не сделать. Да и зачем, если он пустой? Если же в файл что-то записывать, то он по умолчанию будет в кодировке UTF-8 без BOM.
Но у пустого файла можно поменять кодировку на UTF-8
http://zennolab.com/discussion/thre...v-fajl-bom-byte-order-mark.21644/#post-144384
 
  • Спасибо
Реакции: Tonny
А можно ли сделать сниппет который будет проигрывать mp3 файл?
То есть хочу чтобы как бы было уведомление об окончании работы шаблона)
Пока сделал запуском mp3 из батника.
Может возможно сделать на c# это?
 
А можно ли сделать сниппет который будет проигрывать 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); // частота сигнала и длительность, мс
 
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();
 

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