Код Выполняет именно то, что Вы описали. Проверьте свои списки. Возможно, там на момент выполнения кода лежат не те данные, от которых Вы ждете заказанный результат.
Посмотреть вложение 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++;
}


