Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 11

Temat: Problem z "s///"

  1. #1
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie Problem z "s///"

    Witam. Od niedawna ucze sie perla, ciezko zdobyc informacje wiec pytam tutaj.
    Proboje zrobic cos takiego:
    Kod:
    @tablica = ("asd", "dsa", "sdg");
    $ile = @tablica;
    for($i=0; $i < $ile; $i++)
    {
    $wynik =~ s/$tablica[$i]/****/;
    }
    ale to poprostu nie dziala wiec tutaj moje pytanie:
    Jak uzyc zmiennej w "s///" ?
    I drugie nie zwiazane z przykladowym kodem:
    Jak porownywac zmienne elementy tablicy? Tzn user ma mozliwosc dopisania do tablicy czego chce i moga to byc cyfry lub litery a jesli daje eq lub == to wypluwa mi bledy.
    Z gory dzieki.
    Ostatnio edytowane przez user : 07-24-2008 - 15:23

  2. #2
    Avatar Hardiel
    Hardiel jest offline Damian
    Zarejestrowany
    May 2008
    Skąd
    Kielce
    Postów
    121

    Domyślnie

    A nie lepiej by było tego zrobić na pętli foreach?

  3. #3
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    Tego jeszcze nie potrafie

  4. #4
    Avatar Hardiel
    Hardiel jest offline Damian
    Zarejestrowany
    May 2008
    Skąd
    Kielce
    Postów
    121

    Domyślnie

    http://www.bromber.artvia.net/arek/linki/perlkurs4.htm ciekawy art ja bym raczej w tą stronę szedł a co do s/// nie spotkałem się z konstrukcją żeby zawierała zmienna podstawowa to $Text =~ s/wzór/nowa wartość/;

  5. #5
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    W moim przypadku da sie tylko tak... tzn moge to rozpisac ale...

  6. #6
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Witaj.
    Wydaje mi się, że skrypt nie działa ponieważ zmienna $wynik jest pusta i dlatego nie następuje żadna zamiana. Nie wiem czy to jest fragment skyptu czy całość, ale jeżeli zmienna $wynik "coś" posiada, to najpierw nastąpi interpolacja, a potem zamiana w przypadku znalezienia wzorca. Być może masz na myśli przypisanie do zmiennej $wynik jakiejś wartości, a następnie zamianę, na przykład w taki sposób:
    Kod:
    ($wynik = $tablica[$i]) =~ s/$tablica[$i]/****/;
    Jeszcze jedna uwaga. Jeżeli nie masz włączonej opcji wyświetlania ostrzeżeń, to w przypadku pustej zmiennej $wynik nie pojawi się żadne ostrzeżenie. Natomiast przy włączonej opcji, będą ostrzeżenia o niezainicjowanej wartości.

  7. #7
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    $wynik zawiera tekst w ktorym bede zamienial przeklenstwa na znaczki ****. Dziala to tak: petla zamienia przeklenstwa z tablicy @tablica na **** w zmiennej $wynik. Wiec kod ktory podales raczej nie bedzie dzialal tak jak potrzebuje.

  8. #8
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    Teraz, po dokładniejszym opisaniu problemu, sądzę, że podany kod powinien wykonać to co zamierzasz. Jednak jeżeli podasz to co otrzymujesz i to co chciałbyś otrzymasz, to będziemy w stanie bardziej pomóc w tej kwestii. Kod wydaje się być dobry więc ciężko w tym momencie określić co jest źle.

  9. #9
    Zarejestrowany
    Jul 2008
    Postów
    18

    Domyślnie

    Kod:
    $message = "wiadomosc (test, lol, ble, asd, dsa) testowa";
    @slowa = ("test", "ble", "dsa");
    $ile = @slowa;
    for($i=0; $i < $ile; $i++)
    {
    $message =~ s/$slowa[$i]/****/;
    }
    print $message."\n\n";
    Wynik to: "wiadomosc (****, lol, ****, asd, ****) testowa"
    (wczesniej mialem zle robiona tablice i dlatego nie dzialalo)
    Chcial bym zeby byl wynik: "wiadomosc (****, lol, ****, asd, ****) ****owa" ale nie moge dojsc do tego jak to zrobic.

  10. #10
    Zarejestrowany
    Nov 2007
    Postów
    54

    Domyślnie

    W takim wypadku należy dodać jedną literkę do Twojego kodu.
    Kod:
    $message = "wiadomosc (test, lol, ble, asd, dsa) testowa";
    @slowa = ("test", "ble", "dsa");
    $ile = @slowa;
    for($i=0; $i < $ile; $i++)
    {
    $message =~ s/$slowa[$i]/****/g;
    }
    print $message."\n\n";
    Ta jedna literka g (global) powoduje, że zamienione zostaną wszystkie wystąpienia frazy, a nie tylko do momentu napotkania pierwszej z nich.

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. Problem z "kombinującym" użytkownikiem sieci lokalnej
    By spidernet in forum Newbie - dla początkujących!
    Odpowiedzi: 8
    Autor: 01-05-2008, 09:24
  2. "Problem SM-zupełny"
    By mr. fix it in forum Problemy/Skargi
    Odpowiedzi: 1
    Autor: 04-01-2007, 12:46

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj