PHP

PHP ile Text Dosyasını Veritabanına Kaydetme

Bu yazıda MySQL veritabanına text dosyasındaki düzenli veriyi nasıl kaydedeceğinizi göreceksiniz. Bu yazıda standart fopen fonksiyonu yerine PHP 5.1+ ile gelen Standart PHP Library (SPL) arayüzünü kullanan SplFileObject sınıfını kullanacağız.

Uygulama için oluşturduğum veritabanı aşağıdaki gibidir. Tablonun adını musteri olarak aşağıdaki gibi oluşturdum.

Yukarıdaki veritabanına kaydedilecek text veriside aşağıdaki gibidir. Dosyasının adını veri.txt olarak berirledim.

Aşağıdaki kodda; SplFileObject, metin dosyasının sonuna ulaşana kadar metin satırını satır satır okur. Her satırda kişinin adı, soyadı ve doğum tarihi bulunur. Satırı okuduktan sonra, bir işlemdeki değişkenlerin listesine değer atamak için list() işlevini kullanırız.

PDO nesnesini oluşturup, ilgili bağlantı ve tablo isimlerini doğru şekilde yaptıktan sonra kayıt ekleme işlemini aşağıdaki kod benzer bir şekilde yaparız.

Benim oluşturduğum örnekte veritabanı adı ornek ve tablo adı musteridir.

 

 

 

 

9 Yorum

