Ошибка синтаксиса в C#

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
Привет, я учусь C#, посмотрите код пожалуйста, где ошибка, сам разобраться не могу


C#:
string db_host = project.Variables["db_server"].Value+":"+project.Variables["db_port"].Value;     // хост
string db_user = project.Variables["db_login"].Value;          // username для подключения к MySQL
string db_pswd = project.Variables["db_password"].Value;              // пароль для подключения к MySQL
string db_database = project.Variables["db_name"].Value;      // название БД с которой будет работа
string db_charset = "utf8";       // кодировка данных в таблицах
DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);

IZennoTable table = project.Tables["Страницы"];
//string parent = project.Variables["link"].Value;
table.ColSeparator = ";";
//Получаем текущу активную вкладку
Tab tab = instance.ActiveTab;
string url = tab.URL;
//Соберем все наши элементы используя "//div[starts-with(@data-id, 'model-')]" - xPath запрос. Будьте внимальны и используйте FindElementsByXPath.
HtmlElementCollection itemsCollection = tab.FindElementsByXPath("//span[contains(text(), 'Все видео')]/../../../div//a[contains(@href, \"/videos/\")]/../../../div");
//Лайфхак. Раскомментировать (Чтобы проверить, работает ли xPath) можно отправить в лог информацию о текущем количестве элементов в коллекции
//project.SendInfoToLog("Количество элементов на страничке = " + itemsCollection.Count().ToString(), true);//div[@id=\"page_category_main_column\"]//button/../../..//a

//начинаем перебирать сформированную коллекцию HtmlElement-ов
foreach(HtmlElement item in itemsCollection)
{
    //Обращаемся к каждому элементу, как к пездюку через точку.
    HtmlElement a = item.FindChildByXPath("./descendant::div//a", 1);
    HtmlElement likes = item.FindChildByXPath("/div", 2);
    /*HtmlElement priceFromItem = item.FindChildByXPath("./descendant::div[contains(@class, 'card__price')]", 0);
    HtmlElement priceToItem = item.FindChildByXPath("./descendant::div[contains(@class, 'card__subprice')]", 0);
    HtmlElement rateItem = item.FindChildByXPath("./descendant::div[@date-rate]", 0);
    HtmlElement itemOuterHtml = item;
  
    string link = new Regex("https://www\\.facebook\\.com(.*?/)*(?=\\?)").Match(a.OuterHtml).Value;
*/
    HtmlElement itemOuterHtml = item;
    string link = new Regex("(?<=href=\")/\\d+/videos/\\d+/(?=\")").Match(a.OuterHtml).Value;

  
    if (link != null && link != ""){
    string views = new Regex("(?<=Просмотры:\\ ).*?(?=</div>)").Match(item.OuterHtml).Value;
        if (views.Contains(",") == true)
        {    string counter1 = Macros.TextProcessing.Replace(views, "&nbsp;", "", "Text", "All");
                string counter2 = Macros.TextProcessing.Replace(counter1, "тыс.", "00", "Text", "All");
                   string counter3 = Macros.TextProcessing.Replace(counter2, ",", "", "Text", "All");
                      string counter4 = Macros.TextProcessing.Replace(counter3, "млн", "00000", "Text", "All");
        }

        string counter1 = Macros.TextProcessing.Replace(views, "&nbsp;", "", "Text", "All");
                string counter2 = Macros.TextProcessing.Replace(counter1, "тыс.", "000", "Text", "All");
                   string counter3 = Macros.TextProcessing.Replace(counter2, ",", "", "Text", "All");
                      string counter4 = Macros.TextProcessing.Replace(counter3, "млн", "000000", "Text", "All"); 
      
      
      
          
    string like = new Regex("(?<=Просмотры:\\ .*\\n).*?(?=\\n)").Match(likes.InnerText).Value;
    string counter11 = Macros.TextProcessing.Replace(like, "&nbsp;", "", "Text", "All");
    string counter22 = Macros.TextProcessing.Replace(counter11, "тыс.", "000", "Text", "All");
    string counter33 = Macros.TextProcessing.Replace(counter22, ",", "", "Text", "All");
    string counter44 = Macros.TextProcessing.Replace(counter33, "млн", "000000", "Text", "All");
    //string like = new Regex("\\d+").Match(item.InnerText).Value;
    table.AddRow(a.InnerText+";"+link+";"+counter4+";"+item.InnerText);
    //db.query("INSERT INTO `pages` (`name`, `link`, `category`, `likes`) VALUES ('"+a.InnerText+"', '"+link+"', '"+parent+"', '"+counter4+"');");
    }
    }

