Yazan : Şadi Evren ŞEKER

Bilgisayar bilimlerinde sık kullanılan veri tiplerinden birisi de dizgilerdir (Strings). Bu veri tipinde herhangi bir yazı durabilir. Genellikle verinin bir parçasını elde etmek için dizgi içerisinden bir parça çıkarılması gerekir. Bu işlem için dizginin (string) parçalanması gerektiğinde yapılan işleme parçalama (Tokenize) ismi verilir.

Örneğin çok sık kullanılan virgül ayırmalı veri (Comma seperated values) yapısındaki bir dosyayı ele alalım:

isim,telefon,dogum

ali,123,1970

veli,321,1980

ahmet,333,1981

Yukarıdaki bu dosyayı okuyarak sırasıyla verileri işlememiz gerekirse yapılacak işlem dosyadan satır satır verileri okumak ve “,” karakterinden okunan dizgileri bölmek gerekir.

Bu işlem için örneğin C dilinde bir karakter dizisine okumak ve dizinin her elemanı üzerinden bir döngü ile geçerek , karakteri görünce bölme işlemini tamamlamak gerekir.

Bu işlemi yapan strtok isimli bir fonksiyon string.h dosyasında bulunmaktadır.  Aşağıdaki şekilde kullanılabilir:

/* strtok ornegi */
#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- Bu, ornek bir dizgidir.";
  char * pch;
  printf ("Girilen "%s" mesajini parcaliyoruz:n",str);
  pch = strtok (str," ,.-");
  // parcalama icin kullanilan ayırıcılar (delimiters)
  while (pch != NULL)
  {
    printf ("%sn",pch);
    pch = strtok (NULL, " ,.-");
  }
  return 0;

}

Yukarıdaki programın sonucu aşağıda verilmiştir:

Girilen "Bu, ornek bir dizgidir." mesajini parcaliyoruz:
Bu
ornek
bir
dizgidir

Yukarıda görüldüğü üzere ,.- karakterlerinden parçalanmıştır. Benzer bir hazır fonksiyonda JAVA dilinde bulunmaktadır. StringTokenizer isimli fonksiyonun kullanımı aşağıda verilmiştir:

     StringTokenizer st = new StringTokenizer("Bu, ornek bir dizgidir"," ,.");
     while (st.hasMoreTokens()) {
         System.out.println(st.nextToken());
     }

Yukarıdaki kodda da aynı dizgi aynı ayıraçlarla (Deliminator) verilmiştir ve çıktısı aşağıdaki şekildedir:

Bu
ornek
bir
dizgidir

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir