• 25-08-2016, 09:30:14
    #1
    Arkadaşlar bir kaç aydır arayıp bulamadığım aslında varlığından haberim olan bir PHP koduna ihtiyacım oldu.

    Elimde birden fazla txt dosyası var ornek:
    1.txt
    2.txt
    3.txt

    her dosyanın içerisinde
    111
    222
    333 satırları var
    beni 4. dosya içerisinde bu satırları
    111222333

    olarak birleştirmek istiyorum.
    Yardımınızı bekliyorum.
  • 25-08-2016, 09:54:10
    #2
    Misafir adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar bir kaç aydır arayıp bulamadığım aslında varlığından haberim olan bir PHP koduna ihtiyacım oldu.

    Elimde birden fazla txt dosyası var ornek:
    1.txt
    2.txt
    3.txt

    her dosyanın içerisinde
    111
    222
    333 satırları var
    beni 4. dosya içerisinde bu satırları
    111222333

    olarak birleştirmek istiyorum.
    Yardımınızı bekliyorum.


    eğer dediğiniz gibi isimler düzenliyse ve yanlış anlamadıysam


    <?php
    
    //toplam dosya sayınız
    $dosya_sayisi = 4;
    
    //atanacak değer
    $son_deger ="";
    
    //tüm dosyaların içini okutup bir değere atıyoruz.
    for($i=1;$i<$dosya_sayisi;$i++){
    	
    	$son_deger.=file_get_contents($i.".txt");
    	
    	
    }
    
    //1 2 3 .txt lerin değerlerini 4. txt e ye geçiriyoruz.
    file_put_contents("4.txt",$son_deger);
    
    //ekrana sonucu yazdırmak içinde
    echo file_get_contents("4.txt");
    
    ?>
  • 25-08-2016, 12:24:54
    #3
    Mesajım bulunsun pc ye geçince ufak bir örnek ekliycem

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 12:24:54 -->-> Daha önceki mesaj 11:41:35 --

    Misafir adlı üyeden alıntı: mesajı görüntüle
    Arkadaşlar bir kaç aydır arayıp bulamadığım aslında varlığından haberim olan bir PHP koduna ihtiyacım oldu.

    Elimde birden fazla txt dosyası var ornek:
    1.txt
    2.txt
    3.txt

    her dosyanın içerisinde
    111
    222
    333 satırları var
    beni 4. dosya içerisinde bu satırları
    111222333

    olarak birleştirmek istiyorum.
    Yardımınızı bekliyorum.
    İşinizi görür sanarım.


    <?php
    $bir = fopen("1.txt",'r'); 
    $birdizi = Array();
    while(!feof($bir)){  
            $satirbir = fgets($bir); 
    		$birdizi[] = $satirbir;
    } 
    fclose($bir); 
    
    $iki = fopen("2.txt",'r'); 
    $ikidizi = Array();
    while(!feof($iki)){  
            $satiriki = fgets($iki); 
    		$ikidizi[] = $satiriki;
    } 
    fclose($iki);  
    
    $uc = fopen("3.txt",'r'); 
    $ucdizi = Array();
    while(!feof($uc)){  
            $satiruc = fgets($uc); 
    		$ucdizi[] = $satiruc;
    } 
    fclose($uc); 
    
    touch("4.txt");
    $dosya = fopen("4.txt", 'w');
    
    for($i = 0; $i < count($birdizi); $i++){
    	$veri = trim($birdizi[$i]).trim($ikidizi[$i]).trim($ucdizi[$i])."\r\n";
    	fwrite($dosya, $veri);
    }
    
    fclose($dosya);
    ?>
  • 25-08-2016, 17:56:14
    #4
    Henüz test etmedim.. Şu an kopyaladım kodu Maus 'ta bekliyor öyle
    bir kaç dakika içinde test edicem . Teşekkür ederim.

    Edit:
    Arkadaşım eline, aklına sağlık. çok teşekkür ederim. çalıştı .. bunu yapan bir program var elimde ama 10 MB civarı bir text dosyası iÇin dakikalarca bekliyordum.. ayrıca olur olmadık yerlerde gizli hata kodları oluŞturuyordu.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:48:26 -->-> Daha önceki mesaj 16:41:15 --

    Bunu şimdi gordum. Ben bir istedim Allah iki verdi.. Buda çalışırsa ikisinide kullanıcam. Bu forumda rep vermek gibi birsey varmıdır bilmiyorum +++

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 16:54:42 -->-> Daha önceki mesaj 16:48:26 --

    evet şimdi gordum ve bunu denedim ama bunda bir sorun var..
    ekrana istedigim gibi yazıyor yan yana..
    olusturdugu txt icerisine alt alta sonuç gösteriyor.

    ekrana yazdıgını kopyala yapıstır yapamam cunku bekledigim sonuc cok MB tutuyor.
    kucuk bir oynama ile kod iş gorur hale gelir.

    benim istedigim sonuç şu

    1.txt icerisinde alt alta yazılı olan
    1
    1
    1

    satırları

    2.txt icerisindeki alt alta yazılı olan
    2
    2
    2
    satırları ile birleştiginde

    3.txt deki sonuç şu olacak

    12
    12
    12

    tabi kullanacagım text sayısı 10/15 arası. bu txt lerdeki satır sayısı bazen 1 milyon oluyor.

    her txt deki satır sayısıda eşit olacak. yani birisi 1 milyon ise digeride 1 milyon satır.

    ilgilendiğin için teşekür ederim.

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 17:56:14 -->-> Daha önceki mesaj 16:54:42 --

    Mert isimli arkadasın dosyası calıŞtı sorunsuz, ama sizin yazdıĞınız kod daha kolay kullanışlı. fakat sonuçları alt alta sıralıyor. ben sonuÇ dosyası oluŞturacak ( txt Şeklinde ) ve yan yana sıralamasını istemiŞtim. olur veya olmaz ilgilendiĞiniz için teŞekkur ederim.
  • 25-08-2016, 18:18:08
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    <?php 
    
        for($i=1; $i<=5; $i++){
            for($j=1; $j<=100000; $j++){
                file_put_contents("test/$i.txt", rand(100,999) . PHP_EOL, FILE_APPEND);
            }
        }
    <?php
    
        // [0-9].txt başlangıç dosyası (1.txt)
        $fFirst = 1;
    
    	// [0-9].txt sayısını belirler (1.txt, 2.txt, 3.txt..)
    	$fCount = 5;
    
        // Dosyalar hangi dizinde ?
        $d = "./test";
    
        // Çıktı dosyasının adı
        $fOutput = $d . DIRECTORY_SEPARATOR . "cikti.txt";
    
        if(!file_exists($d)){
            exit("Dizin bulunamadi!");
        }
    
        $afHandle = array();
        for($i = 1; $i<=$fCount; $i++){
            $p = $d . DIRECTORY_SEPARATOR . $i . ".txt";
    
            if(file_exists($p)) {
                $afHandle[$i] = fopen($p, "r");
    
                if(!$afHandle[$i]) {
                    exit("$i.txt dosyasi acilamadi!");
                }
            }
        }
    
        while(!feof($afHandle[$fFirst])){
            for($i = 1; $i<=$fCount; $i++){
                file_put_contents($fOutput, rtrim(fgets($afHandle[$i])), FILE_APPEND); // Memory <3
            }
    
            file_put_contents($fOutput, PHP_EOL, FILE_APPEND);
            usleep(50); // CPU <3
        }
    
        exit("OK");
    5 adet 100k satır içeren test dosyası oluşturdum ardından tüm dosyaların satırlarını birleştirdim, %1 işlemci kullanımı ve sabit memory kullanımı ile işlem tamamlandı.