Takip et

Düz Metni JavaScript Dizileri, Python Listeleri, JSON ve SQL IN Yan Cümlelerine Dönüştürme

Veri işleme dünyasında, düz metinleri yapılandırılmış formatlara dönüştürmek sıkça karşılaşılan bir ihtiyaçtır. Peki, bu dönüşümü nasıl kolaylaştırabiliriz?

Düz Metni JavaScript Dizileri, Python Listeleri, JSON ve SQL IN Yan Cümlelerine Dönüştürme

Veri işleme dünyasında, düz metinleri yapılandırılmış formatlara dönüştürmek sıkça karşılaşılan bir ihtiyaçtır. Peki, bu dönüşümü nasıl kolaylaştırabiliriz?

Neden Düz Metni Yapılandırılmış Verilere Dönüştürmeliyiz?

Günümüz dijital ekosisteminde, verinin ham haliyle işlenmesi genellikle yetersiz kalır. Birçok uygulama, web sitesi veya veritabanı, veriyi belirli bir yapıda bekler. Örneğin, bir web uygulamasında kullanıcıların girdiği bir dizi ismi, programatik olarak işleyebilmek için onları bir JavaScript dizisine dönüştürmeniz gerekebilir. Benzer şekilde, bir veri analizi projesinde, bir metin dosyasındaki sayısal değerleri Python’da kullanmak için bir listeye çevirmeniz gerekebilir. Dahası, farklı sistemler arasında veri alışverişi yaparken JSON formatı vazgeçilmezdir. Veritabanı sorgularında, belirli bir değer kümesini aramak için SQL’deki IN yan cümlesi kullanılır ve bu küme de genellikle düz metinden türetilir. Bu dönüşüm süreci, veri yönetimi, otomasyon ve verimlilik açısından kritik öneme sahiptir. Düz metinler, doğası gereği esnek ve okunabilir olsalar da, makine tarafından işlenmeleri zordur. Yapılandırılmış formatlar ise, bilgisayarların veriyi anlamasını, işlemesini ve sorgulamasını kolaylaştırır. Bu makalede, bu dönüşümün temel yöntemlerini, pratik uygulamalarını ve gerçek dünya senaryolarını ele alacağız.

Temel Kavramlar: Düz Metin ve Yapılandırılmış Veri Formatları

Başlamadan önce, temel kavramları netleştirelim. Düz metin (plain text), karakterlerden oluşan, herhangi bir biçimlendirme (kalın, italik, font boyutu vb.) içermeyen metin türüdür. Bir metin editöründe oluşturulan .txt uzantılı dosyalar buna örnektir. Bu metinler genellikle satır satır veya belirli bir ayırıcı (virgül, yeni satır, noktalı virgül gibi) ile ayrılmış veri parçacıkları içerebilir. Yapılandırılmış veriler ise, belirli bir şemaya veya düzene göre organize edilmiş verilerdir. Bu makalede odaklanacağımız yapılandırılmış veri formatları şunlardır:

  • JavaScript Dizileri (Arrays): JavaScript’te, sıralı bir veri koleksiyonunu temsil etmek için kullanılır. Elemanlar köşeli parantezler ([]) içine alınır ve virgülle ayrılır. Örneğin: ["elma", "armut", "muz"].
  • Python Listeleri (Lists): Python’da, JavaScript dizilerine benzer şekilde, sıralı ve değiştirilebilir bir veri koleksiyonudur. Elemanlar da köşeli parantezler ([]) içinde ve virgülle ayrılır. Örneğin: ['elma', 'armut', 'muz'].
  • JSON (JavaScript Object Notation): İnsan tarafından okunabilir ve makine tarafından kolayca ayrıştırılabilir bir veri değiş tokuş formatıdır. Genellikle anahtar-değer çiftleri halinde veriyi temsil eder. Örneğin: {"meyveler": ["elma", "armut", "muz"], "sayilar": [1, 2, 3]}.
  • SQL IN Yan Cümlesi (Clause): SQL veritabanı sorgularında, bir sütunun belirli bir değer kümesindeki değerlerden herhangi birine eşit olup olmadığını kontrol etmek için kullanılır. Örneğin: WHERE sehir IN ('İstanbul', 'Ankara', 'İzmir').

