🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.php
18 messages
18 total messages Started by VipeR Fri, 24 Aug 2001 09:15
Jak usunac wiersz?
#847
Author: VipeR
Date: Fri, 24 Aug 2001 09:15
21 lines
1325 bytes
Wiem, ze to pytanie wyda sie niektorym trywialne, ale tym latwiej mysle
bedziecie mogli mi pomoc.
Otoz zalozmy, ze mam plik tekstowy:

Linia1
Linia2
Linia3

i chcialbym usunac Linie 2 tak, aby  otrzymac

Linia1
Linia3

Probowalem str_replace, ale wtedy miedzy Linia1 i Linia3 pojawia sie odstep.
Prosze o pomoc, tylko nie typu "Zajrzyj do manuala", w koncu po to chyba
jest ta
grupa, zeby sobie wzajemnie pomagac, huh?

pozdr,

VIpeR
Re: Jak usunac wiersz?
#848
Author: bzdurqa
Date: Fri, 24 Aug 2001 09:33
15 lines
1435 bytes
VipeR <viper@demo.pl> napisał:
> Otoz zalozmy, ze mam plik tekstowy:
> Linia1
> Linia2
> Linia3
> i chcialbym usunac Linie 2
chcesz usunąć tekst 'Linia 2', drugą linię w pliku, a może co drugą linię?
w pierwszym przypadku str_replace zadziała, ale pamiętaj, że po 'Linia2'
jest jeszcze (niewidoczny) znak końca linii '\n' lub '\r\n'.
opcja nr 2 i 3 - robisz licznik linii przy czytaniu z pliku i odpowiednim
if'em eliminujesz niepożądane linie:
if($cnt!=2) {        // dla nieparzystych linii: if (!($cnt%2))
    // rób coś z linią
}
bzd.
Re: Jak usunac wiersz?
#852
Author: Tomasz Nidecki
Date: Fri, 24 Aug 2001 09:36
18 lines
1977 bytes
In article <9m5658$ph0$1@news.tpi.pl>, "VipeR" <viper@demo.pl> wrote:

> Probowalem str_replace, ale wtedy miedzy Linia1 i Linia3 pojawia sie 
> odstep.

Wczytujesz plik do tablicy (po jednej linii do komorki) i usuwasz z 
tablicy komorke, potem zapisujesz z powrotem - to jedno rozwiazanie 
mozliwe :).

