большое спасибо за обновленный код он работает очень хорошоКод Выполняет именно то, что Вы описали. Проверьте свои списки. Возможно, там на момент выполнения кода лежат не те данные, от которых Вы ждете заказанный результат.
Посмотреть вложение 78954
C#://Очищу списки foreach(string s in new[]{"A", "B"}) project.Lists[s].Clear(); //Заполню списки тестовыми данными var A = project.Lists["A"]; A.Add("какие-то данные_1"); A.Add("какие-то данные_2"); A.Add("какие-то данные_3"); A.Add("какие-то данные_4"); A.Add("какие-то данные_5"); var B = project.Lists["B"]; B.Add("some data_youtube"); B.Add("some data_2"); B.Add("some data_3"); B.Add("some data_4"); B.Add("some data_iframe"); //Выполню замену строк в списке B строками из списка A, если в них имеются слова из массива for(int i = 0; i < B.Count; i++) foreach(string str in new[]{"youtube", "iframe"}) if(B[i].Contains(str)) B[i] = A[i]; //Посмотрю, что теперь в списке B return string.Join(Environment.NewLine, B);
Можно ли перебрать список и удалить определенные слова / символ из каждой строки по мере его обработки?
Пример:
Если эта строка содержит # или%, или и то, и другое, по мере того, как скрипт запускает каждую строку, он удалит указанное слово / символы.
Возможно, что строка не содержит ни одного из этих слов / символов, и скрипт просто их пропустит.
var list = project.Lists["список для обработки"];
string[] toDel = new string[]{//массив стоп-слов или символов
"%",
"&",
"стоп-слово",
"целая стоп фраза"
};
/*тестовые данные
list.Clear();
list.AddRange(new[]{"mama","&","papa","целая стоп фраза","brat%","&sestra","какое-то стоп-слово"});
*/
for(int i = 0; i < list.Count; i++)
foreach(string del in toDel.Where(x=>list[i].Contains(x)))
list[i] = list[i].Replace(del, "");
//удаление пустых строк из списка
while(list.Contains(""))
list.Remove("");
Универсальный сниппет под это дело отнимет кучу времени, которого у меня нет, но Вы можете начать заново, например, с этой заготовки.Товарищи, поделитесь сниппетом по распаршиванию домена на все урлы.
Он точно когда то был тут, но сейчас не могу найти. Я еще на его основе делел парсер емейлов со всех страниц сайта. Свой парсер тоже где-то протерял давным давно =)
Суть сниппета - заходим на домен и распаршиваем все ссылки с морды, вторая итеррация - распаршиваем распаршенные ссылки и так n-е количество раз. Все это было в несколько строчек кода на запросах. Спасибо
Возможно, но тут много возможных условий, как и решений. Самое простое, если он привязан к файлу и надо, чтобы каждый день в 00:00 очищался, то можно сделать отдельный шаблон и поставить его на расписание. Отключить использование браузера, а внутри такой код:Нужен сниппет для очистки списка при наступлении новых суток. Возможно ли это сделать?
lock(SyncObjects.ListSyncer){
project.Lists["список для очистки"].Clear();
}
А, если количество потоков ограничено версией стандарт, то как можно сделать?Возможно, но тут много возможных условий, как и решений. Самое простое, если он привязан к файлу и надо, чтобы каждый день в 00:00 очищался, то можно сделать отдельный шаблон и поставить его на расписание. Отключить использование браузера, а внутри такой код:
C#:lock(SyncObjects.ListSyncer){ project.Lists["список для очистки"].Clear(); }
1. купить проА, если количество потоков ограничено версией стандарт, то как можно сделать?
никак.Доброго дня!
Подскажите как из C# получить текст WARNINGa выводимого в лог?
project.GetLastError() не подходи, так как туда записывается ошибка приведшая к завершению проекта, а нужно получить предупреждения которые не привели к завершению проекта.
В основном для анализа и принятия решения что скрипту делать дальше. В каких-то случаях не загружается профиль, в каких-то не находится искомый текст. Так то процесс выглядит следующим образом; не нашел один текст, записал в переменную отметку что не нашел, записал в лог или базу что не нашел, пошел искать другой. Если бы была системная переменная в которой уже содержится текст варнинга, то пункт "записал в переменную отметку что не нашел" можно было бы исключить из схемы.цель какая ?
для этого есть переменные и ветвление логики. есть проверки по тексту, по регулярке, поиск по списку и в у каждого есть выход по красной линии. логика в скрипте должна выстраиваться так что скрипт однозначно понимал в каком состоянии он находится и всегда знал что он выводит в лог, а не пытался угадать уже постфактум, что же пошло не так. загрузка профиля тоже генерирует выход по красной линии при ошибке загрузки.В основном для анализа и принятия решения что скрипту делать дальше. В каких-то случаях не загружается профиль, в каких-то не находится искомый текст. Так то процесс выглядит следующим образом; не нашел один текст, записал в переменную отметку что не нашел, записал в лог или базу что не нашел, пошел искать другой. Если бы была системная переменная в которой уже содержится текст варнинга, то пункт "записал в переменную отметку что не нашел" можно было бы исключить из схемы.
if(DateTime.TryParse(project.Variables["time_t"].Value, out DateTime ts)){
if (ts.AddMinutes(7) - DateTime.Now < TimeSpan.Zero){
throw new Exception("прошло более 7 минут");
}
}
else throw new Exception("Не удалось распознать дату в переменной 'time_t'");
project.Variables["time_s"].Value = (ts.AddMinutes(7) - DateTime.Now).ToString(); вставьте это между 2 и 3 строками. Переменная time_s должна существовать или замените имя на свою.Большое спасибо, работает!
У меня выход по красной ветке, попадает на другую логику.
Если превышение заданных 7минут меньше 1 минуты, то шаблон выполняется по зеленой ветке, если более 1 минуты, то по красной.
У меня просьба, как ts.AddMinutes(7) - DateTime.Now первести в переменную, чтобы иметь возможность сравнить его с заданным значением (1минутой)?
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;
IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, numbers);
Так?Есть снипет который гинерирует числа от X до X
Например в переменной numb_start = 1
numb_max = 5
На выходе получим в переменную результат
1
2
3
4
5
Как перед цифрой добавить свой текст ? Не знаю как править снипет
C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); int i = 1; IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0); return string.Join(Environment.NewLine, numbers);
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
int i = 1;
string text = project.Variables["ИмяПеременной с текстов"].Value;
IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0);
return string.Join(Environment.NewLine, text +"_"+ numbers);
Так?
C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); int i = 1; string text = project.Variables["ИмяПеременной с текстов"].Value; IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0); return string.Join(Environment.NewLine, text +"_"+ numbers);
Вот такое результат в переменное отдается, не то )Так?
C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); int i = 1; string text = project.Variables["ИмяПеременной с текстов"].Value; IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0); return string.Join(Environment.NewLine, text +"_"+ numbers);
Есть снипет который гинерирует числа от X до X
Например в переменной numb_start = 1
numb_max = 5
На выходе получим в переменную результат
1
2
3
4
5
Как перед цифрой добавить свой текст ? Не знаю как править снипет
C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); int i = 1; IEnumerable<int> numbers = Enumerable.Range(start, max - start + 1).Where(x => x % i == 0); return string.Join(Environment.NewLine, numbers);
return string.Join("\n", Enumerable.Range(1, 5).ToList().Select(x => "Слоово " + x));
Вот такое результат в переменное отдается, не то )
test_System.Linq.Enumerable+WhereEnumerableIterator`1[System.Int32]
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;
while (start <= max)
{
// Складируем числа в список
SpisokChisel.Add(Convert.ToString(text +"_"+ start));
// +1 К цифре
start++;
}
return string.Join("\n", SpisokChisel);
Почти так как нужно, но еще момент, что результат в переменной должен быть не в одну строку, а с новой.C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); // Временны список для чисел List<string> SpisokChisel = new List<string>(); string text = project.Variables["ИмяПеременной с текстов"].Value; while (start <= max) { // Складируем числа в список SpisokChisel.Add(Convert.ToString(text +"_"+ start)); // +1 К цифре start++; } return string.Join("\n", SpisokChisel);
Почти так как нужно, но еще момент, что результат в переменной должен быть не в одну строку, а с новой.
Например
test1
test2
test3
а сейчас так
test1test2test3
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;
while (start <= max)
{
// Складируем числа в список
SpisokChisel.Add(Convert.ToString(text +"_"+ start));
// +1 К цифре
start++;
}
project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel);
return string.Join("\n", SpisokChisel);
Огонь , вы настоящий гуру в C#C#:int start = int.Parse(project.Variables["numb_start"].Value); int max = int.Parse(project.Variables["numb_max"].Value); // Временны список для чисел List<string> SpisokChisel = new List<string>(); string text = project.Variables["ИмяПеременной с текстов"].Value; while (start <= max) { // Складируем числа в список SpisokChisel.Add(Convert.ToString(text +"_"+ start)); // +1 К цифре start++; } project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel); return string.Join("\n", SpisokChisel);
Огонь , вы настоящий гуру в C#
Жаль я сразу не сказал как нужно, вынужден опять дополнить:
на выходе получаю как и просил
test1
test2
test3
пожалуйста, еще один вариант, чтобы на выходе было
test1.domain.ru
test2.domain.ru
test3.domain.ru
int start = int.Parse(project.Variables["numb_start"].Value);
int max = int.Parse(project.Variables["numb_max"].Value);
// Временны список для чисел
List<string> SpisokChisel = new List<string>();
string text = project.Variables["ИмяПеременной с текстов"].Value;
while (start <= max)
{
// Складируем числа в список
SpisokChisel.Add(Convert.ToString("test" + start +".domain.ru"));
// +1 К цифре
start++;
}
project.Variables["ИмяПеременнойКудаВыгрузить"].Value = string.Join("\r\n", SpisokChisel);
return string.Join("\n", SpisokChisel);
return System.IO.Directory.GetFiles(project.Variables["path_Save_Text_Dir"].Value,"*.txt").Length;
У меня есть снипет, который получает количество txt файлов из папки заданной в переменной path_Save_Text_Dir
Нужно подправить, чтобы получить количество папок в основной папки.C#:return System.IO.Directory.GetFiles(project.Variables["path_Save_Text_Dir"].Value,"*.txt").Length;
return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
C#:return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
Логично кстати, только сейчас обратил внимание GetFiles и GetDirectories, спасибо дружищеC#:return System.IO.Directory.GetDirectories(project.Variables["path_Save_Text_Dir"].Value).Length;
var fs = Helper.GetFotoService().service;
//var list = project.Lists["list"];
var list = Directory.GetFiles(@"D:\ML\repos\","*.jpg");
foreach (var f in list)
{
var answer = fs.CheckFoto(@f);
var fname = Path.GetFileName(f);
project.SendInfoToLog(
fname+" "+
answer.Name + ":" + answer.Score
);
}
в выводе будет к примеру 12 строк, каждую строку положить в свою переменную( img1,img2,img3...img12)
var fs = Helper.GetFotoService().service;
//var list = project.Lists["list"];
var list = Directory.GetFiles(@"D:\ML\repos\","*.jpg");
string vParamName = "img"; // Название переменной
int i = 0; // Счетчик
foreach (var f in list)
{
var answer = fs.CheckFoto(@f);
var fname = Path.GetFileName(f);
project.SendInfoToLog(
fname+" "+
answer.Name + ":" + answer.Score
);
//проверяем существование переменной, если нет то создаем новую
if (project.Variables.Keys.Contains(vParamName + i.ToString()))
{
project.SendInfoToLog("Переменная "+ vParamName + i.ToString() + " уже существует - присваиваем ей значение");
project.Variables[vParamName].Value = f;
} else
{
project.SendInfoToLog("Создаем переменную " + vParamName + i.ToString() + " и присваиваем ей значение");
object obj = project.Variables;
obj.GetType().GetMethod("QuickCreateVariable").Invoke(obj,new Object[]{vParamName + i.ToString()});
project.Variables[vParamName + i.ToString()].Value = fname;
}
i++;
}