Bu formatların her biri, veriyi farklı bağlamlarda kullanmamızı sağlar. Düz metinden bu yapılandırılmış formatlara geçiş yaparken, metindeki verinin nasıl ayrıştırılacağını (parsing) ve hangi formata dönüştürüleceğini anlamak önemlidir. Ayırıcılar (delimiters), yani veriyi birbirinden ayıran karakterler (örneğin, virgül, yeni satır karakteri \n, noktalı virgül ;), bu ayrıştırma işleminin temelini oluşturur. Verinin yapısını doğru anlayarak, dönüşüm sürecini otomatikleştirebiliriz.

Düz Metni JavaScript Dizilerine Dönüştürme

Web geliştirmede, kullanıcıdan alınan bir metin girdisini veya bir API’den gelen veriyi işlemek için JavaScript dizilerine dönüştürmek sıkça karşımıza çıkar. En yaygın senaryo, virgülle ayrılmış veya yeni satırlarla ayrılmış bir metin listesidir. Diyelim ki bir metin kutusuna aşağıdaki gibi bir isim listesi girildi:

Ali,Veli,Ayşe,Fatma

Bu metni bir JavaScript dizisine dönüştürmek için split() metodunu kullanabiliriz. Bu metot, bir dizeyi belirli bir ayırıcıya göre böler ve bir dizi döndürür. Virgülle ayrılmış metin için kodumuz şöyle olacaktır:


    const metinListe = "Ali,Veli,Ayşe,Fatma";
    const isimDizisi = metinListe.split(',');
    console.log(isimDizisi); // Çıktı: ["Ali", "Veli", "Ayşe", "Fatma"]
    

Eğer metin yeni satırlarla ayrılmışsa (örneğin, bir <textarea> etiketinden gelen veri):


    Ali
    Veli
    Ayşe
    Fatma
    

Bu durumda ayırıcı olarak yeni satır karakterini (\n) kullanırız:


    const metinListe = "Ali\nVeli\nAyşe\nFatma";
    const isimDizisi = metinListe.split('\n');
    console.log(isimDizisi); // Çıktı: ["Ali", "Veli", "Ayşe", "Fatma"]
    

Bazen metinlerde fazladan boşluklar olabilir. Bu durumda, map() metodu ile her bir elemanın başındaki ve sonundaki boşlukları temizleyebiliriz:


    const metinListe = "  Ali , Veli,  Ayşe , Fatma  ";
    const isimDizisi = metinListe.split(',').map(isim => isim.trim());
    console.log(isimDizisi); // Çıktı: ["Ali", "Veli", "Ayşe", "Fatma"]
    

trim() metodu, bir dizenin başındaki ve sonundaki boşlukları kaldırır. Bu, kullanıcıdan gelen verinin temiz ve tutarlı olmasını sağlar. Bu yöntem, bir web sayfasında kullanıcıların etiketler girmesi, bir ürün listesi oluşturması veya basit bir görev listesi oluşturması gibi birçok senaryoda kullanılabilir. Örneğin, bir blog yazısına etiket eklerken kullanıcı virgülle ayırarak girebilir ve bu etiketler arka planda bir diziye dönüştürülerek veritabanına kaydedilebilir.

Düz Metni Python Listelerine Dönüştürme

Veri bilimi, makine öğrenmesi ve genel programlama görevlerinde Python’ın gücü tartışılmazdır. Düz metinleri Python listelerine dönüştürmek de bu ekosistemde sıkça başvurulan bir işlemdir. JavaScript’te olduğu gibi, Python’da da split() metodu bu iş için kullanılır. Bir dosyadan okunan veya bir web isteğinden gelen metin verisini ele alalım:


    # Dosya içeriği veya alınan metin
    metin_liste = "elma,armut,muz,çilek"
    

Bu metni bir Python listesine dönüştürmek için split() metodunu virgül (,) ile kullanırız:


    meyve_listesi = metin_liste.split(',')
    print(meyve_listesi)
    # Çıktı: ['elma', 'armut', 'muz', 'çilek']
    

