C#nedir?com Homepage
Forum Home Forum Home > C# / .NET > Visual C#
  New Posts New Posts RSS Feed - C# Decode Yardım
  FAQ FAQ  Forum Search   Events   Register Register  Login Login

C# Decode Yardım

 Post Reply Post Reply
   

Author
Message
omicron78 View Drop Down
Newbie
Newbie


Joined: 16 Eylül 2015
Status: Offline
Points: 3
Post Options Post Options   Thanks (0) Thanks(0)   Quote omicron78 Quote  Post ReplyReply Direct Link To This Post Topic: C# Decode Yardım
    Posted: 16 Eylül 2015 at 21:47
Merhaba arkadaşlar,

Steam'den ürün fiyatları çekip toplayan bir projem var. Fakat elimdeki source Rus Rublesine göre ayarlı.

Steam ürün fiyatlarını yayınlamak için bir api geliştirmiş.
Bu api istenilen her para birimiyle fiyat bilgisi verebiliyor.

Örneğin:

(Ruble)

(Dolar)


İlgili Source kodu:



Fiyat bilgisini çekiyor ve decode ederek uygun şekilde veriyi veritabanına yazıyor.
Fakat ilgili linki Dolar linki ile değiştirince, Dolar ve Ruble Link sonuçları birbirinden farklı olduğu için ne yazıkki uygulama fiyatı hesaplayamıyor.


Bunun sebebinin $ işaretinden kaynaklandığını düşünüyorum.
Fotoğrafta görüldüğü gibi Ruble linkinde direk rakam verilirken, dolar linkinde rakamdan önce $ işareti mevcut, bu da rakamların toplanmasını engelliyor.

Günlerdir uğraşıyorum ama bir sonuca ulaşamadım, deneyimli arkadaşlardan yardım bekliyorum.

Herhangi bir ek bilgi gerekirse konu altına yazmanız yeterli, hemen bilgileri sağlarım.

Teşekkürler
Back to Top
mkarakoc04 View Drop Down
Newbie
Newbie


Joined: 31 Mayıs 2011
Status: Offline
Points: 7
Post Options Post Options   Thanks (0) Thanks(0)   Quote mkarakoc04 Quote  Post ReplyReply Direct Link To This Post Posted: 16 Eylül 2015 at 23:56
Meseleyi tam bilmiyorum; ama özel karakterlerle ilgili sıkıntı yaşadığımda iki yöntem kullanırım. 
1) Karakter yerine kodunu kullanırım. Örneğin $ yerine (char)36 yazabilirsin.
2) İçinde özel karakter geçen string ifadenin başına @işareti koyarım. Örneğin @"string ifade"
Ama sen zaten direk ascii decode fonksiyonunu kullanmışsın. Bu durumda yerel ayarlardan kaynaklı olarak toplamıyor olabilir. Bunun için de C sharp localization kullanabilirsin.
En kötü ihtimalle sayıyı al, string'e çevir, içindeki $ işaretini para=para.Replace("$",""); diyerek sil ve tekrar parabirimine çevir.
Hâlen Cizre'ye gelmediyseniz, Hakkari'yi gezmediyseniz, Tillo'yu görmediyseniz çok şey kaybetmişsiniz demektir.
Back to Top
omicron78 View Drop Down
Newbie
Newbie


Joined: 16 Eylül 2015
Status: Offline
Points: 3
Post Options Post Options   Thanks (0) Thanks(0)   Quote omicron78 Quote  Post ReplyReply Direct Link To This Post Posted: 17 Eylül 2015 at 00:34
Yukarıda verdiğim link size bir fiyat bilgisi veriyor:

{"success":true,"lowest_price":"1390,26 p\u0443\u0431.","volume":"191","median_price":"1333,46 p\u0443\u0431."}
Bu sonuç rus rublesi linkinin sounucu. Burda gördüğünüz gibi Lowest_price değerini direk olarak veriyor ve sorunsuz olarak işleyebiliyor.

Fakat, ilgili linki $ linki ile değiştirdiğimde malesef çalışmıyor.
Aşağıda gördüğünüz dolar linki sonucunda Lowest_price $ işareti ile başlıyor.
{"success":true,"lowest_price":"$21.19 USD","volume":"191","median_price":"$20.33 USD"}

Anladığım kadarıyla $ işareti olduğu için hesaplayamıyor. Bu $ işaretini atlayarak direk rakamları çekmesini sağlamam gerekiyor fakat bunu nasıl yapacağım hakkında en ufak fikrim yok.
C#'de 5. günüm :/ Yardımcı olabilirseniz çok sevinirim.

Back to Top
zafergezen View Drop Down
Newbie
Newbie


Joined: 13 Eylül 2015
Location: izmir
Status: Offline
Points: 39
Post Options Post Options   Thanks (0) Thanks(0)   Quote zafergezen Quote  Post ReplyReply Direct Link To This Post Posted: 20 Eylül 2015 at 15:54
Selam,
Sorun "$" işaretinde değil, ondalık işareti "." olduğu için oluyor.

price.lowestprice stringinde "." 'yı "," replace edip denermisiniz.

price.lowestprice.replace("." , ",") şeklinde.
C#
Back to Top
EnisKurtay View Drop Down
Senior Member
Senior Member


Joined: 02 Ocak 2008
Status: Offline
Points: 342
Post Options Post Options   Thanks (0) Thanks(0)   Quote EnisKurtay Quote  Post ReplyReply Direct Link To This Post Posted: 03 Ekim 2015 at 13:04
Ben önce ilgili API'den alacağın JSON değeri için Class oluşturdum.

public class StreamClass
    {
        public bool success { get; set; }
        public string lowest_price { get; set; }
        public string volume { get; set; }
        public string median_price { get; set; }
    }

Ardından aşağıdaki kodlar ile veri adlı StreamClass'ına çektiğim değerleri işledim.
string url = @"http://steamcommunity.com/market/priceoverview/?appid=730&country=EN&currency=1&market_hash_name=AK-47%20|%20Redline%20%28Minimal%20Wear%29";

            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            string jsonVerisi = "";
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                //jsonVerisi adlı değişkene elde ettiği veriyi atıyoruz.
                jsonVerisi = reader.ReadToEnd();
            }
            StreamClass veri = JsonConvert.DeserializeObject<StreamClass>(jsonVerisi);
            veri.lowest_price = veri.lowest_price.Replace("USD", "");
            NumberFormatInfo NFIFormat = new NumberFormatInfo();
            NFIFormat.NaNSymbol = "USD";
            NFIFormat.NegativeSign = "-";
            NFIFormat.CurrencyDecimalSeparator = ".";
            NFIFormat.CurrencyGroupSeparator = ",";
            NFIFormat.CurrencySymbol = "$";

            decimal d = decimal.Parse(veri.lowest_price, NumberStyles.Currency, NFIFormat);

Dolar değerini yakalayabildim.


Edited by EnisKurtay - 03 Ekim 2015 at 13:24
Full Stack Developer | Co-founder CodeApp Co.

https://www.eniskurtayyilmaz.com

İzmir
Back to Top
 Post Reply Post Reply
  Share Topic   
   


Forum Jump Forum Permissions View Drop Down

Forum Software by Web Wiz Forums® version 11.01
Copyright ©2001-2014 Web Wiz Ltd.