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.
tek virgül ile gönderdiği zaman bulabiliyor mu? Deneme şansın varmı?
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
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...
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ş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...
Gelen veriyi dizi yapamıorum, dedigini tek satırda nasıl yapıcam diziye çeviremeden ?
ö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)));
}
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.
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..
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
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
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.