360° fotografie pro Váš Eshop z Vaší vlastní fotokomory. Ušetřete, foťte a upravujte 360° obrázky IN-HOUSE
Zobrazují se odpovědi 1 až 12 z 12

PHP vyhledat řádek

  1. Nějak mi to už nemyslí, ale potřebuji:
    1. otevřít soubor
    2. vyhledat řádek (podle části textu)
    3. celý nalezený řádek změnit novým textem
    (ne jenom část,ale celý řádek)
    4. uložit soubor

    Díky

  2. Co se právě děje na Webtrhu?
    Jonáš M. poptává: Web pro vinárnu
    Doda.design poptává: Vývoj robustnější aplikace - velice specifické
    Coe poptává: PHP, Nette programátor
  3. a musíš to být v php? V linuxu je na to třeba nástroj "sed".

    V php to bude složitější, záleží jak ten soubor je velký, z hlavy by mohlo fungovat něco takovéhoto:

    PHP kód:
    <?php

    $obsah 
    file('cesta_k_souboru.txt');
    function 
    nahrad_radek($radek) {
        
    $co_hledat="část řádku";
        
    $cim_nahradit="nový obsah pro řádek";
        if (
    stristr($radek$co_hledat)) {
            return 
    "$cim_nahradit\n";
        }
        return 
    $radek;
    }
    $novy_obsah array_map('nahrad_radek',$obsah);
    file_put_contents('cesta_k_novemu_souboru.txt'implode(''$novy_obsah));
    (Nezkoušel jsem to, psáno z hlavy). Každopádně cest jak toho docílit je spousta, tohle bude paměťově a výkonově velice náročné na velké soubory, u malých se to ztratí. Lepší ale na to použít specializovaný nástroj, třeba ten sed. Samozřejmě poté také záleží na kódování souboru a dalších maličkostech, lepší by bylo, kdybys sem hodil příklad.

  4. rychlejší variantu poradil google https://www.linuxquestions.org/quest...c-line-523519/

  5. Děkuji.

  6. Kód:
    preg_match_all('/word}/m', $textfile, $matches);

  7. Citace Původně odeslal kdosiodjinud Zobrazit příspěvek
    Kód:
    preg_match_all('/word}/m', $textfile, $matches);
    tohle ti ale najde jen řádky, které odpovídají předpisu, již ti ale neumožní je změnit, nevíš ani jejich pozici v textu (to bys musel přihodit flag PREG_OFFSET_CAPTURE) a ideálně to co hledáš escapovat přes preg_quote("word", "/"), jinak to bude házet syntax errory.

  8. Musí-li to být v PHP a je-li zdrojový soubor 'plain text' (a ne přehnaně velký, do desetitisíců řádků)...
    PHP kód:
    $lines file($filename);
    foreach(
    $lines as $i => $line) {
        
    preg_replace($pattern$replacement$lines[$i], $limit);
    }
    file_put_contents($filenameimplode("\n"$lines)); 

  9. ak mozem, upravim podla zadania:

    Kód:
    3. celý nalezený řádek změnit novým textem
    (ne jenom část,ale celý řádek)
    Kód:
    $findme = 'hladany_text';
    $replace = 'nahrada riadku';
    
    $lines = file($filename);
    foreach($lines as $i => $line) {
        if ( strpos($line, $findme) !== false ) {
         $line[$i] = $replace;
         break;
        }
    }
    file_put_contents($filename, implode("\n", $lines));

  10. Citace Původně odeslal ne Zobrazit příspěvek
    ak mozem, upravim podla zadania:

    Kód:
    3. celý nalezený řádek změnit novým textem
    (ne jenom část,ale celý řádek)
    Kód:
    $findme = 'hladany_text';
    $replace = 'nahrada riadku';
    
    $lines = file($filename);
    foreach($lines as $i => $line) {
        if ( strpos($line, $findme) !== false ) {
         $line[$i] = $replace;
         break;
        }
    }
    file_put_contents($filename, implode("\n", $lines));
    drobná poznámka, funkce strpos zohledňuje velikost písmen, proto jsem ve svém kódu volil funkci stristr. Je otázka co je vhodnější varianta :)

  11. Btw. nezkoušel jsem ten kód - možná bych ještě otestoval, jaké zakončení řádků má ten soubor - někdy končí znakem #13, někdy #10, někdy jsou oba. Podle toho upravit $line, nebo implode().

  12. Děkuji všem.
    Jde o klasický textový soubory o max. 300 řádcích kódu.
    Vyhledávat budu podle MD5 textu.
    Takže bych soubor načetl klidně do array rozdělené podle #13.

    Pak by se mohlo použít při nalezení řádku např. 4
    $line[4] = nový text.

  13. Citace Původně odeslal TomášX Zobrazit příspěvek
    drobná poznámka, funkce strpos zohledňuje velikost písmen, proto jsem ve svém kódu volil funkci stristr. Je otázka co je vhodnější varianta :)
    case insensitive je lepsia fc. stripos :)

Hostujeme u Server powered by TELE3