Mozesz tez wziac pod uwage \n przy str_replace przeciez (i w 
searchowanym i w replace'owanym).

-- 
tomasz 'tonid' nidecki, zoliborz, warszawa, poland
mailto:tonid@tonid.net http://endemic.tonid.net
Duct tape is like the force. It has the light side,
the dark side and keeps the universe together...
PGP: 11E3 2772 7E95 8962 F932  7FAA 72F2 4CCC 1C70 DB83
Re: Jak usunac wiersz?
#849
Author: VipeR
Date: Fri, 24 Aug 2001 09:41
27 lines
1965 bytes
No wlasnie mam na mysli pozbycie sie znaku \n
W moim skrypcie mam cos takiego:

  $fp = fopen($download_log, "w");
  $x = str_replace($usun,"", $x);
  flock($fp,2);
  $fw = fwrite($fp, $x);
  flock($fp,3);
  fclose($fp);

I str_replace zastepuje wyszukany przez skrypt string $usun pusta linia.
Tylko jak potem jeszcze usunac ta linie, aby wszystkie znajdujace sie pod
nia
przesunely sie do gory?

pozdr,

VipeR


> chcesz usunąć tekst 'Linia 2', drugą linię w pliku, a może co drugą linię?
> w pierwszym przypadku str_replace zadziała, ale pamiętaj, że po 'Linia2'
> jest jeszcze (niewidoczny) znak końca linii '\n' lub '\r\n'.
> opcja nr 2 i 3 - robisz licznik linii przy czytaniu z pliku i odpowiednim
> if'em eliminujesz niepożądane linie:
> if($cnt!=2) {        // dla nieparzystych linii: if (!($cnt%2))
>     // rób coś z linią
Re: Jak usunac wiersz?
#850
Author: bzdurqa
Date: Fri, 24 Aug 2001 09:56
4 lines
1033 bytes
VipeR <viper@demo.pl> napisał:
>   $x = str_replace($usun,"", $x);
$x = str_replace($usun."\n", "", $x);
bzd.
Re: Jak usunac wiersz?
#853
Author: 7th Wojciech Jukowski
Date: Fri, 24 Aug 2001 10:04
14 lines
1166 bytes
witam,

VipeR wrote:
> i chcialbym usunac Linie 2 tak, aby  otrzymac

hmm na server-side kiedys puscilem:

if(isset($nr)){$tmp=0;$F=file('plik.input');$P=fopen('plik.input','w');
for(;$tmp<sizeof($F);)if(++$tmp!=$nr)fwrite($P,$F[$tmp-1]);fclose($P);}

usuwa linie o numerze $nr z pliku 'plik.input'.

-- 
wojciech.jukowski
Re: Jak usunac wiersz?
#864
Author: jcebo
Date: Fri, 24 Aug 2001 10:49
8 lines
1065 bytes
użyj zamiast str_replaca, ereg_replace i usuwaj nie "linia 2" tylko "linia 2\n"

jcebo
[ www.graf-komp.win.pl ]


-- 
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
Re: Jak usunac wiersz?
#865
Author: 2ker
Date: Fri, 24 Aug 2001 11:38
18 lines
1400 bytes

jcebo@poczta.onet.pl wrote:
> 
> uzyj zamiast str_replaca, ereg_replace i usuwaj nie "linia 2" tylko "linia 2\n"
> 

regexy sa duzo wolniejsze od zwyklego str_replace, a poza tym jezeli to
jest log (tj. duzy plik) to raczej sugerowalbym nie wczytywac calosci na
raz do pamieci, tylko czytac plik po linii np. przez fgets(), potem
obciac "white space" z konca przez chop(), porownac i jesli linia jest
ok to ja zpisywac do nowego pliku. Na koncu robisz rename() (z
ewentualnym wczesniejszym backupem) i juz.


-- 
2ker
uin: 5901548
isset [bylo : Re: Jak usunac wiersz?]
#854
Author: MySZ
Date: Fri, 31 Aug 2001 00:13
11 lines
1212 bytes
> if(isset($nr))
> --
> wojciech.jukowski

pytanie odnosnie isset - co daje jej stosowanie? bo ja w wielu przypadkach
robilem tak, ze dawalem po prostu if ($zmienna) {rob co trza} elseif
(!$zmienna) {rob co innego}
jaka jest roznica???
sorry za lameriade ;)

    MySZ
Re: isset [bylo : Re: Jak usunac wiersz?]
#855
Author: Piotr Kęplicz
Date: Fri, 31 Aug 2001 08:52
20 lines
1823 bytes
MySZ <msztol@poczta.onet.pl>:
: pytanie odnosnie isset - co daje jej stosowanie? bo ja w wielu przypadkach
: robilem tak, ze dawalem po prostu if ($zmienna) {rob co trza} elseif
: (!$zmienna) {rob co innego}
: jaka jest roznica???

Różnica ujawnia się w momencie, w którym chcesz rozróżnić czy
zmienna została w ogóle ustawiona, czy też ma wartość 0.
Co więcej, isset() bardzo się przydaje przy sprawdzaniu danych z
formularzy z przyciskami w postaci grafik. Przeglądarka graficzna
przekaże Ci współrzędne miejsca kliknięcia przycisku, ale np. Lynx
ustawi obie współrzędne na 0, i co wtedy?

BTW, naprawdę używasz konstrukcji typu:
if ($zmienna) ...; elseif (!$zmienna) ....; ?

--     ||
  ||)) ||<<   ==>   Nowy Polski Słownik Pijacki   ==>   http://pijacki.ez.pl/
  ||
                ,,Always look on the bright side of death...''