Компиляция кода Ошибка в действии "CS1003" "Syntax error, ',' expected". [Строка: 42; Cтолбец: 28]
Компиляция кода Ошибка в действии "CS1513" "} expected". [Строка: 58; Cтолбец: 2]
 
Последнее редактирование:

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
ещё вопрос по xpath, как взять первого потомка div[3]?

сейчас сделал так
HtmlElement likes = item.FindChildByXPath("/div", 2);

Берёт что-то не то
 

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
Нашёл ошибку, она была в другом кубике, но вопрос по xpath актуальный, а ещё есть вопрос по переменным
if (a = b){
string a = 1}
дальше код

за пределами скобок он не видит эту переменную, почему? и как сделать чтобы видел?
 

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
В моём случае вот так, если без добавления в таблицу - срабатывает нормально, но если пытаюсь добавить в таблицу, говорит что переменная views не существует

C#:
string db_host = project.Variables["db_server"].Value+":"+project.Variables["db_port"].Value;     // хост


string db_user = project.Variables["db_login"].Value;          // username для подключения к MySQL


string db_pswd = project.Variables["db_password"].Value;              // пароль для подключения к MySQL


string db_database = project.Variables["db_name"].Value;      // название БД с которой будет работа


string db_charset = "utf8";       // кодировка данных в таблицах


DB db = new DB(db_host, db_user, db_pswd, db_database, db_charset);





IZennoTable table = project.Tables["Страницы"];


//string parent = project.Variables["link"].Value;


table.ColSeparator = ";";


//Получаем текущу активную вкладку


Tab tab = instance.ActiveTab;


string url = tab.URL;


string subcategory = project.Variables["categoryName"].Value;


string subcategory_id = project.Variables["category_id"].Value;


string pagelink = project.Variables["page_link"].Value;





//Соберем все наши элементы используя "//div[starts-with(@data-id, 'model-')]" - xPath запрос. Будьте внимальны и используйте FindElementsByXPath.


HtmlElementCollection itemsCollection = tab.FindElementsByXPath("//span[contains(text(), 'Все видео')]/../../../div//a[contains(@href, \"/videos/\")]/../../../div");


//Лайфхак. Раскомментировать (Чтобы проверить, работает ли xPath) можно отправить в лог информацию о текущем количестве элементов в коллекции


//project.SendInfoToLog("Количество элементов на страничке = " + itemsCollection.Count().ToString(), true);//div[@id=\"page_category_main_column\"]//button/../../..//a





//начинаем перебирать сформированную коллекцию HtmlElement-ов 


foreach(HtmlElement item in itemsCollection)