Eğer metin yeni satırlarla ayrılmışsa:


    metin_liste_yeni_satir = "İstanbul\nAnkara\nİzmir\nBursa"
    sehirler_listesi = metin_liste_yeni_satir.split('\n')
    print(sehirler_listesi)
    # Çıktı: ['İstanbul', 'Ankara', 'İzmir', 'Bursa']
    

Python’da da boşlukları temizlemek için strip() metodu ve liste anlama (list comprehension) kullanılabilir:


    metin_liste_bosluklu = "  Ali , Veli,  Ayşe , Fatma  "
    isimler_listesi = [isim.strip() for isim in metin_liste_bosluklu.split(',')]
    print(isimler_listesi)
    # Çıktı: ['Ali', 'Veli', 'Ayşe', 'Fatma']
    

Bu liste anlama yapısı, hem split(',') işlemini yapar hem de her bir eleman üzerinde strip() işlemini uygulayarak daha temiz bir liste elde etmemizi sağlar. Bir diğer yaygın senaryo, bir dosyadan satır satır okunan verilerdir. Örneğin, bir veriler.txt dosyasında şu satırlar bulunsun:


    101
    102
    103
    104
    

Bu dosyadaki sayıları bir Python listesine dönüştürmek için:


    sayilar_listesi = []
    with open('veriler.txt', 'r', encoding='utf-8') as f:
        for satir in f:
            sayilar_listesi.append(int(satir.strip())) # Sayıları integer'a çeviriyoruz
    print(sayilar_listesi)
    # Çıktı: [101, 102, 103, 104]
    

Burada dikkat edilmesi gereken nokta, dosya okunduğunda satırların string olarak gelmesidir. Eğer sayısal işlemler yapılacaksa, bunları int() veya float() gibi fonksiyonlarla uygun veri tipine dönüştürmek gerekir. Bu işlem, örneğin bir CSV dosyasından veri okurken, belirli bir sütundaki değerleri bir listeye toplamak için kullanılabilir.

Düz Metni JSON Formatına Dönüştürme

JSON, web servisleri, konfigürasyon dosyaları ve veri depolama gibi birçok alanda standart haline gelmiştir. Düz metni JSON’a dönüştürmek, veriyi hem insanlar hem de makineler için daha anlamlı ve erişilebilir hale getirir. En temel JSON yapısı anahtar-değer çiftleridir. Diyelim ki bir metin dosyasında ürün adı ve fiyatı bilgileri var:


    Ürün: Laptop,Fiyat: 15000
    Ürün: Klavye,Fiyat: 500
    Ürün: Mouse,Fiyat: 200
    

Bu veriyi bir JavaScript nesnesi (JSON’a benzer yapı) veya bir JSON dizisi haline getirebiliriz. Önce JavaScript ile başlayalım:


    const metinVeri = Ürün: Laptop,Fiyat: 15000
    Ürün: Klavye,Fiyat: 500
    Ürün: Mouse,Fiyat: 200;

    const urunler = [];
    metinVeri.split('\n').forEach(satir => {
        const parcalar = satir.split(',');
        const urunAdi = parcalar[0].split(':')[1].trim();
        const fiyat = parseInt(parcalar[1].split(':')[1].trim());
        urunler.push({ urun: urunAdi, fiyat: fiyat });
    });

    const jsonCikti = JSON.stringify(urunler, null, 2); // null, 2, okunabilir format için girintileme
    console.log(jsonCikti);
    /* Çıktı:
    [
      {
        "urun": "Laptop",
        "fiyat": 15000
      },
      {
        "urun": "Klavye",
        "fiyat": 500
      },
      {
        "urun": "Mouse",
        "fiyat": 200
      }
    ]
    */
    