Re: isset [bylo : Re: Jak usunac wiersz?]
#856
Author: MySZ
Date: Fri, 31 Aug 2001 09:20
14 lines
1579 bytes
> Różnica ujawnia się w momencie, w którym chcesz rozróżnić czy
> zmienna została w ogóle ustawiona, czy też ma wartość 0.

czaje, na priv jush dostalem wyjasnienie, dzieki :)

> BTW, naprawdę używasz konstrukcji typu:
> if ($zmienna) ...; elseif (!$zmienna) ....; ?

acha, pare razy mi to starczylo :) of koz proste zastosowania, typu czy
strona ma wyswietklic formularz, czy wykonac dzialanie (przesylam zmienna,
jesli nie istnieje to forma, jak istnieje to wykonuje zadanie :)
moshe i niewlasciwie/zle, ale dziala ;))))

    MySZ
Re: isset [bylo : Re: Jak usunac wiersz?]
#859
Author: leming nine
Date: Fri, 31 Aug 2001 09:23
9 lines
1108 bytes
> BTW, naprawdę używasz konstrukcji typu:
> if ($zmienna) ...; elseif (!$zmienna) ....; ?

Niestety, już kilkukrotnie spotkałem się z taką manierą
w różnych tutorial'ach (nie pamiętam nawet gdzie i kiedy).
To bardzo zły nawyk.

--
l9
Re: isset [bylo : Re: Jak usunac wiersz?]
#857
Author: Darek Sieradzki
Date: Fri, 31 Aug 2001 09:32
31 lines
2072 bytes
" MySZ" <msztol@poczta.onet.pl> wrote in news:9mnksh$d9v$1@news.tpi.pl:

>> BTW, naprawdę używasz konstrukcji typu: if ($zmienna) ...; elseif
>> (!$zmienna) ....; ? 
> 
> acha, pare razy mi to starczylo :) of koz proste zastosowania, typu czy
> strona ma wyswietklic formularz, czy wykonac dzialanie (przesylam
> zmienna, jesli nie istnieje to forma, jak istnieje to wykonuje zadanie
> :) moshe i niewlasciwie/zle, ale dziala ;))))

To ja podkrece jasnosc :-)
Piotrkowi chodzilo o subtelna roznice miedzy:

if ($zmienna) {...} elseif (!$zmienna) {...}

a konstrukcja:

if ($zmienna) {...} else {...}

Nie ma sensu stosowac tej pierwszej, a dodatkowo mozna sie pogubic, jesli 
"$zmienna" to nie jest prosta zmienna, tylko wyrazenie (hint: jego wartosc 
bedzie obliczona raz jesli wynik jest true i dwa razy jesli false).

DS

-- 
 .---------
(-- a dny jak padli andele prsty ryji hlinu --.                  .
 `              `-- a dni jak upadle anioly palcami ryja ziemie --)    
                                                        ---------'   
                  http://www.dago.pmp.com.pl
Re: isset [bylo : Re: Jak usunac wiersz?]
#858
Author: MySZ
Date: Fri, 31 Aug 2001 09:39
9 lines
1330 bytes
> To ja podkrece jasnosc :-)
> Piotrkowi chodzilo o subtelna roznice miedzy:

czaje :) akurat tak napisalem, z rozpedu. (chyba ze chodzi o cos jeszcze
wiecej, niz else/elseif ;)

> DS

    MySZ
Re: isset [bylo : Re: Jak usunac wiersz?]
#860
Author: MySZ
Date: Fri, 31 Aug 2001 09:39
14 lines
1470 bytes
> Niestety, już kilkukrotnie spotkałem się z taką manierą
> w różnych tutorial'ach (nie pamiętam nawet gdzie i kiedy).

no ja nie z tutoriala, akurat potrzebowalem cos takiego, a nie znalemm wtedy
isset w ogole ;)

> To bardzo zły nawyk.

czemu zly? oprocz tego, ze czasem moze oszukac jesli operuje sie na
wartosciach zmiennych true/false a nie jak w moim przypadku na stringach ;))

> l9

    MySZ
Re: isset [bylo : Re: Jak usunac wiersz?]
#862
Author: leming nine
Date: Fri, 31 Aug 2001 10:50
49 lines
2394 bytes
> > if(isset($nr))
> pytanie odnosnie isset - co daje jej stosowanie?

isset() zwraca prawdę, jeśli taka zmienna istnieje.
Bardzo się przydaje w momencie, kiedy sprawdzasz, czy
pole z formularza zostało przesłane.

> bo ja w wielu przypadkach robilem tak, ze dawalem
> po prostu

> if ($zmienna) {
>     rob co trza
> } else if (!$zmienna) {
>     rob co innego
> }

Niepotrzebnie się biedzisz, lepiej zamiast fragmentu

    } else if (!$zmienna) {

napisać po prostu:

    } else {

:) I na dodatek bardzo źle robiłeś, zresztą...

> jaka jest roznica???

...no właśnie. Różnica jest diametralna. W PHP wartości
logiczne są dla if'ów jednoznaczne z numerycznymi - 0 i 1.
Dokładniej: true i 1 to to samo. false i 0 również.
Dlatego polecam stosowanie operatorów `===' oraz `!=='.
One dbają o typy, toteż mniej błędów wychodzi.

Co do danych przesyłanych za pomocą formularzy -- warto
jest poza isset($foo) sprawdzać jeszcze pochodzenie takiej
zmiennej - czy została ona przesłana metodą GET czy POST.
Czyli jeśli np. zmienną jest hasło, to aby uniknąć jawnego
podawania hasła metodą GET (wtedy będzie w TransferLog'u
Apache'a) sprawdzaj, czy dane zostały przesłane za pomocą
if (isset($HTTP_POST_VARS["haslo"])), ponieważ inaczej jest
dziura. Czasami w cookies można coś takiego zawrzeć, ech,
szkoda gadać jakie rożne dziwne rzeczy od tego się robią...

Właśnie z powodu takich nie do końca ścisłych operacji
niedoświadczeni programiści PHP mają problemy.

--
l9
Re: isset [bylo : Re: Jak usunac wiersz?]
#861
Author: leming nine
Date: Fri, 31 Aug 2001 10:56
20 lines
1773 bytes
> > To bardzo zły nawyk.
> czemu zly? oprocz tego, ze czasem moze oszukac jesli
> operuje sie na wartosciach zmiennych true/false a nie
> jak w moim przypadku na stringach ;))

Programista powinien być w stanie przewidzieć dokładnie
wynik działania swojego programu. Jeśli nie jest w stanie
określić ogólnie co będzie wynikiem oznacza to, że tak
właściwie nie ma kontroli nad programem, który napisał.
To samo oczywiście tyczy się wszelkiej maści skryptów.

Jeśli skrypt nie kontroluje np. pochodzenia zmiennych,
script kiddies są w stanie go wykorzystać do wywoływania
skutków niepożądanych przez autora skryptu.
Oczywiście, jeśli skrypt jest na prawach użytkownika
nobody/www-data i tak zbyt wiele nie da się "naszczekać",
jednak IMO takie możliwości powinno się zawsze blokować.

--
l9
Re: isset [bylo : Re: Jak usunac wiersz?]
#863
Author: MySZ
Date: Fri, 31 Aug 2001 11:05
9 lines
1310 bytes
> Właśnie z powodu takich nie do końca ścisłych operacji
> niedoświadczeni programiści PHP mają problemy.

a jak maja problemy, to siem pytaja na grupach ;)))) ok, dzieki bardzo :)))
zaraz troche skrypty pozmieniam ;))))

> l9

    MySZ
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads