• 25-02-2013, 15:42:46
    #1
    Merhabalar

    Biraz fazlaca soru sormak durumunda kalabilirim, baştan yardımcı olan herkese teşekkür ederim.

    Excel'de numara listesine sahibim. Bunların operatörlerini, yabancı ücretli servisleri kullanarak (captchayı aşarak) nts.gov.tr aracılığı ile öğrenmeyi planlıyorum.

    Bu konuda, access veritabanı ve listview kullanmayı düşünmüştüm ilk etapta. Fakat sonradan uğraşınca bilgimin buna yetmeyeceğine kanaat getirdim ve vazgeçtim. Şimdiki düşüncemi sizlere aktarayım, sizler eleştirin beni:

    Listbox'a numaraları aktarıp teker teker sorguladıktan sonra başka bir listbox'a operatörleri aynı sırayla atayım, ikinci sonuç listesini de excel'de numaraların yanındaki kolona kaydedeyim. Zaten ayda bir yapacağım bu işlemin sonucunda da misalen aveaları AVEA çalışma sayfasına (...) kaydederim, SMS göndereceğim operatörde de onları seçer gönderirim diye düşündüm. Sizler ne dersiniz ? Kıt bilgiyle, sadece araştırıp deneyerek bu dediklerimde başarılı olabilir miyim ?
  • 25-02-2013, 18:54:58
    #2
    ui kullanman gerekli değil ancak daha yavaşlatır sistemi. ui den kastım listbox mesela..

    bunun yerine numaraları çift boyutlu bir dizi ya da listte tutabilirsin bu daha kolay olur..
    mesela sortedlist için bir örnek yaptım.. hashtable da kullanabilirsin. sortedlist hem key i hem value yi alfabetik sıralıyor

     SortedList telefonNumaralari   = new SortedList();
                //Hashtable telefonNumaralari = new Hashtable();
    
    
                for (int i = 200; i < 300; i++)
                {
                    telefonNumaralari.Add(i, "Vodafone");
                }
    
    
                for (int i = 0; i < 100; i++)
                {
                    telefonNumaralari.Add(i, "Avea");
                }
    
                for (int i = 100; i < 200; i++)
                {
                    telefonNumaralari.Add(i, "Turkcell");
                }

    şimdi listeye ekleme olayı çok kolay aslında..

    telefonNumaralari.Add( dedikten sonra gireceğin değer senin key in oluyor. Her öğenin key i unique yani eşsiz olmalı. dolayısıyla aynı key e sahip başka bir öğe olmamalı. bir telefon numarası da sadece bir gsm operatorune bağlı olabileceği için key'imiz telefon numarası olacak.

    virgül koyup operator ismini yazıyoruz bu da bizim değerimiz..

    yani sen excelden döngü olarak çektiğinde

    for( ..........)
    {
    var numara = excelkayit[0][i];
    var operator = excelkayit[1][i];
    telefonNumalari.Add( numara, operator );
    
    }
    şeklinde telefonnumaralarını ekleyeceksin.
    bu ayrımı tamamladıktan sonra.. bunları yine excel dosyasında farklı sayfalarda saklamak istiyorsun sanırım.. o zaman da

    foreach (DictionaryEntry telefonNumarasi in telefonNumaralari)
                {
                    switch (telefonNumarasi.Value.ToString())
                    {
                        case "Avea":
                            ExcelAveaKaydet(telefonNumarasi.Key);
                            break;
                        case "Turkcell":
                            ExcelTurkcellKaydet(telefonNumarasi.Key);
                            break;
    
                        case "Vodafone":
    
                            ExcelVodefoneKaydet(telefonNumarasi.Key);
                            break;
                    }
    
                }
    bu şekil bir döngü ile tek tek Excel kaydetme metodlarını çağıracaksın ve parametre olarak onu telefon numarasi .key vereceksin yani telefon numarasını.. bu da ilgili çalışma sayfasına kaydedecek..

    excel yerine 3 tane operator için bir metin belgesi oluşturup ona da kaydedebilirsin bu daha kolay olur. Onlar için de FileStream ve StreamWriter sınıflarını kullancaksın..


    bilmiyorum anlattıklarım senin için ne kadar sıkntı verici olur ama takıldığın yerleri sorabilirsin.
  • 25-02-2013, 20:55:16
    #3
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    ui kullanman gerekli değil ancak daha yavaşlatır sistemi. ui den kastım listbox mesela..

    bunun yerine numaraları çift boyutlu bir dizi ya da listte tutabilirsin bu daha kolay olur..
    mesela sortedlist için bir örnek yaptım.. hashtable da kullanabilirsin. sortedlist hem key i hem value yi alfabetik sıralıyor

     SortedList telefonNumaralari   = new SortedList();
                //Hashtable telefonNumaralari = new Hashtable();
    
    
                for (int i = 200; i < 300; i++)
                {
                    telefonNumaralari.Add(i, "Vodafone");
                }
    
    
                for (int i = 0; i < 100; i++)
                {
                    telefonNumaralari.Add(i, "Avea");
                }
    
                for (int i = 100; i < 200; i++)
                {
                    telefonNumaralari.Add(i, "Turkcell");
                }

    şimdi listeye ekleme olayı çok kolay aslında..

    telefonNumaralari.Add( dedikten sonra gireceğin değer senin key in oluyor. Her öğenin key i unique yani eşsiz olmalı. dolayısıyla aynı key e sahip başka bir öğe olmamalı. bir telefon numarası da sadece bir gsm operatorune bağlı olabileceği için key'imiz telefon numarası olacak.

    virgül koyup operator ismini yazıyoruz bu da bizim değerimiz..

    yani sen excelden döngü olarak çektiğinde

    for( ..........)
    {
    var numara = excelkayit[0][i];
    var operator = excelkayit[1][i];
    telefonNumalari.Add( numara, operator );
    
    }
    şeklinde telefonnumaralarını ekleyeceksin.
    bu ayrımı tamamladıktan sonra.. bunları yine excel dosyasında farklı sayfalarda saklamak istiyorsun sanırım.. o zaman da

    foreach (DictionaryEntry telefonNumarasi in telefonNumaralari)
                {
                    switch (telefonNumarasi.Value.ToString())
                    {
                        case "Avea":
                            ExcelAveaKaydet(telefonNumarasi.Key);
                            break;
                        case "Turkcell":
                            ExcelTurkcellKaydet(telefonNumarasi.Key);
                            break;
    
                        case "Vodafone":
    
                            ExcelVodefoneKaydet(telefonNumarasi.Key);
                            break;
                    }
    
                }
    bu şekil bir döngü ile tek tek Excel kaydetme metodlarını çağıracaksın ve parametre olarak onu telefon numarasi .key vereceksin yani telefon numarasını.. bu da ilgili çalışma sayfasına kaydedecek..

    excel yerine 3 tane operator için bir metin belgesi oluşturup ona da kaydedebilirsin bu daha kolay olur. Onlar için de FileStream ve StreamWriter sınıflarını kullancaksın..


    bilmiyorum anlattıklarım senin için ne kadar sıkntı verici olur ama takıldığın yerleri sorabilirsin.
    Çok çok teşekkür ederim, bilmediğim çok şey söylemişsin üstadım. Onların hepsini öğrenip denedikten sonra tekrar yazacağım inşallah...
  • 22-04-2013, 17:25:25
    #4
    Tekrardan merhaba arkadaşlar,

    lstnumaralar adıyla oluşturduğum listbox ögesinin içindekileri, birer birer topnumara stringine tanımlamak istiyorum. Bulabildiğim bir örnek şu şekildeydi ancak işe yaramıyor maalesef...

    string topnumara = "lstnumaralar.Items[sayi - 1]";

    24 saate yaklaştı, onlarca örnek denedim. Her birinde bir yerde takılıyorum, artık mantığım da duraklamaya başladı. Yardımlarınız için şimdiden çok teşekkür ederim...

    private void toplusorgula_Click(object sender, EventArgs e)
            {
                try
                {
                    pbDurum.Minimum = 0;
                    pbDurum.Maximum = lstnumaralar.Items.Count;
                    tmrZaman.Start();
                }
                catch
                {
                    MessageBox.Show("Toplu sorgulamada sorun oluştu.");
                }
            }
    
            private void tmrZaman_Tick_1(object sender, EventArgs e)
            {
                for (int sayi = 0; sayi <= lstnumaralar.Items.Count; sayi++)
                {
                    if (sayi < lstnumaralar.Items.Count)
                    {
                        pbDurum.Value = sayi;
                        Thread.Sleep(2000);
    
                        if (webBrowser1.ReadyState == WebBrowserReadyState.Complete)
                        {
                           
                            string topnumara = "lstnumaralar.Items[sayi - 1]";
                            **** işlemler ****
                        }
    
                        else
                        {
                            label11.Text = ("Daha yüklenmedi.");
                            this.label11.Visible = true;
                            Application.DoEvents();
                            Thread.Sleep(3000);
                            button1.PerformClick();
                        }
                    }
                    else
                    {
                        sayi = 0;
                        tmrZaman.Stop();
                        MessageBox.Show("Sorgulama bitti !");
                        pbDurum.Value = sayi;
                    }
    
                }
            }
  • 22-04-2013, 18:44:38
    #5
    şuan detaylıca yardımcı olamıyorum bazı sebeplerden dolayı. ancak 2-3 güne bakbilirm eğer çözüm bulamadıysanız.. yanlız gözüme çarpan şu oldu

    string topnumara = "lstnumaralar.Items[sayi - 1]";

    burada " " tırnak ifadelerini kaldırıp deneyin.. topnumara o zaman lstnumaralardan değer alır..
  • 23-04-2013, 01:41:59
    #6
    Üstadım, dediğinizi yapıp birkaç değişiklikle becerdim sanırım, -1'in mantığını tam anlayamasam da hata verdiği için kaldırdım ancak ilk numarayı sorguladıktan sonra "Nesne başvurusu bir nesnenin örneğine ayarlanmadı." hatası veriyor, aşağıdaki 2.satırda...

    string topnumara = lstnumaralar.Items[sayi].ToString();
    webBrowser1.Document.GetElementById("tel").InnerTe xt = topnumara;
  • 23-04-2013, 03:02:49
    #7
    tel id li nesne yok demektir webbrowserda. onunla ilgil bir try catch bloğu koyabilrsin
  • 23-04-2013, 13:22:00
    #8
    bu arada thread sleep kullanmanın bi yararını göremedim ben, boşa sıkıntı yaratır. + olarak browserdaki nesnenin özelliklerini koyarsan, nasıl değer yazdırabileceğini söyleyebiliriz
  • 23-04-2013, 21:07:31
    #9
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    tel id li nesne yok demektir webbrowserda. onunla ilgil bir try catch bloğu koyabilrsin
    Ama ilk numarayı normal şekilde sorguluyor üstadım, 2.numaraya geçince bu hatayı veriyor. Ama acaba sorguladıktan sonra ekrana dönemeden tekrar mı sorgulamaya çalışıyor acaba, bir bakayım. browser'da işlem yaptırdıktan sonra yüklenene kadar bekletmek çok sıkıntılı bir işmiş hakikaten..

    VoyL adlı üyeden alıntı: mesajı görüntüle
    bu arada thread sleep kullanmanın bi yararını göremedim ben, boşa sıkıntı yaratır. + olarak browserdaki nesnenin özelliklerini koyarsan, nasıl değer yazdırabileceğini söyleyebiliriz
    sleep'leri işlem yaptırdıktan sonra sayfa yüklenene kadar beklesin diye düşünerek koymuştum, tarayıcının da donduğunu düşünmedim tabi

    numara sorgulama (nokta) net adresinden numarayı sorgulatıp operatörünü almaya çalışıyorum, buna göre sms listemi düzenleyip el yordamı bir şeyler yapacağım inşallah, www.onunizinde.com için.