Burada, her satırı önce yeni satır karakteriyle, sonra virgülle ayırıyoruz. Ardından, her bir anahtar-değer çiftini ayırıp değerleri temizleyip uygun tiplere (string, integer) dönüştürüyoruz. Son olarak, elde ettiğimiz nesneler dizisini JSON.stringify() ile JSON formatına çeviriyoruz. null, 2 parametreleri, JSON çıktısını okunabilir hale getirmek için girintileme ekler. Python’da ise json modülü kullanılır:


    import json

    metin_veri = """Ürün: Laptop,Fiyat: 15000
    Ürün: Klavye,Fiyat: 500
    Ürün: Mouse,Fiyat: 200"""

    urunler = []
    for satir in metin_veri.split('\n'):
        parcalar = satir.split(',')
        urun_adi = parcalar[0].split(':')[1].strip()
        fiyat = int(parcalar[1].split(':')[1].strip())
        urunler.append({"urun": urun_adi, "fiyat": fiyat})

    json_cikti = json.dumps(urunler, indent=2, ensure_ascii=False) # ensure_ascii=False Türkçe karakterler için
    print(json_cikti)
    # Çıktı yukarıdaki gibidir.
    

Bu işlem, bir web uygulamasının arka ucunda, dışarıdan gelen yapılandırılmamış veriyi işleyip standart bir JSON formatına dönüştürerek ön uca göndermesi veya bir veritabanına kaydetmesi gibi durumlarda çok önemlidir. Örneğin, bir e-ticaret sitesinde ürün özelliklerini (renk, beden, malzeme vb.) metin olarak alıp, bunları yapılandırılmış bir JSON formatında saklamak, arama ve filtreleme özelliklerini geliştirmek için kritik bir adımdır.

Düz Metni SQL IN Yan Cümlesine Dönüştürme

Veritabanı sorgularında, belirli bir sütundaki değerlerin bir listede olup olmadığını kontrol etmek için IN yan cümlesi kullanılır. Bu liste bazen düz metin olarak elimizde bulunur. Örneğin, belirli illerdeki kullanıcıları listelemek istediğimizi varsayalım ve iller bir metin olarak şöyle verilmiş olsun:


    İstanbul, Ankara, İzmir
    

Bu metni alıp SQL’de kullanılabilir bir IN yan cümlesine dönüştürmek, sorguyu dinamik olarak oluşturmamızı sağlar. Eğer bu işlemi bir Python betiği ile yapıyorsak:


    iller_metin = "İstanbul, Ankara, İzmir"
    iller_listesi = [il.strip() for il in iller_metin.split(',')]

    # SQL IN yan cümlesini oluşturma
    # String değerler için tırnak eklemeyi unutmamalıyız
    sql_in_clause = f"IN ({', '.join(f"'{il}'" for il in iller_listesi)})"

    print(f"SELECT * FROM kullanicilar WHERE sehir {sql_in_clause};")
    # Çıktı: SELECT * FROM kullanicilar WHERE sehir IN ('İstanbul', 'Ankara', 'İzmir');
    

