Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

bash lub php - Skrypt dodający <br> na końcu każdej linii pliku tekstowego

07 Sep 2014 19:08 2007 16
  • Level 36  
    Witam

    Mam plik tekstowy exceptionsitelist o zawartości:

    Code:

    google.pl
    strona1.com
    strona2.com
    stronan.com


    Potrzebuję napisać skrypt (bash), który zmodyfikuje ten plik dopisując na końcu każdej linii HTMLowy znacznik <br>.

    Jeszcze lepiej byłoby gdyby pozamieniał te linie na linki:

    Code:

    <a href="google.pl">google.pl</a><br>
    <a href="strona1.com">google.pl</a><br>
    <a href="strona2.com">google.pl</a><br>
    <a href="strona3.com">google.pl</a><br>


    Z góry dzięki za podpowiedzi.

    Dodano po 10 [minuty]:

    Zdaje się, że tu mam rozwiązanie w PHP:

    http://php.kedziora.info/?id=18

    Tylko w jaki sposób do zmiennej $string:

    $string = 'Jakiś tam tekst z urlami';

    przypisać nie tekst w cudzysłowach a zawartość pliku tekstowego ?
  • Helpful post
    Level 28  
    Wykorzystaj file_get_contents.
    Code: php
    Log in, to see the code
  • Level 36  
    Już prawie działa:

    Code:
    <?php
    

    function zmien($st) {
       // URLe
       $st = preg_replace("/(https?|ftp|news)(:\/\/[[:alnum:]@#%\&_=?\/\.-]+)/","<a href='\\1\\2'>\\1\\2</a>",$st);

       // maile
       $st = preg_replace("/([[:alnum:]_\.:-]+@[[:alnum:]_\.:-]+)/i","<a href='mailto:\\1'>\\1</a>",$st);

       return $st;
    }

     $string = fread(fopen("exceptionsitelist", "r"), filesize("exceptionsitelist"));

    echo '<P><b>String:</b><br>' . $string . '<br><br>';
    echo '<b>Działanie:</b><br>' . zmien($string);

    ?>



    Jeszcze tylko:

    - każdy link w osobnej linii trzeba by jakoś umieścić,
    - niech zamienia również adresy rozpoczynające się bezpośrednio od "www."
  • Helpful post
    Level 42  
    Hm, akurat ten zapis, który jest, będzie trudno przerobić na uniwersalny. Zrób drugą taką zamianę tyle że cały ciąg od aromu protokołu (razem z dwoma ukośnikami i dwukropkiem) zamień na ciąg www\.
    Linki w osobnej linii ale w rozumieniu źródła czy HTML? Jak to 1, to dopisz po prostu znak nowej linii (\r\n), jak WWW to dostaw <br> w ciągu "zamień na".
  • Level 28  
    nie jestem pewien czy oto chodzilo:
    Code: php
    Log in, to see the code
  • Level 36  
    Kolejny update:

    Code:
    <?php
    

    function zmien($st) {
       // URLe
       $st = preg_replace("/(https?|ftp|news)(:\/\/[[:alnum:]@#%\&_=?\/\.-]+)/","<a href='\\1\\2'>\\1\\2</a>",$st);

       // maile
       $st = preg_replace("/([[:alnum:]_\.:-]+@[[:alnum:]_\.:-]+)/i","<a href='mailto:\\1'>\\1</a>",$st);

       return $st;
    }

     $string0 = fread(fopen("exceptionsitelist", "r"), filesize("exceptionsitelist"));
     $string = nl2br($string0);

    echo '<P><b>String:</b><br>' . $string . '<br><br>';
    echo '<b>Działanie:</b><br>' . zmien($string);

    ?>


    Jeszcze tylko, żeby mi każdą linię na link przerabiało (nie tylko te, zaczynające się od http:// itp.

    Dodano po 23 [minuty]:

    Dobra, a jeśli plik exceptionsitelist zawiera tylko i wyłącznie linki (jedna linia = jeden link).

    Code:
    windowsupdate.microsoft.com
    
    google.pl


    Wówczas musiałbym zrezygnować z detekcji czy to http, www, itp. Jak to zmienić, aby interpretowało każdą linią jako link, i zamieniało owy tekst w link ?
  • Helpful post
    Level 28  
    Code: php
    Log in, to see the code

    Niewiem czemu pobiera newline ale dziala.
    Czemu niechcesz wykorzystac z mojego pierwszego postu?
  • Level 36  
    Hmm...

    zamiast odnosić do "google.pl" odnosi do "http://192.168.1.1/log/sites/google.pl%3Cbr%20/%3E"

    Zaraz zerknę raz jeszcze na twój pierwszy sposób.
  • Level 36  
    witoldwitoldowicz wrote:
    Czemu niechcesz wykorzystac z mojego pierwszego postu?


    Nie wiem co źle robię, ale nie działa:

    Code:
    <body style="background-image:url(Nauka.jpg); background-repeat:no-repeat;">
    

    <?php

    $file = fopen("exceptionsitelist", "r") or die("Unable to open file!");
    $text=file_get_contents($file);
    $lines=explode("\r\n", $text);
    foreach ($lines as $line){
    echo '<a href="'.$line.'">'.$line."</a><br>\r\n";
    }

    ?>

    </body>
  • Level 28  
    $text= file_get_contents("exceptionsitelist");
  • Level 36  
    witoldwitoldowicz wrote:
    $text= file_get_contents("exceptionsitelist");


    Już sprawdzam :-)

    W międzyczasie dodam, że to co poniżej byłoby rozwiązaniem działającym, gdyby nie to, że funkcja nl2br ładuje mi <br> do linku i ten nie działa.

    Code:

    <body style="background-image:url(Nauka.jpg); background-repeat:no-repeat;">
    <h2 style="position: absolute; left: 800px; top: 10px;">

    <?php

    function zmien($st) {
    #   // URLe
    #   $st = preg_replace("/(https?|ftp|news)(:\/\/[[:alnum:]@#%\&_=?\/\.-]+)/","<a href='\\1\\2'>\\1\\2</a>",$st);

    #   // maile
    #   $st = preg_replace("/([[:alnum:]_\.:-]+@[[:alnum:]_\.:-]+)/i","<a href='mailto:\\1'>\\1</a>",$st);

        $st = preg_replace("/^(.*)$/m","<a href='http://\\1'>\\1</a>",$st);

       return $st;
    }

     $string0 = fread(fopen("exceptionsitelist", "r"), filesize("exceptionsitelist"));
     $string = nl2br($string0);
    #  $string = $string0;

    #echo '<P><b>String:</b><br>' . $string . '<br><br>';
    echo zmien($string);

    ?>
    </h2>
    </body>
  • Level 28  
    Linki powinny zawierac pelny url( http://,https://,ftp:// ).
    Code: php
    Log in, to see the code

    Pracujesz w windowsie czy w linuxie?
  • Level 36  
    witoldwitoldowicz wrote:

    Czemu niechcesz wykorzystac z mojego pierwszego postu?


    Efekt kodu:

    Code:
    <body style="background-image:url(Nauka.jpg); background-repeat:no-repeat;">
    

    <?php

    $text= file_get_contents("exceptionsitelist");
    $lines=explode("\r\n", $text);
    foreach ($lines as $line){
    echo '<a href="'.$line.'">'.$line."</a><br>\r\n";
    }

    ?>

    </body>


    jest taki:

    bash lub php - Skrypt dodający <br> na końcu każdej linii pliku tekstowego


    A efekt kodu:

    Code:
    <body style="background-image:url(Nauka.jpg); background-repeat:no-repeat;">
    

    <?php

    $text= file_get_contents("exceptionsitelist");
    $lines=explode("\r\n", $text);
    foreach ($lines as $line){
    echo '<a href="http://'.$line.'">'.$line."</a>";
    echo "<br><br>test<br><br>test<br><br>test";
    }

    ?>

    </body>


    Jest następujący.

    bash lub php - Skrypt dodający <br> na końcu każdej linii pliku tekstowego

    Czemu nie rozdziela linków?

    Dodano po 2 [minuty]:

    witoldwitoldowicz wrote:
    Pracujesz w windowsie czy w linuxie?

    Po stronie serwera linux, po stronie klienta windows.
    Zatem odpowiedź brzmi linux.
  • Level 28  
    Sprobuj w explode zamiast "\r\n" PHP_EOL.
    Wyslij zkompresowany plik exceptionsitelist.
  • Level 36  
    witoldwitoldowicz wrote:
    Sprobuj w explode zamiast "\r\n" PHP_EOL.
    Wyslij zkompresowany plik exceptionsitelist.


    PHP_EOL nie działa (lub źle używam).

    Plik w załączniku.
  • Level 36  
    W Total Commander

    - pod wywołaniem F3 widzi oddzielne linie
    - pod wywołaniem F4 widzi jedną linię

    Nie jestem pewien dlaczego podgląd i edycja są wyświetlane inaczej, w każdym razie tak to wygląda.