{


    //Обращаемся к каждому элементу, как к пездюку через точку.


    HtmlElement a = item.FindChildByXPath("./descendant::div//a", 1);


    HtmlElement likes = item.FindChildByXPath("/div", 2);


    /*HtmlElement priceFromItem = item.FindChildByXPath("./descendant::div[contains(@class, 'card__price')]", 0);


    HtmlElement priceToItem = item.FindChildByXPath("./descendant::div[contains(@class, 'card__subprice')]", 0);


    HtmlElement rateItem = item.FindChildByXPath("./descendant::div[@date-rate]", 0);


    HtmlElement itemOuterHtml = item;


    


    string link = new Regex("https://www\\.facebook\\.com(.*?/)*(?=\\?)").Match(a.OuterHtml).Value;


*/


    HtmlElement itemOuterHtml = item;


    string link = new Regex("(?<=href=\")/\\d+/videos/\\d+/(?=\")").Match(a.OuterHtml).Value;


    string n = ",";


    


    if (link != null && link != ""){


    string views1 = new Regex("(?<=Просмотры:\\ ).*?(?=</div>)").Match(item.OuterHtml).Value;


        


        bool b = views1.Contains(n);


        //if (views1.Contains(n) == true)


        if (b == true)


        {    string counter1 = Macros.TextProcessing.Replace(views1, "&nbsp;", "", "Text", "All");


                string counter2 = Macros.TextProcessing.Replace(counter1, "тыс.", "00", "Text", "All");


                   string counter3 = Macros.TextProcessing.Replace(counter2, ",", "", "Text", "All");


                      string views = Macros.TextProcessing.Replace(counter3, "млн", "00000", "Text", "All");


        project.SendInfoToLog("есть");


            project.SendInfoToLog(views);


        }





        else {


            string counter1 = Macros.TextProcessing.Replace(views1, "&nbsp;", "", "Text", "All");


                string counter2 = Macros.TextProcessing.Replace(counter1, "тыс.", "000", "Text", "All");


                   string counter3 = Macros.TextProcessing.Replace(counter2, ",", "", "Text", "All");


                      string views = Macros.TextProcessing.Replace(counter3, "млн", "000000", "Text", "All");    


    project.SendInfoToLog("нет");


            project.SendInfoToLog(views);


        }    


    


    string like1 = new Regex("(?<=Просмотры:\\ .*\\n).*?(?=\\n)").Match(likes.InnerText).Value;


    string counter11 = Macros.TextProcessing.Replace(like1, "&nbsp;", "", "Text", "All");


    string counter22 = Macros.TextProcessing.Replace(counter11, "тыс.", "000", "Text", "All");


    string counter33 = Macros.TextProcessing.Replace(counter22, ",", "", "Text", "All");


    string like = Macros.TextProcessing.Replace(counter33, "млн", "000000", "Text", "All");


        


 //   table.AddRow(a.InnerText+";"+link+";"+views+";"+item.InnerText);


        


    


    //db.query("INSERT INTO `pages` (`subcategory_id`, `subcategory`, `page`, `link`, `likes`, `views`, `title`) VALUES ('"+subcategory_id+"', '"+subcategory+"', '"+pagelink+"', '"+link+", '"+like+", '"+views+"' '"+a.InnerText+"');");


    }


    }
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 606
Благодарностей
4 597
Баллы
113
Нашёл ошибку, она была в другом кубике, но вопрос по xpath актуальный, а ещё есть вопрос по переменным
if (a = b){
string a = 1}
дальше код

за пределами скобок он не видит эту переменную, почему? и как сделать чтобы видел?
потому что так работает область видимости переменных в c#. Хочешь чтобы была доступна вне скобок - объяви переменную вне этих скобок
 
  • Спасибо
Реакции: Philipp

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
потому что так работает область видимости переменных в c#. Хочешь чтобы была доступна вне скобок - объяви переменную вне этих скобок
Если объявляю за скобками, то вот такие ошибки


Компиляция кода Ошибка в действии "CS0841" "Cannot use local variable 'views1' before it is declared". [Строка: 47; Cтолбец: 53]
Компиляция кода Ошибка в действии "CS0136" "A local or parameter named 'views1' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter". [Строка: 50; Cтолбец: 27]
Компиляция кода Ошибка в действии "CS0136" "A local or parameter named 'views' cannot be declared in this scope because that name is used in an enclosing local scope to define a local or parameter". [Строка: 59; Cтолбец: 27]

А как передать значение за пределы скобок?
 

Philipp

Client
Регистрация
14.10.2019
Сообщения
95
Благодарностей
38
Баллы
18
потому что так работает область видимости переменных в c#. Хочешь чтобы была доступна вне скобок - объяви переменную вне этих скобок
Спасибо, я понял, не нужно её ещё раз было объявлять внутри скобок, только присваивать значение
 

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