Yorum yapmak için tıklayın

  • Öncelikle emeğinize sağlık hocam.
    Bu konu ile ilgili bir sorum olacaktı. Yerli ve yabancı bir çok siteden araştırdım ama herhangi sonuç alamadım.

    Sorum; txt dosyasında sütunları birbirinden ayıran noktalı virgül ya da başka bir işaret yoksa verileri sütun genişliğine göre kaydedebilir miyiz?

    Örneğin Txt dosya düzenimiz aşağıdaki gibi olsun.

    ADNAN DEMİRKOL AAAAAAAAAABBBBBBBBB
    ADEM ÇETİN AAAAAAAAAABBBBBBBBB

    1. sütun genişliğimiz 15
    2. sütun genişliğimi 10
    3. sütun genişiliğimiz 9

    bu durumda ilk 15 karakter 1. sütuna, sonraki 10 karakteri 2. sütuna, geriye kalan 9 karakteri de 3. sütuna yazdırmak istiyorum.

    Bu konuda yardımcı olursanız çok sevinirim. iyi çalışmalar

      • Cevabınız için teşekkür ediyorum.
        satır satır okuma ile ilgili örnekleri inceledim o konuda bir sorun yok. benim sorum sütunlarla ilgili. sütun sütun okuyarak kaydetmek istiyorum. fgets fonksiyonu ile yapılıyorsa da ben bilmiyorum. İlk mesajda verdiğim örnekte de gösterdiğim gibi Sütunun genişlik değeri kadar karakter okumasını istiyorum.

        • str_split fonksiyonu ile belirli uzunluktaki veriyi bölebilirsin. Ama bunu da bulmuşsundur.
          Bu fonksiyonu işine yararsa Türkçe desteği için mb_str_split kullanabilirsin. Umarım faydalı olur.

          • Değerli Hocam ilginiz için teşekkür ediyorum.
            önerdiğiniz str_split fonksiyonunun yanısıra substr fonksiyonunu da kullandım. Bu fonksiyonlarla her sütun için ayrı ayrı değer girerek veritabanına kayıt ekleyebiliyorum. Fakat benim yapmak istediğim bunun ötesi. her sütun için ayrı ayrı değer girmek yerine sütun genişliğini bir fonksiyonla alıp txt verilerini bu sütun genişliğine göre ayırmak ve Veritabanına eklemek istiyorum.
            Umarım doğru anlatabilmişimdir.

            bu arada belirtmeliyim ki php’de çok yeniyim. Amacım araştırıp öğrenmek.

          • PHP ile her istediğin işlem için birden fazla yöntem bulursun ama burada senin aklındaki algoritmaya uyup uymaması önemli. Öncelikle sorunu çözmek için izlemen gereken adımları bir kağıda dök ve elde olan fonksiyonlar ile bu alanların hangilerini yapabilirsin incele. Mutlaka sorunu çözersin.
            Not:bir string ifadenin uzunluğunu almak için strlen kullanılır. Belki faydası olur.

  • Sayın Admin
    önerilerinizi dikkate alarak adım adım sona yaklaşıyorum.
    Tamamı bittikten sonra sizinle de paylaşacağım.
    son bir şey kaldı.
    aşağıdaki fonksiyonu kullanarak txt dosyasındaki verileri sütun genişliklerine göre parçaladıktan sonra ekrana yazdırıyorum. Fakat Türkçe karakter sorunu yaşıyorum. substr() yerine mb_substr() fonksiyonunu da kullandığımda hata alıyorum. bu sorunu nasıl aşabilirim?

    function txtBol($metin, $genislik){
    $parcala=array();

    foreach ($genislik as $sutunadi => $lenght)
    {
    $parcala[$sutunadi] = substr($metin, 0, $lenght);
    $metin = substr($metin, $lenght);
    }
    return $parcala;
    }

    • Türkçe dili için mutlaka mb_substr kullanmalısın. Daha öncede belirttiğim bir fonksiyon vardı onu da kullanmalısın. mb_strlen() kullanarak gerçek uzunluk üzerinde işlem yapabilirsin.
      Yazdığın örnek uygulamayı inceleyip müsait zamanda Kod örneği atmaya çalışırım. (Fırsat olursa)

  • hocam bendeki txt dosyanın içerigi her satır aynı uzunlukta degil ve tek bir dosyayı degil hergün her yeni birkaç txt geldiginde veritabanına kaydetmek istiyorum onu nasıl yapabiliriz REP00_B_350_SUM0_231103_1136.txt dosyamın içerigi aşagıdaki gibi
    001;B 350
    002;0
    003;0
    004;01:00:00 01-01-1970
    005;03:25:06 03-11-2023
    006;11:36:54 03-11-2023
    007;–;–;– ———-
    008
    009
    010;SIRMA
    011;1303770
    012;
    013;0
    014;0
    015;0
    016;0
    017;0
    018;0
    019;0
    020;0
    021;0
    022;0
    023;0
    024;0
    025;0
    026;0
    027;0
    028;0 ;0
    029;0 ;0
    030;0 ;0
    031;0
    032;0
    033;0 ;0
    034;0 ;53564
    035;0
    036;0
    037;4391
    038;4391
    039;0
    040;30000 ;0
    041;0
    042;
    043;000.000.000.000
    044;0
    045;0
    046;0
    047;4390
    048;
    C;A0;EXTR.A ;0 ;0 ;0 ;0 ; ;0 ;0 ;237 ;0
    C;A1;EXTR.A DOS.1;0 ;0 ;0 ;0 ; ;0 ;0 ;203 ;0
    C;A2;EXTR.A DOS.2;0 ;0 ;0 ;0 ; ;0 ;0 ;203 ;0
    C;A3;EXTR.A DOS.3;0 ;0 ;0 ;0 ; ;0 ;0 ;34 ;0
    C;A4;EXTR.A DOS.4;0 ;0 ;0 ;0 ; ;0 ;0 ;442 ;0
    C;A5;EXTR.A DOS.5;0 ;0 ;0 ;0 ; ;0 ;0 ;238 ;0
    C;B0;EXTR.B ;0 ;0 ;0 ;0 ; ;0 ;0 ;587 ;0
    C;B1;EXTR.B DOS.1;0 ;0 ;0 ;0 ; ;0 ;0 ;0 ;0
    C;B2;EXTR.B DOS.2;0 ;0 ;0 ;0 ; ;0 ;0 ;755 ;0
    C;B3;EXTR.B DOS.3;0 ;0 ;0 ;0 ; ;0 ;0 ;335 ;0
    C;B4;EXTR.B DOS.4;0 ;0 ;0 ;0 ; ;0 ;0 ;676 ;0
    C;B5;EXTR.B DOS.5;0 ;0 ;0 ;0 ; ;0 ;0 ;0 ;0
    C;C0;EXTR.C ;0 ;0 ;0 ;0 ; ;0 ;0 ;256 ;0
    C;C1;EXTR.C DOS.1;0 ;0 ;0 ;0 ; ;0 ;0 ;203 ;0
    C;C2;EXTR.C DOS.2;0 ;0 ;0 ;0 ; ;0 ;0 ;203 ;0
    C;C3;EXTR.C DOS.3;0 ;0 ;0 ;0 ; ;0 ;0 ;17 ;0
    C;C4;EXTR.C DOS.4;0 ;0 ;0 ;0 ; ;0 ;0 ;0 ;0
    C;C5;EXTR.C DOS.5;0 ;0 ;0 ;0 ; ;0 ;0 ;0 ;0