Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Visual C# => Konuyu başlatan: Bloodofvol - 04 Mayıs 2013, 15:40:54

Başlık: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 15:40:54
Arkadaşlar ben 3 pic den bir master pice veri gönderip masterdan rs232 iletişimi ile bilgisayara veri gönderiorum. veri "a33.33,55.55,66.66,45.45,24.24,36.45$" şeklinde
Bu veriyi alıp virgülüne bölüp a ile virgül arası degeri kutucuga atıcam. a kutusu =33.33 yazcak gibi .Ama malesef Length cannot be less than zero.
Parameter name: length diye bir hata alıorum.Sanırım virgülün yerini bulamıor -1 olarak göroüor yada başka bir durum var.Bur durumu nasıl çözerim.

Programım


private void Gelenveri0a(picdengelen0)
               {ısı0.Text = a0;}
.
.
.
private void comPort_VeriAlımı(object sender, SerialDataReceivedEventArgs e)
         {
             Thread.Sleep(1000);
               string picdengelen0 = comPort.ReadExisting();
               int ilkadres = picdengelen0.IndexOf('a');                                      //  ilk slavein basında gelen a harfinin sırası
               int a0sayı = picdengelen0.IndexOf(',');                                //  picdengelen0 daki ilk virgülün sırasını a0sayıya ata
               string a0 = picdengelen0.Substring(ilkadres,a0sayı);                          //  a ,ile ilk virgül arasındaki veriyi a0 a ata
               this.BeginInvoke(new Picveri(Gelenveri0a), new object[] { picdengelen0 });
}


Şimdiden çok teşekkürler.
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 04 Mayıs 2013, 16:24:16
tek virgül ile gönderdiği zaman bulabiliyor mu? Deneme şansın varmı?
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 16:28:34
denemedim ama benimher picden geliyi ayırmam lazım her pic den 4 ayrı veri gelior.ve illa 5 haneli deil 4 hanelide olabilirler.34.45 yerine 4.45 gbi
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 04 Mayıs 2013, 16:33:00
demek istediğini anladım.
Sadece sesli düşünüyorum, sen burada birinci virgülü bulmasını istiyorsun, peki program birden fazla virgül geldiği zaman virgüllerin yerin nasıl bulacak...
Çünkü virgül için ayardığın index sadece bir tane.
Onun için bir tane virgülün yerini bulabiliyorsa, tanımlamada bir hata olabilir..

"int a0sayı = picdengelen0.IndexOf(',');" ??
bir tane bulur ya ikincisi??

mesaj birleştirme:: 04 Mayıs 2013, 16:36:57

her pic'den gelen veriyi ayrı ayrı işaretle.
Örnek
1. a, 2. b,... gibi böylece her pic'in verisi kolayca ayırırsın...
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 16:42:29
onu şöle hallediorum ilk virgülü buluorum sonra ilk virgülün oldugu terimle son terim arasındaki yeni ifadeyi baska bir kutuya atıp ondan işlem yapıorum.

ama 2. vürgülden sonraki ifadede hep hata alıorum
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 04 Mayıs 2013, 17:03:40
Başka yere bakıyormuşuz:

ayırma işlemini gösten geçir...

örneğin
for next döngüsünü kullanarak virgül yerlerini işaretle.
sonra hepsini bir kerede al.  virgülü en azından if ifadesi ile bulabilirsin. (virgül yeri için dizi kullanabilirsin)
Nasıl olsa gelen veri string uzunluğunu biliyorsun;
anladığım kadarı ile veri "a" ile "$" arasında...
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 17:19:16
Gelen veriyi dizi yapamıorum, dedigini tek satırda nasıl yapıcam diziye çeviremeden ?
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 04 Mayıs 2013, 18:26:46
örnek olarak 3 tane gelen veri virgül ile ayrılmış metin  textBox2, textBox3, textBox4 üzerinde görüntüleniyor

         string metin;
            int [] say = new int[5];
            int sayac;
            metin = "10.12,10.23,45.23";
            sayac=0;
            for (int i = 0; i < metin.Length; i++)
            {
                if (metin.Substring (i,1)==",")
                {
                    say[sayac]=i;
                    sayac=sayac+1;
                }
                   
            }
            textBox2.Text = metin .Substring (0,say[0]);
            textBox3.Text = metin .Substring (say[0]+1,((say[1])-(say[0]+1)));
            textBox4.Text = metin.Substring(say[1] + 1, (metin.Length - (say[1]+1)));
        }
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 20:50:50
Hocam çok teşekkürler , ama  if (metin.Substring (i,1)==",") kısmında i ve 1i n karşılaştırılmasını anlayamadım tam olara.
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 04 Mayıs 2013, 21:10:09
metin içinde string taranıyor her seferinde 1 karakter. i tarama (for için) .. 1 ise sadece 1 karakteri virgül ile karşılaştırıyor...


if (metin.Substring (i,1)==",")  şeklindeki ifadeyi
if (metin.Substring (başlangıç karakter,karakter sayısı)==",") şeklinde açabiliriz...

Belki başka yoluda vardır..
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 04 Mayıs 2013, 21:57:40
Anladım , çok teşekkür ederiö yardımınız için , suanda 3 pic den veri alıorum ve bölüorum ama malesef 4. yada5. kere veri gelince aynı hatayı alıorum
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Bloodofvol - 05 Mayıs 2013, 00:22:31
Program çalışıor ama 4 5 kere 3 picden veri alınca tekrar  Length cannot be less than zero. Parameter name: length hatası alıorum
Başlık: Ynt: Length cannot be less than zero. Parameter name: length hatası
Gönderen: Kabil ATICI - 05 Mayıs 2013, 12:08:52
55.24 ...şeklindeki veri   
55- "." -24...

şeklinde mi yoksa
0x35 -0x35-"."- 0x32 -0x34  ...
şeklinde mi geliyor...

İlk şekilde geliyorsa bir sorun vardır... a'dan sonra $ karşılığı sayı gelirse bu veri sonu olarak algılanabilir. o zaman 99'dan büyük bir sayıdaki karakteri kullanma gerekir. hatta a bile uygun değil. Hatta virgül ve nokta bile...
$-> 36
a ->97 
.->46
,->44 olur...

ikinci şekilde gönderiyorsan  programını biraz daha incelemen gerekir.