Как пронумеровать строки?

Dendi

Client
Регистрация
20.11.2018
Сообщения
166
Благодарностей
11
Баллы
18
Здравствуйте
Ситуация следующая:


Записывается все нормально, но 1 столбец с номером, как туда записывать нумерацию?


Далее, при выполнении шаблона, временами с самого последнего кубика, процесс скидывается обратно на кубик с GET запросом. С чем это связано? Я думаю это из-за того, что файл еще не успел скачаться, и соответственно нет названия файла для заполнения таблицы, поэтому он возвращается, ожидая пока скачается файл. Правильно?


Исходя из этого, если по некоторым ссылкам не будет файла, и нечего записывать в таблицу, как быть?

Также вопрос по многопоточности. При запуске в многопоточном режиме, я так понимаю будет очередь. Как от этой очереди избавиться?
 

Вложения

  • 31,1 КБ Просмотры: 70

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 786
Благодарностей
2 450
Баллы
113
Вот код, который решает Вашу задачу в многопотоке (1 поток обрабатывает 1 ссылку из списка)
В шаблоне должен быть список с именем list в котором должны быть ссылки
В шаблоне должна быть таблица с именем tb в которую будет складываться результат
C#:
string path = Path.Combine(project.Directory, "temp"); // Создали путь для хранения файлов
if(!Directory.Exists(path)) Directory.CreateDirectory(path); // создадим папку, если её нет

IZennoList list = project.Lists["list"]; // Взяли список
IZennoTable tb = project.Tables["tb"]; // Взяли таблицу

list.Add("https://secure.gravatar.com/avatar/e99d23576ffbf57c17b554963d24e0f3?s=255"); // демо данные - удалить

string url = string.Empty; // Создали переменную в которую положим ссылку
lock(SyncObjects.ListSyncer){ // Заблокировали строки для многопотока
    if(list.Count > 0) { // Если список содержит строки
        url = list.GetItem("0", true); // Взяли первую строчку с удалением
    }   
}

// Если ссылка пустая - выходим по ошибке
if(string.IsNullOrEmpty(url)) throw new Exception("url из списка не получен");

// Качаем файл
string get = string.Empty;
try { get = ZennoPoster.HttpGet( url: url, respType: ZennoLab.InterfacesLibrary.Enums.Http.ResponceType.File, DownloadPath: path); }
catch { get = string.Empty; }

if(!string.IsNullOrEmpty(get)){ // Если файл скачан
    lock(SyncObjects.TableSyncer){ // Блокируем таблицу для многопотока
        tb.AddRow(new[]{url, DateTime.Now.ToString(), get}); // Добавим url, time, путь к файлу в табилцу
    }
}
else {
    lock(SyncObjects.ListSyncer){ // Заблокировали строки для многопотока
        list.Add(url); // Вернули ссылку обратно в список
    }
}
Записывается все нормально, но 1 столбец с номером, как туда записывать нумерацию?
Отключить в настройках таблицы заголовки (в свойствах таблицы снять галочку).
80812


Исходя из этого, если по некоторым ссылкам не будет файла, и нечего записывать в таблицу, как быть?
Проверят, если в переменной ничего нет - тогда не записывать в таблицу ничего, а возвращать ссылку обратно в список.

Я думаю это из-за того, что файл еще не успел скачаться, и соответственно нет названия файла для заполнения таблицы, поэтому он возвращается, ожидая пока скачается файл. Правильно?
Не правильно, Зеннопостер сам никуда не возвращается и ничего не ожидает, если ему явно это не указывать (стрелочкой с одного кубика на другой).

Далее, при выполнении шаблона, временами с самого последнего кубика, процесс скидывается обратно на кубик с GET запросом. С чем это связано?
Такого поведения в Зенно нет. С чего сделан такой вывод? Скриншот выполнения шаблона предоставьте, чтобы было видно, что сначала дошло до конца, а потом выполнился кубик GET сам по себе, без выполнения предыдущих действий.
 
Последнее редактирование:
  • Спасибо
Реакции: DevOps, Ysocnet и Dendi

Dendi

Client
Регистрация
20.11.2018
Сообщения
166
Благодарностей
11
Баллы
18
Спасибо за код. Можно ли решить ситуацию с многопоточностью без c# кода?

По поводу нумерации решил сам. Я хотел банально записывать самому нумерацию.
 

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