نمایش نتایج 1 تا 4 از 4

نام تاپیک: نوشتن یک کد به صورت بازگشتی

  1. #1

    نوشتن یک کد به صورت بازگشتی

    سلام ، دوستان من میخوام که یه خزنده درست کنم ، تا همه لینک های یک سایت رو بدست بیارم . کدی که پایین می بینید لینک های صفحه اول رو برمی گردونه




    string filename = "myFile.txt";
    if (System.IO.File.Exists(filename))
    System.IO.File.Delete(filename);

    ListBox listBox1 = new ListBox();
    List<string> s = new List<string>();
    s = showlinks(textBox1.Text);

    for (int i = 0; i <= s.Count - 1; i++)
    {

    Boolean shart = false;
    if (s[i].ToString().Contains(".pdf") || s[i].ToString().Contains(".jpg") || s[i].ToString().Contains(".png") ||
    s[i].ToString().Contains(".bmp") || s[i].ToString().Contains(".css") || s[i].ToString().Contains(".js") ||
    s[i].ToString().Contains(".gif")|| s[i].ToString().Contains(".swf"))
    shart = true;




    if (!string.IsNullOrEmpty(s[i].ToString()) && s[i].ToString().Contains(textBox2.Text) && shart==false )
    {
    listBox1.Items.Add(s[i].ToString());

    using (StreamWriter w = File.AppendText(filename))
    {

    w.WriteLine(s[i].ToString());
    }

    }

    }






    s.Clear();




    همونطور که تو کد می بینید لینک های صفحه اول به لیست باکس یک اضافه میشن ، من برای اینکه از هر لینک ، لینک های فرزند هم بدست بیاد این کد رو در ادامه کد بالا نوشتم
    ولی برنامه هنگید


    for (int i = 0; i <= listBox1.Items.Count-1; i++)
    {
    s.Clear();
    s = showlinks(listBox1.Items[i].ToString());
    Boolean shart = false;

    if (s[i].ToString().Contains(".pdf") || s[i].ToString().Contains(".jpg") || s[i].ToString().Contains(".png") ||
    s[i].ToString().Contains(".bmp") || s[i].ToString().Contains(".css") || s[i].ToString().Contains(".js") ||
    s[i].ToString().Contains(".gif") || s[i].ToString().Contains(".swf"))
    shart = true;

    string line;

    // Read the file and display it line by line.
    System.IO.StreamReader file =
    new System.IO.StreamReader(filename);
    while ((line = file.ReadLine()) != null)
    {

    if (s[i].ToString() == line)
    shart = true;
    }

    file.Close();
    if (!string.IsNullOrEmpty(s[i].ToString()) && s[i].ToString().Contains(textBox2.Text) && shart == false)
    { // begin if

    listBox1.Items.Add(s[i].ToString());
    using (StreamWriter w = File.AppendText(filename))
    {

    w.WriteLine(s[i].ToString());
    }



    }// end if

    listBox1.Items.Remove(s[i].ToString());




    }



  2. #2
    کاربر دائمی آواتار golbafan
    تاریخ عضویت
    اردیبهشت 1388
    محل زندگی
    در قلب دوستان
    پست
    2,018

    نقل قول: نوشتن یک کد به صورت بازگشتی

    سلام
    در لینک یک سورس کد برای اسکن کردن وب سایتها هست
    امیدوارم مفید باشه

    http://www.codeproject.com/Articles/43056/Link-Scanner

    همچنین در پکیج زیر امکانات لازم برای این موضوع قرار داره که بسیار مفیده:
    http://htmlagilitypack.codeplex.com/

    این هم مثال خوبی با htmlagilitypack
    http://stackoverflow.com/questions/1...-from-web-page

  3. #3

    نقل قول: نوشتن یک کد به صورت بازگشتی

    @golbafan ممنون از لطف اتون ، اما مثالهایی که شما معرفی کردین لینک صفحه رو بدست میاره ، من با این موضوع مشکلی ندارم ، مساله اینجاس که وقتی لینک صفحه های اول بدست اومد ، باید از طریق اونا لینک صفحه های دیگه هم بدست بیاد ، من لینک های صفحه اول رو بدست اوردم (منظورم کد بالاس ) ، ولی باید یه راهی پیدا کنم که این کار به صورت بازگشتی برای لینک های
    صفحات دیگر هم صورت بگیره

  4. #4

    نقل قول: نوشتن یک کد به صورت بازگشتی

    سلام
    راستش الان نصفه شبه یا بهتره بگیم اول صبحه خستم حوصله خوندن کد هارو ندارم اما کاری که باید انجام بشه مشخصه شما اگه کدی رو که لینک های یک صفحه رو در میاره به صورت یه تابع در بیارین که ورودی لینک بگیره خروجی یک لیست از لینک ها تحویل بده یه همچین چیزی (با note pad نوشتم اگه اررور داد خودتون اصلاح کنید)

    public List<string> GetAllLinksFromLink(string text1, string text2)
    {
    List<string> s = new List<string>();
    s = showlinks(text1);

    for (int i = 0; i <= s.Count - 1; i++)
    {

    if (s[i].ToString().Contains(".pdf") || s[i].ToString().Contains(".jpg") || s[i].ToString().Contains(".png") ||
    s[i].ToString().Contains(".bmp") || s[i].ToString().Contains(".css") || s[i].ToString().Contains(".js") ||
    s[i].ToString().Contains(".gif")|| s[i].ToString().Contains(".swf"))
    s.RemoveAt(i);
    else if (string.IsNullOrEmpty(s[i].ToString()) || !s[i].ToString().Contains(text2))
    s.RemoveAt(i);
    }
    return s;

    }

    بعد کد برنامه رو اینطوری بنویسید:

    List<string> main = new List<string>();
    List<string> subTemp = new List<string>();
    main = GetAllLinksFromLink(textBox1.Text,textBox2.Text);
    int mainMax = main.Count;
    for (int i = 0; i <= mainMax - 1; i++)
    {
    subTemp = GetAllLinksFromLink(main[i]);
    main.AddRange(subTemp);
    subTemp.Clear();
    }
    //hala age dorost bashe bayad hame link ha to list main bashe


    اینطوری مقدار زیادی تو استفاده از منابعتون صرفه جویی میشه اما اگه تعداد لینکا زیاده اصولیش اینه که این عملیات توی یک thread دیگه انجام بشه تا برنامه هنگ نکنه

تاپیک های مشابه

  1. طریقه نوشتن select به صورت بازگشتی
    نوشته شده توسط iekrang در بخش T-SQL
    پاسخ: 5
    آخرین پست: پنج شنبه 07 مهر 1390, 16:06 عصر
  2. نوشتن در فایل به صورت باینری
    نوشته شده توسط mortez maya در بخش برنامه نویسی با زبان C و ++C
    پاسخ: 22
    آخرین پست: سه شنبه 03 بهمن 1385, 13:24 عصر
  3. کمک برای محاسبه فاکتوریل به صورت بازگشتی
    نوشته شده توسط amir_pro در بخش برنامه نویسی اسمبلی خانواده x86
    پاسخ: 4
    آخرین پست: جمعه 22 دی 1385, 18:18 عصر
  4. نوشتن یک برنامه به صورت سرویس ویندوز
    نوشته شده توسط abbas8786 در بخش برنامه نویسی در 6 VB
    پاسخ: 0
    آخرین پست: شنبه 29 مهر 1385, 07:52 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •