STRTOK fonksiyonu hakkında

Başlatan tekniker_murat, 18 Aralık 2019, 05:23:13

tekniker_murat

Herkese selamun aleyküm.

Değerli usta arkadaşlar ben mikroc ile pic programlama konusunda uğraşıyorum ama c++ da da bazı fonksiyonların aynı yada benzer olduğunu gördüm o yüzden burada soracağım...

Gps uydusundan gelen verileri uart ile alıp işlemem gerekiyor ve bu bilgileri uart ile alabiliyorum lakin istediğim kısımlarını ayıklayarak kullanmam gerekiyor bu yüzden de strtok fonksiyonunu öğrenmek istiyorum...

Bir çok yerde araştırdım hatta zamanın birinde bir arkadaş bu sitede https://www.picproje.org/index.php?topic=63273.0 linkinde konuyu araştırmış ama konu detay bulmadan kapanmış...

Şimdi ben bu strtok fonksiyonunu parametrelerini kullanılmasını vs öğrenmek istiyorum Şu fonksiyonu hem bana hem de ihtiyacı olan yada olabilecek olan kişilerin anlaması için biraz anlatır mısınız fonksiyon nasıl çalışıyor parametreleri ( strcpy-pch-null ) nedir nasıl bir anlam ifade ediyor defalarca library den okudum ama hiç bişiy anlayamadım ve bir sürü yerden bakmama rağmen de düzgün bişiyler bulamadım.

Elimde olan c programlama kitabında da bahsi geçmemiş yeni bir kitap sipariş verdim o da halen elime gelmedi ilgilenirseniz çok memnun olurum :)
[email]murat.yagci.1984@gmail.com[/email]

Yasin Tekin

Gelen veriyi bir diziye aktardıktan sonra.Bir fonksiyon yazıp kullanabilirsiniz. Örneğin;
#include <stdio.h>
#include <string.h>

int main()
{
	char str[] = "gelen veri burada";
	int init_size = strlen(str);
	char delim[] = " ";

	char *ptr = strtok(str, delim);

	while(ptr != NULL)
	{
		printf("'%s'\n", ptr);
		ptr = strtok(NULL, delim);
	}

	
	for (int i = 0; i < init_size; i++)
	{
		printf("%d ", str[i]); 
	}
	printf("\n");

	return 0;
}


taydin

strtok fonksiyonu ile bir string'i belli ayıraçlara göre parçalara bölüyorsun. Diyelim UART'tan şöyle bir string geliyor (rakamların arasında boşluklar var)

1283 345 34353 234235

strtok kullanıp, ayıraç olarak da boşluk karakterini belirterek, şu string'ler elde edip ayrı ayrı işlem yapıyorsun:

1283
345
34353
234235

Yukarıda da güzel bir örnek var.

Tam olarak neyi anlamadığını net bir şekilde belirtmen lazım. Yoksa senin programlama bilgi seviyen konusunda hiçbir fikrimiz yok. Anlatırken nereden başlamamız lazım? Nelere hakimsin nelere hakim değilsin?

Açıkçası ben bu tip soruları görünce düşüncem şu: Sen bir öğrencisin, programlama konusuna zerre kadar ilgin yok, ama bu ödev de verilmiş sana, dersi geçmek için birşeyler yapman lazım. O yüzden kendin minimal gayret göstererek çoğunu başkalarına yaptırıp işin içinden sıyrılmaya çalışıyorsun.

Eğer bu doğru değilse, bir C programı yaz. Ekrandan bir string alsın, ayıraçları içeren string alsın, sonra da o ayıraçlara göre string'i işlesin ve sonucu ekrana yazsın. Bu programda çalıştıramadığın birşey olursa da programı koy onun üzerinden devam edelim.
Timur Aydın (mekatronik.org)

tekniker_murat

Alıntı yapılan: taydin - 18 Aralık 2019, 11:24:21Açıkçası ben bu tip soruları görünce düşüncem şu: Sen bir öğrencisin, programlama konusuna zerre kadar ilgin yok, ama bu ödev de verilmiş sana, dersi geçmek için birşeyler yapman lazım. O yüzden kendin minimal gayret göstererek çoğunu başkalarına yaptırıp işin içinden sıyrılmaya çalışıyorsun.

Eğer bu doğru değilse, bir C programı yaz. Ekrandan bir string alsın, ayıraçları içeren string alsın, sonra da o ayıraçlara göre string'i işlesin ve sonucu ekrana yazsın. Bu programda çalıştıramadığın birşey olursa da programı koy onun üzerinden devam edelim.


Aslında dışardan bakınca evet aynen tarifinizi andıran bir dış görünüş ve yapı var :D

Ama işin aslı elbette böyle değil 2007 burdur myo mezunuyum bölümüm endüstriyel elektronik. Şu an kamu da ağır vasıta Tır şoförüyüm...

Gelelim konuya bişiyler öğrenmek bişiyler yapabilmek çok hoşuma gidiyor hatta en büyük hobim... Bunun için kitaplar satın alıyorum







Yani bütün bunlar belki çok ama çok küçük bir kısmı hani saysam 150 nin üzerinde rahat kitap satın almışımdır tabi sadece yazılım değil genelde pic programlama elektrik elektronik bilgisayar arm programlama gömülü sistemler vs üzerine...

Sonuçta öğrenci değilim hani bir ödev alıp da aman bi bitsin yeter diyen bi tip değilim sadece öğrenmek istiyorum ticari bir durumum da söz konusu değil yaptığım tek ticaret malzeme ve kitap almak :D

Tam olarak neyi anlamadığını net bir şekilde belirtmen lazım. Yoksa senin programlama bilgi seviyen konusunda hiçbir fikrimiz yok. Anlatırken nereden başlamamız lazım? Nelere hakimsin nelere hakim değilsin?

Evet çok mantıklı bir yaklaşım :)

Programlama seviyem yerlerde sürünüyor mesela fonksiyonları bile tam olarak bilmiyorum hani bir programın içinde fonksiyon çağırıyorum ama fonksiyonun geriye değer döndüren ve döndürmeyen tipinin ne demek olduğunu dahi net bilmiyorum...

Çok eskiden visual basic 2006 ile bir kaç tane seri port programı yapmıştım ama onu da tam bilinçli değildi...

Amacıma bakacak olursak aslında elektronik ve yazılımı bir araya getirmek istiyorum yani sadece bilgisayar yazılımları o kadar ilgimi çekmiyor asıl mesleğim olan elektronik ile yazılımı toparlamak istiyorum...

Düşünsenize bir tane pic18f4550 ile linux çalıştırmışsınız tamamen size özgü bir cihaz...


@Yasin Tekin Hocam örnek şahane ama ben tamamen fransız ?

#include <stdio.h>
#include <string.h>

int main()
{
   char str[] = "gelen veri burada";  // gelen veri burada derken ben gelen veriyi buraya mı atacağım yani //uydudan gelen verilerim burada mı olacak ben verileri uarttan geliş şekline göre char gelen[250]=0; diye atadığım //250 elemanlı bir registerde topluyorum yani gelen[indis] her veri alımında indis i 1 arttırıyorum ve if ile indis //250 mi değil mi kontrol ettiriyorum 250 ise verileri okumaya başlamak istiyorum işte burda bana strtok lazım oluyor
   
        int init_size = strlen(str);
   char delim[] = " ";

   char *ptr = strtok(str, delim);

   while(ptr != NULL)
   {
      printf("'%s'\n", ptr);
      ptr = strtok(NULL, delim);
   }

   
   for (int i = 0; i < init_size; i++)
   {
      printf("%d ", str);
   }
   printf("\n");

   return 0;
}

Aslında olayı komut komut anlamak isterdim printf("%d ", str); satırını net bir şekilde anladığım gibi satır satır anlamak isterdim... Ama elbette bu anlatana da zulüm olacaktır :D

[email]murat.yagci.1984@gmail.com[/email]

taydin

#4
Öncelikle programlama konusunda temellerin eksik, onu gidermen lazım. Bunun için de en iyisi bir masaüstü bilgisayarda, basitten başlayarak C programları geliştirmek ve belli bir seviyeye gelmek.

Sağlam bir programlama ve elektronik devreler bilgisi olmadan direkt olarak gömülü sistem ile başlamak uygun olmaz. Masaüstü bilgisayarda, en azından hardware'in doğru çalıştığını varsayabilirsin. Bir sorun varsa senin yazdığın programdadır veya derleme yanlış yapılıyordur. Ama gömülü sistemde hardware'in doğru çalıştığının bir garantisi yok. Bir sorun çıktığı zaman hardware'i bir problem kaynağı olarak elimine etmen lazım. Bunun için de elektronik test cihazları gerekir.

Ama arduino için program yazıyorsan, orada kartın doğru çalıştığını büyük ölçüde varsayabilirsin. Ama gene de hardware ile ilgili sorunlar yaşanabilir. portlardan birisini yanlış bağlamışsındır, çıkışlar çakışıyordur falan filan.
Timur Aydın (mekatronik.org)

tekniker_murat

@taydin abi çok haklısın bilgisayarıma dev c++ kurdum küçük küçük program parçacıkları yazmaya çalışıyorum...

Ben gömülü sistemi bir küçük örnek olarak söyledim... Donanım konusunda epeyce iyi olduğum düşünülebilir ;) aynı zamanda yeterince ölçü aleti ve test cihazlarım mevcut bunu osiloskoptan tutun 8 kanal usb sinyal analizörüne kadar düşünün.

Tek sorunum yazılım onu da kimi kitaplardan kimi sizin gibi değerli abilerden elimizden geldiği kadar öğrenmeye çalışacağız...

Ama sizden tek isteğim beni yanlış anlamayın ( ticari yazılım yaptığım yada değişik çakallıklar yaptığımı düşünmeyin sadece öğrenmek istediğim için buradayım... )
[email]murat.yagci.1984@gmail.com[/email]

taydin

Ha evet elektronik eğitimi almış olduğunu görmemişim :) Tamam o zaman, gömülü sistemde de sorun yaşamazsın o halde.

Madem bu kadar azim var, sen istesen İngilizce de öğrenirsin, ve bir programcı olarak kendin için yapabileceğin en iyi yatırım İngilizce öğrenmek! Aslında sadece programcı olarak da değil, bu her türlü iş için geçerli.

İngilizce bilen birisi için tavsiye edilecek sayısız internet bilgi kaynağı ve sayısız kitap var. Ama bilmeyen için seçenekler çok kısıtlı.
Timur Aydın (mekatronik.org)

tekniker_murat

Alıntı yapılan: taydin - 19 Aralık 2019, 11:17:38Ha evet elektronik eğitimi almış olduğunu görmemişim :) Tamam o zaman, gömülü sistemde de sorun yaşamazsın o halde.

Madem bu kadar azim var, sen istesen İngilizce de öğrenirsin, ve bir programcı olarak kendin için yapabileceğin en iyi yatırım İngilizce öğrenmek! Aslında sadece programcı olarak da değil, bu her türlü iş için geçerli.

İngilizce bilen birisi için tavsiye edilecek sayısız internet bilgi kaynağı ve sayısız kitap var. Ama bilmeyen için seçenekler çok kısıtlı.

Evet hocam ingilizce şart Allahtan translate var da tarzanca da olsa imdadımıza yetişiyor onun yetmediği yerde de işte sizin gibi üst seviyede bilgili abilerimize hocalarımıza soruyoruz onlar da sağ olsunlar kimi alay konusu ediyor kimi de harbi harbi değerlendirip yardımcı olmaya çalışıyor ama dediğiniz doğru İNGİLİZCE ŞART...
[email]murat.yagci.1984@gmail.com[/email]