переменная в пути c#

kugukaa

Client
Регистрация
29.12.2013
Сообщения
37
Благодарностей
6
Баллы
8
Добрый день!
Есть код c#,

var subdir = System.IO.Directory.GetDirectories(@"{-Project.Directory-}{-Variable.numbers-}\1\");
for(int i=0;i<subdir.Length;i++)
{
project.Lists["folders_list"].Add(subdir);
}

В PM код отрабатывает без проблем, а при запуске в ZP выдает ошибку
Выполнение действия CSharp OwnCode Не удалось найти часть пути "C:\3\ZennoPoster\1"."

{-Project.Directory-}=C:\3\ZennoPoster\
{-Variable.numbers-}=5

Т.е. PM в пути к папке видит переменную {-Project.Directory-}, но отказывается видеть {-Variable.numbers-}.
С чем это может быть связано?
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
А вы пробовали ради теста прописать ручками полный адрес в коде? так работает?
 

kugukaa

Client
Регистрация
29.12.2013
Сообщения
37
Благодарностей
6
Баллы
8
Да, вручную работает. Пробовал даже комбинировать, {-Project.Directory-} прописывал руками, {-Variable.numbers-} оставлял как переменную. Не помогает.
{-Variable.numbers-} значение присваивается нормально в ходе выполнения проекта.
 

Lexicon

Client
Регистрация
27.12.2012
Сообщения
1 775
Благодарностей
901
Баллы
113
ну так не бывает))) значит в переменной что то не то что хочет проект увидеть)))
и есть у меня подозрение что там он видит просто тип переменной, попробуйте так
Код:
var subdir = System.IO.Directory.GetDirectories(project.Directory+"\\"+project.Variables["numbers"].Value+"\\1\\");
for(int i=0;i<subdir.Length;i++)
{
project.Lists["folders_list"].Add(subdir);
}
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Все верно. Стандартные макросы в коде не работают.
Для значения переменной используется project.Variables["var"].Value
 

kugukaa

Client
Регистрация
29.12.2013
Сообщения
37
Благодарностей
6
Баллы
8
ну так не бывает))) значит в переменной что то не то что хочет проект увидеть)))
и есть у меня подозрение что там он видит просто тип переменной, попробуйте так
Код:
var subdir = System.IO.Directory.GetDirectories(project.Directory+"\\"+project.Variables["numbers"].Value+"\\1\\");
for(int i=0;i<subdir.Length;i++)
{
project.Lists["folders_list"].Add(subdir);
}
Спасибо откликнувшимся! Попробовал новый код.
Высыпало эти ошибки:
"Наиболее подходящий перегруженный метод для "System.Collections.Generic.ICollection<string>.Add(string)" имеет несколько недопустимых аргументов". [Строка: 4; Cтолбец: 1]
"Аргумент "1": преобразование типа из "string[]" в "string" невозможно". [Строка: 4; Cтолбец: 35]

Как с ними бороться?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 715
Баллы
113
Код:
project.Lists["folders_list"].Add(subdir[i]);
 

kugukaa

Client
Регистрация
29.12.2013
Сообщения
37
Благодарностей
6
Баллы
8
Все заработало! Спасибо огромное!
 

kyvour

Активный пользователь
Регистрация
17.05.2014
Сообщения
186
Благодарностей
36
Баллы
28
Кстати в с-шарпе есть соответствующая переменная для разделителя директорий - System.IO.Path.DirectorySeparatorChar. Но при ее использовании могут возникнуть проблемы с преобразованием типов (да и длинная она очень). Поэтому у себя сделал так:
Код:
string DS = System.IO.Path.DirectorySeparatorChar.ToString(); //здесь преобразуем разделитель в строковый тип, вместо символьного
string[] p = {
    project.Directory,
    "logs",
    System.IO.Path.GetFileNameWithoutExtension(project.Variables["comments_file"].Value),
    System.IO.Path.GetFileNameWithoutExtension(project.Variables["links_file"].Value),
}; // здесь делаем массив с имен папок, начиная с папки проекта и внутрь сколько нужно
string logs_path = System.IO.Path.Combine(p)+DS; // здесь с помощью с-шарпа делаем из массива полноценный путь к папке (причем я добавил в конец разделитель категорий)
В результате получается путь вроде такого путь_к_проекту_zenno\logs\название_файла_с_комментариями\название_вайла_со_ссылками\
Также заметил, что переменная project.Directory уже содержит разделитель (слеш) в конце, так что после этой переменной вставлеть слеш не надо

З.Ы. Может быть будет кому полезно...
 
  • Спасибо
Реакции: Sanekk и kugukaa

rotkiv

Client
Регистрация
27.04.2015
Сообщения
35
Благодарностей
3
Баллы
8
Та же проблема помогите что не так
В PM код отрабатывает без проблем, а при запуске в ZP выдает ошибку
Выполнение действия CSharp OwnCode Не удалось найти часть пути "C:\Program Files (x86)\ZennoLab\ZennoPoster Pro\Progs\{-Project.Directory-}".


Код:
//1. блок парсинга раздела
//прочитать настройки (с какой страницы начинать)
string strSectionUrl = project.Variables["cfg_start_url"].Value;
//привязаться к местам сохранения данных
IZennoTable tblResult = project.Tables["tbl_result"];

//перейти на начальную страницу
Tab Tab1 = instance.ActiveTab;
Tab1.Navigate(strSectionUrl);
Tab1.WaitDownloading();

for (int i=0; i<724;i++)
{
//выделил таблицу
HtmlElementCollection colProduct = Tab1.FindElementsByXPath("//tr[@class='zoom']");

    foreach(HtmlElement elProduct in colProduct.Elements) {
        //1 Картинка //tr[@class='zoom']/td[1] или /td[@style='none']
        //2 Код //tr[@class='zoom']/td[2] или //tr[@class='zoom']/td/i
        string strProductKod = elProduct.FindChildByXPath("./td[2]", 0).GetAttribute("innertext");
        //3 Тип запчасти //tr[@class='zoom']/td[3] или
        string strProductTip = elProduct.FindChildByXPath("./td[3]", 0).GetAttribute("innertext");
        //4 Артикул //tr[@class='zoom']/td[4] или //tr[@class='zoom']/td/div/a[@class='dashed']
        string strProductArti = elProduct.FindChildByXPath("./td[4]", 0).GetAttribute("innertext");
        //5 Цена //tr[@class='zoom']/td[5] или //tr[@class='zoom']/td/span[@class='totalPrice']
        string strProductCena = elProduct.FindChildByXPath("./td[5]", 0).GetAttribute("innertext");
        //6 Количество //tr[@class='zoom']/td[6] или //tr[@class='zoom']/td/span[@class='inStock']
        string strProductKol = elProduct.FindChildByXPath("./td[6]", 0).GetAttribute("innertext");
        //7 Фирма //tr[@class='zoom']/td[8] или //tr[@class='zoom']/td/b
        string strProductFirm = elProduct.FindChildByXPath("./td[7]", 0).GetAttribute("innertext");
        //9 OE //tr[@class='zoom']/td[9] или //tr[@class='zoom']/td/div[@title]
        string strProductOem = elProduct.FindChildByXPath("./td[9]", 0).GetAttribute("innertext");
        //10 Примечание 1 //tr[@class='zoom']/td[10] или //tr[@class='zoom']/td[@class='td_cut'][1]
        string strProductPri1 = elProduct.FindChildByXPath("./td[10]", 0).GetAttribute("innertext");
        //11 Примечание 2 //tr[@class='zoom']/td[11] или //tr[@class='zoom']/td[@class='td_cut'][2]
        string strProductPri2 = elProduct.FindChildByXPath("./td[11]", 0).GetAttribute("innertext");
        //12 Авто //tr[@class='zoom']/td[12] или //tr[@class='zoom']/td[12]
        string strProductAvto = elProduct.FindChildByXPath("./td[12]", 0).GetAttribute("innertext");
       
// Примечание 1+2 //tr[@class='zoom']/td[@class='td_cut']
// сколько страниц  a[@class='no_underline'][number(text())>100]
       
            tblResult.AddRow(new String[]{strProductAvto, strProductFirm, strProductArti, strProductOem,
                strProductTip, strProductKol, strProductCena, strProductPri1, strProductPri2, strProductKod});
        }
   
    Tab1.FindElementByXPath("//a[@id='nxt']", 0).Click();
    Tab1.WaitDownloading();
}
 

ZHAG

Client
Регистрация
01.05.2014
Сообщения
228
Благодарностей
220
Баллы
43
Та же проблема помогите что не так
В PM код отрабатывает без проблем, а при запуске в ZP выдает ошибку
В этом сниппете нет ошибок, возможно ты скопировал не с того снипета код?
 
  • Спасибо
Реакции: rotkiv

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
Та же проблема помогите что не так
В PM код отрабатывает без проблем, а при запуске в ZP выдает ошибку
Выполнение действия CSharp OwnCode Не удалось найти часть пути "C:\Program Files (x86)\ZennoLab\ZennoPoster Pro\Progs\{-Project.Directory-}".


Код:
//1. блок парсинга раздела
//прочитать настройки (с какой страницы начинать)
string strSectionUrl = project.Variables["cfg_start_url"].Value;
//привязаться к местам сохранения данных
IZennoTable tblResult = project.Tables["tbl_result"];

//перейти на начальную страницу
Tab Tab1 = instance.ActiveTab;
Tab1.Navigate(strSectionUrl);
Tab1.WaitDownloading();

for (int i=0; i<724;i++)
{
//выделил таблицу
HtmlElementCollection colProduct = Tab1.FindElementsByXPath("//tr[@class='zoom']");

    foreach(HtmlElement elProduct in colProduct.Elements) {
        //1 Картинка //tr[@class='zoom']/td[1] или /td[@style='none']
        //2 Код //tr[@class='zoom']/td[2] или //tr[@class='zoom']/td/i
        string strProductKod = elProduct.FindChildByXPath("./td[2]", 0).GetAttribute("innertext");
        //3 Тип запчасти //tr[@class='zoom']/td[3] или
        string strProductTip = elProduct.FindChildByXPath("./td[3]", 0).GetAttribute("innertext");
        //4 Артикул //tr[@class='zoom']/td[4] или //tr[@class='zoom']/td/div/a[@class='dashed']
        string strProductArti = elProduct.FindChildByXPath("./td[4]", 0).GetAttribute("innertext");
        //5 Цена //tr[@class='zoom']/td[5] или //tr[@class='zoom']/td/span[@class='totalPrice']
        string strProductCena = elProduct.FindChildByXPath("./td[5]", 0).GetAttribute("innertext");
        //6 Количество //tr[@class='zoom']/td[6] или //tr[@class='zoom']/td/span[@class='inStock']
        string strProductKol = elProduct.FindChildByXPath("./td[6]", 0).GetAttribute("innertext");
        //7 Фирма //tr[@class='zoom']/td[8] или //tr[@class='zoom']/td/b
        string strProductFirm = elProduct.FindChildByXPath("./td[7]", 0).GetAttribute("innertext");
        //9 OE //tr[@class='zoom']/td[9] или //tr[@class='zoom']/td/div[@title]
        string strProductOem = elProduct.FindChildByXPath("./td[9]", 0).GetAttribute("innertext");
        //10 Примечание 1 //tr[@class='zoom']/td[10] или //tr[@class='zoom']/td[@class='td_cut'][1]
        string strProductPri1 = elProduct.FindChildByXPath("./td[10]", 0).GetAttribute("innertext");
        //11 Примечание 2 //tr[@class='zoom']/td[11] или //tr[@class='zoom']/td[@class='td_cut'][2]
        string strProductPri2 = elProduct.FindChildByXPath("./td[11]", 0).GetAttribute("innertext");
        //12 Авто //tr[@class='zoom']/td[12] или //tr[@class='zoom']/td[12]
        string strProductAvto = elProduct.FindChildByXPath("./td[12]", 0).GetAttribute("innertext");
      
// Примечание 1+2 //tr[@class='zoom']/td[@class='td_cut']
// сколько страниц  a[@class='no_underline'][number(text())>100]
      
            tblResult.AddRow(new String[]{strProductAvto, strProductFirm, strProductArti, strProductOem,
                strProductTip, strProductKol, strProductCena, strProductPri1, strProductPri2, strProductKod});
        }
  
    Tab1.FindElementByXPath("//a[@id='nxt']", 0).Click();
    Tab1.WaitDownloading();
}
У меня та же проблема, в проджектмейкере всё отлично отрабатывает, а вот в зеннопостере выходит ошибка, где вместо '{-Project.Directory-}{-Variable.DO-}\1.txt' пишет 'C:\Program Files (x86)\ZennoLab\RU\ZennoPoster Pro\5.17.1.0\Progs\{-Project.Directory-}{-Variable.DO-}\1.txt'
Помогите!
 

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