Burada önce metni bir listeye çeviriyoruz. Ardından, join() metodu ile listeyi bir string’e dönüştürüyoruz. Ancak, SQL’de string değerler için tek tırnak (') kullanılması gerektiğinden, her ilin etrafına tek tırnak ekliyoruz. Bu, dinamik SQL sorguları oluştururken güvenlik açısından da önemlidir, ancak dikkatli olunmalı ve SQL injection saldırılarına karşı önlemler alınmalıdır (örneğin, parametreli sorgular kullanmak).

Vaka Analizi: Müşteri Siparişlerini Filtreleme

Bir e-ticaret firmasının müşteri hizmetleri departmanı, belirli bir kampanya kapsamında belirli sipariş numaralarına sahip müşterilerin siparişlerini listelemek istiyor. Sipariş numaraları bir metin dosyasında virgülle ayrılmış halde bulunuyor:


    100567, 100890, 101234, 100111, 105678
    

Bu sipariş numaralarını alıp, veritabanındaki siparisler tablosundan ilgili kayıtları çekmek için bir SQL sorgusu oluşturulması gerekiyor. Bir Python betiği bu işi kolayca yapabilir:


    siparis_numaralari_metin = "100567, 100890, 101234, 100111, 105678"
    siparis_listesi = [siparis.strip() for siparis in siparis_numaralari_metin.split(',')]

    # Sipariş numaraları sayısal olduğu için tırnak eklemeye gerek yok,
    # ancak veritabanı şemasına göre değişebilir. Eğer VARCHAR ise tırnak eklenir.
    # Varsayalım ki siparis_no bir INT kolonu.
    sql_in_clause_siparis = f"IN ({', '.join(siparis_listesi)})"

    print(f"SELECT * FROM siparisler WHERE siparis_no {sql_in_clause_siparis};")
    # Çıktı: SELECT * FROM siparisler WHERE siparis_no IN (100567, 100890, 101234, 100111, 105678);
    

Bu yaklaşım, manuel sorgu yazma zahmetini ortadan kaldırır ve büyük veri kümeleriyle çalışırken büyük verimlilik sağlar. Özellikle raporlama veya toplu veri işlemleri gerektiren durumlarda bu otomasyon büyük önem taşır.

İleri Düzey Teknikler ve Püf Noktaları

Düz metni yapılandırılmış verilere dönüştürme süreci, basit ayırıcılara dayalı dönüşümlerin ötesine geçebilir. Karmaşık metin yapıları, iç içe geçmiş veriler veya farklı formatlardaki verileri bir arada işlemek gerektiğinde daha gelişmiş tekniklere ihtiyaç duyulur.

  • Düzenli İfadeler (Regular Expressions – Regex): Daha karmaşık desenleri eşleştirmek ve veriyi çıkarmak için düzenli ifadeler son derece güçlü bir araçtır. Örneğin, bir metinde hem e-posta adreslerini hem de telefon numaralarını bulup ayıklamak istediğinizde regex kullanabilirsiniz.
  • Hata Yönetimi (Error Handling): Dönüşüm sırasında beklenmedik verilerle karşılaşmak olasıdır. Örneğin, sayısal bir alana metin girilmesi veya eksik veri olması gibi durumlar için try-except blokları (Python) veya try-catch blokları (JavaScript) kullanarak programınızın çökmesini engelleyebilir ve hataları loglayabilirsiniz.
  • Karakter Kodlamaları (Character Encoding): Özellikle Türkçe karakterler gibi özel karakterler içeren metinlerle çalışırken, dosya okuma ve yazma işlemlerinde doğru karakter kodlamasını (genellikle UTF-8) belirtmek önemlidir. Aksi takdirde karakterler bozulabilir.
  • Büyük Veri İşleme (Big Data Processing): Eğer işleyeceğiniz metin dosyaları çok büyükse (gigabaytlarca), belleğe sığdırmak yerine satır satır veya parça parça işlemek (streaming) daha verimli olacaktır. Python’da pandas kütüphanesinin read_csv fonksiyonu gibi araçlar, büyük CSV dosyalarını parçalar halinde okuyabilir.
  • Veri Doğrulama (Data Validation): Dönüştürülen verinin beklenen formatta ve değer aralığında olup olmadığını kontrol etmek, veri bütünlüğünü sağlamak açısından kritiktir. Örneğin, yaş bilgisinin 0 ile 120 arasında olması gibi.

Gerçek Dünya Senaryosu: Log Dosyası Analizi

Bir sunucunun log dosyaları genellikle düz metin formatındadır ve her satır belirli bir olayı temsil eder. Bu satırlar genellikle zaman damgası, hata seviyesi (INFO, WARN, ERROR), kaynak modül ve mesaj gibi bilgileri içerir. Bu logları analiz ederek sistemdeki sorunları tespit etmek mümkündür.

Örneğin, bir log satırı şöyle görünebilir:


    2023-10-27 10:30:15 INFO [AuthService] Kullanıcı 'ali.veli' başarıyla giriş yaptı.
    2023-10-27 10:31:01 ERROR [PaymentGateway] Ödeme alınamadı: Kredi kartı reddedildi.
    2023-10-27 10:31:05 WARN [InventoryService] Stokta olmayan ürün için sipariş denemesi.
    

Bu logları ayrıştırıp, belirli bir zaman aralığındaki tüm hata mesajlarını bir listeye toplamak veya belirli bir servisteki uyarıları saymak isteyebilirsiniz. Bu durumda, düzenli ifadeler (regex) kullanarak her satırdan gerekli bilgileri çıkarmak en etkili yöntemdir. Python’da bu, re modülü ile yapılabilir.


    import re

    log_verisi = """2023-10-27 10:30:15 INFO [AuthService] Kullanıcı 'ali.veli' başarıyla giriş yaptı.
    2023-10-27 10:31:01 ERROR [PaymentGateway] Ödeme alınamadı: Kredi kartı reddedildi.
    2023-10-27 10:31:05 WARN [InventoryService] Stokta olmayan ürün için sipariş denemesi."""

    hata_mesajlari = []
    # Regex deseni: Zaman damgası, hata seviyesi, servis adı ve mesajı yakalar
    log_pattern = re.compile(r"(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (\w+) \[(.*?)\] (.*)")

    for satir in log_verisi.split('\n'):
        eslesme = log_pattern.match(satir)
        if eslesme:
            zaman, seviye, servis, mesaj = eslesme.groups()
            if seviye == "ERROR":
                hata_mesajlari.append({"zaman": zaman, "servis": servis, "mesaj": mesaj})

    print(hata_mesajlari)
    # Çıktı: [{'zaman': '2023-10-27 10:31:01', 'servis': 'PaymentGateway', 'mesaj': 'Ödeme alınamadı: Kredi kartı reddedildi.'}]
    

Bu tür bir analiz, sistem sağlığını izlemek, performans sorunlarını gidermek ve güvenlik açıklarını tespit etmek için hayati önem taşır. Yapılandırılmış verilere dönüştürülen loglar, daha sonra görselleştirme araçlarıyla (örneğin, Grafana, Kibana) analiz edilerek trendler ve anormallikler daha kolay tespit edilebilir.

Sonuç ve Sıkça Sorulan Sorular

Düz metni JavaScript dizileri, Python listeleri, JSON veya SQL IN yan cümleleri gibi yapılandırılmış formatlara dönüştürmek, veri işleme ve otomasyonun temel taşlarından biridir. Bu dönüşüm, veriyi daha anlamlı, işlenebilir ve kullanışlı hale getirir. Kullandığımız programlama diline ve verinin yapısına göre farklı yöntemler mevcuttur; ancak temel prensip, metindeki ayırıcıları doğru tespit etmek ve veriyi istenen yapıya uygun şekilde dönüştürmektir. Düzenli ifadeler gibi ileri düzey teknikler, daha karmaşık senaryolarda bize yardımcı olurken, hata yönetimi ve veri doğrulama gibi pratikler, sağlam ve güvenilir çözümler oluşturmamızı sağlar.

Sıkça Sorulan Sorular

  • Hangi ayırıcıyı kullanmalıyım? Ayırıcı, verinizin metin içinde nasıl ayrıldığını belirler. En yaygın olanlar virgül (,), yeni satır (\n), noktalı virgül (;) veya sekme karakteridir (\t). Verinizin yapısına bakarak doğru ayırıcıyı seçmelisiniz.
  • Metindeki fazladan boşlukları nasıl temizlerim? JavaScript’te .trim() ve Python’da .strip() metotları, bir dizenin başındaki ve sonundaki boşlukları temizlemek için kullanılır. Liste anlama veya .map() ile birlikte kullanıldığında oldukça etkilidir.
  • Sayıları metinden dönüştürürken neye dikkat etmeliyim? Metinden sayıya dönüştürme yaparken (örneğin, int() veya parseFloat() ile), metnin gerçekten geçerli bir sayısal ifade içerdiğinden emin olun. Aksi takdirde hata alırsınız. Hata yönetimi (try-except) kullanmak bu tür durumlar için iyi bir pratiktir.
  • JSON’a dönüştürürken anahtar isimleri önemli mi? Evet, JSON yapısı anahtar-değer çiftlerinden oluşur. Anahtar isimleri, verinin ne anlama geldiğini belirtir ve genellikle string olarak kullanılır. Tutarlı ve anlamlı anahtar isimleri seçmek, JSON verisinin okunabilirliğini artırır.
  • SQL injection saldırılarından nasıl korunabilirim? Dinamik SQL sorguları oluştururken, kullanıcıdan alınan veya metinden türetilen değerleri doğrudan sorguya eklemek yerine, parametreli sorgular (prepared statements) kullanmak en güvenli yoldur. Bu, değerlerin sorgu komutlarından ayrı olarak işlenmesini sağlar.

#VeriDönüşümü #Programlama #WebGeliştirme #Python #JavaScript #JSON #SQL

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version