Kodları lütfen aşağıdaki butonları kullanarak renklendirin. Örnek: <php> echo "Selam Dünya"; </php>
Yardım
karakter kaldı

srt dosyası çözmek/parse

1 00:00:00,074 --> 00:00:02,564 Breaking Bad'in önceki sezonunda...

2 00:00:02,663 --> 00:00:04,393 Karını öldürürüm.


srt dosyalarının içeriği bildiğiniz üzere yukarıdaki şekilde ilerliyor. benim bir srt dosyasını açıp, içindeki bütün numara, zaman ve altyazıları bir array'e falan atayarak bir döngü içinde ekrana basmak istiyorum. nasıl bir yol izleyeceğim?
+0
-0
Cevaba KatılıyorumKatılmıyorum
Cevap Yaz Yorum Yaz Arşivime Ekle Takip Et

Doğru Cevap

  • Kesali adlı üyenin fotoğrafı
    11 yıl önce yazılmış
    11 yıl önce güncellenmiş
    208 cevap - 2 soru
    Yukardaki gibi ise çok zor olmasa gerek. Öncelikle file() fonksiyonu ile her bir satırı rahatlıkla array içine alabilirsiniz. Sonra foreach dongusunu arrayınızı sokup regular expression ile ilgili biligileri edinebilirsiniz.
    $srt_file = file('deneme.srt',FILE_IGNORE_NEW_LINES);
    $regex = "/^(\d)+ ([\d]+:[\d]+:[\d]+,[\d]+) --> ([\d]+:[\d]+:[\d]+,[\d]+) (\w.+)/";
    
    foreach($srt_file as $srt){
    
        preg_match($regex,$srt,$srt_lines);
        
        print_r($srt_lines);
    	echo '<br />';
    
    }
    
    
    • remy1 adlı üyenin fotoğrafı remy1
      hocam ekrana yüzlerce Array ( ) yazdı sadece?
      11 yıl önce yazılmış
    • Kesali adlı üyenin fotoğrafı Kesali
      Verdiğiniz örnek iki satırı srt uzantılı bir dosyaya ekleyince istediğiniz gibi gösteriyor. Bana örnek bir srt dosyası gönderirmisiniz. Kontrol edelim.
      11 yıl önce yazılmış
    • remy1 adlı üyenin fotoğrafı remy1
      hocam problemi anladım. buraya eklerken satır atlamalar yok olmuş. bütün srt dosyaları:

      1
      00:00:00,093 --> 00:00:03,040
      <i>Breaking Bad'in önceki bölümlerinde...</i>
      
      2
      00:00:03,084 --> 00:00:05,889
      Risinli sigara
      bu sabah paketimdeydi!
      


      şeklinde oluyor. buna göre kodlarda nasıl bir değişikliğe gideceğiz?

      bir de ekrana array düzeninde değil de direkt altyazı dosyasının içindeki gibi basabilirsek iyi olur.
      11 yıl önce yazılmış 11 yıl önce güncellenmiş
    • Kesali adlı üyenin fotoğrafı Kesali
      Biraz daha kısalttım regex i ([\d]+)\r\n([\d,:]+) -->; ([\d,:]+)\r\n(.*\r\n.*) bu şekilde istediğin sonucu verecektir.
      print_r kullandığım için array olarak veriyor.

      Eğer sadece srt dosyasının içeriğini yazdırmak istiyorsanız. Zaten regex e gerek yok
      echo file_get_contents('deneme.srt');

      Zaten yazdırır.

      Aşağıdaki hali ile srt dosyasını array içine alabilirsiniz.

      <?php
      $srt_file = file_get_contents('deneme.srt');
      $regex = "/([\d]+)\r\n([\d,:]+) --> ([\d,:]+)\r\n(.*\r\n.*)/";
      
          preg_match_all($regex,$srt_file,$srt_lines,PREG_SET_ORDER);
          print_r($srt_lines);
      ?>
      


      Eğer herbir line ı göstermek istiyorsanızı bu örnekteki gibi işinizi görür.

      $srt_file = file_get_contents('deneme.srt');
      $regex = "/([\d]+)\r\n([\d,:]+) --> ([\d,:]+)\r\n(.*\r\n.*)/";
      
          $line = preg_match_all($regex,$srt_file,$srt_lines,PREG_SET_ORDER);
          //print_r($srt_lines);
      	foreach($srt_lines as $srt_line){
      	echo $srt_line[1],' ';
      	echo $srt_line[2],' ';
              echo $srt_line[3];
      	echo '<pre>';
      	echo $srt_line[4];
      	echo '</pre>';
      	echo '<br />';
      	}
      
      11 yıl önce yazılmış 11 yıl önce güncellenmiş

Cevaplar

Hiç cevap bulunamadı.