Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Wyszukiwanie w ciągu danej wartości
Monter08
post 17.07.2011, 16:20:50
Post #1





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Witam!
Szukam funkcje która wyszuka w ciągu wartość od-do. Przykład - mam bardzo długi ciąg (powiedzmy że są to ustawiania w jakimś pliku)
"Tytuł=bla bla bla bla
Nazwa=blablablabla
Język=Polski"
i chciałbym otrzymać zawartość powiedzmy Nazwy czyli od "Nazwa=" do \n czyli przejścia do nowej linii.
Przepraszam, że opisałem to jak kali jeść kali pić ale inaczej tego opisać nie potrafię smile.gif
Za pomoc z góry dziękuje.
Pozdrawiam, Monter08
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
peter13135
post 17.07.2011, 16:34:11
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


jeśli twój plik zawsze będzie miał zawartość typu
Kod
a=1
b=2
c=lala


to otwórz ten plik za pomocą file() - ta funkcja zapisze Ci tekst do tablicy, której elementy będą liniami/wierszami pliku tekstowego.
następnie użyj explode ro rozbicia ciągu
np. explode('=', 'a=5')
zwróci Ci tablicę 2-elementową, której element o ideksie 0 będzie miał wartość "a", a element o indeksie 1 będzie miał wartość "5"


--------------------
:)
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 16:38:10
Post #3





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Właśnie mój skrypt się na tym opiera, lecz jeżeli przyjdzie jakiś użytkownik i wstawi "Nazwa=ble=ble" to już wszystko idzie na marne, dlatego nie chce robić to explode tylko jakąś funkcją co odnajdzie mi wartość od do. Próbowałem preg_match ale jakoś mi nie wychodzi, zapewne źle wpisuje składnie.
Go to the top of the page
+Quote Post
peter13135
post 17.07.2011, 16:42:41
Post #4





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


a czy user może dać znak nowej linii ?
jeśli nie, to po prostu scal wszystkie elementy tablicy, oprócz elementu z indexem 0. Możesz do tego użyć implode, albo nawet zwykłej pętli.


--------------------
:)
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 16:47:50
Post #5





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Może dodać.. Czekam na dalsze pomysły, zastanawia mnie użycie funkcji preg_match potrafi ktoś ją dobrze złożyć, aby przeszukiwała "Nazwa= \n"?
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 17:55:22
Post #6





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. $test = explode('=', 'nazwa=ble=ble', 2);
  2. print_r($test);


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 18:11:07
Post #7





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Cytat(morbic @ 17.07.2011, 18:55:22 ) *
  1. $test = explode('=', 'nazwa=ble=ble', 2);
  2. print_r($test);

Przecież pisałem że explode odpada..
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 18:31:35
Post #8





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Widziałem. Ale przetestuj ten przykład. I zwróć uwagę na ostatni, trzeci parametr explode()

Ten post edytował morbic 17.07.2011, 18:31:53


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 20:32:10
Post #9





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Wybacz morobic, nie zauważyłem smile.gif Twoje rozwiązanie jest bardzo dobre, lecz nadal poszukuje tej funkcji, ponieważ sprawa wygląda tak:
użytkownik loguje się, klika konfiguracja i w tej chwili poleceniem "cat plik grep nazwa" pobieram sobie zawartość nazwy i łamie to na dwie części przez explode, lecz tych opcji jest bardzo dużo i trochę to zajmuje i trochę to rozbiłem bo czasami polecenie cat znajduje dwie możliwości i muszę je także rozbijać i to też zajmuje. Dlatego właśnie szukam polecenia które gdy pobiore sobie cały plik konfiguracyjny przeszuka mi go i wyświetli zawartość.Na pewno mniej to będzie zajmować i lepiej się sprawować, wiec jeżeli ktoś mógłby mi pomóc podając tą funkcje byłbym szczęśliwy i jakoś to by wyglądało..
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 21:14:21
Post #10





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Wywołujesz "cat plik | grep nazwa" z poziomu PHP? Jeśli tak, to niepotrzebnie utrudniasz sobie życie.

Najlepiej podaj format danych (pliku konfiguracyjnego), jaki masz i podaj przykład, w jakiej formie chciałbyś te dane dostać. Będzie łatwiej nakierować i zrozumieć, bo mam wrażenie, że idziesz z Katowic do Krakowa przez Moskwę.


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 21:24:20
Post #11





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


ehh.. przecież napisałem to tylko, dlatego żeby pokazać, że to nie jest dobry pomysł.. Polecenie wysyłam przez ssh2 do maszyny.. i właśnie dlatego chcę zastąpić tą metodę, ponieważ tych poleceń wysyłam 8 i to trochę trwa.. Widzę, że się nie rozumiemy..
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 21:33:24
Post #12





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Najłatwiej się zrozumiemy, jeśli wrzucisz kod, który masz obecnie. Zobaczymy jak da się to zrobić prościej smile.gif


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 21:41:52
Post #13





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


ehh.. nie wiem po co, proszę tylko o jedną funkcje, ale proszę bardzo..
  1. $stream[0] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep Name");
  2. $stream[1] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep Comment");
  3. $stream[3] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep Password");
  4. $stream[4] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep Auth");
  5. $stream[5] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep VoiceFormat");
  6. $stream[6] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep AdminPassword");
  7. $stream[7] = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini | grep Duplicates");
  8.  
  9. stream_set_blocking($stream[0], true);
  10. stream_set_blocking($stream[1], true);
  11. stream_set_blocking($stream[3], true);
  12. stream_set_blocking($stream[4], true);
  13. stream_set_blocking($stream[5], true);
  14. stream_set_blocking($stream[6], true);
  15. stream_set_blocking($stream[7], true);
  16. $pName=stream_get_contents($stream[0]);
  17. $pComment=explode("\n", stream_get_contents($stream[1]));
  18. $pPasswordall=explode("\n", stream_get_contents($stream[3]));
  19. $pPasswordAdmin=explode("=", stream_get_contents($stream[6]));
  20. $pPassword=explode("=", $pPasswordall[1]);
  21. $pAuth=explode("=", stream_get_contents($stream[4]));
  22. $pFormat=explode("=", stream_get_contents($stream[5]));
  23. $pDup=explode("=", stream_get_contents($stream[7]));

odpowiada to za pobranie wartości, wszystkie nie wkleiłem (jeżeli ktoś by chciał się przyczepić) powiem tylko, że całość działa.
Go to the top of the page
+Quote Post
Crozin
post 17.07.2011, 21:42:53
Post #14





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zawsze gdy wymyślasz jakieś nowe "narzędzie" (tutaj format pliku) zastanów się czy to w ogóle ma sens. Czy nie lepiej skorzystać z XML-a albo SQLite? Napisz do czego i jak będziesz to wykorzystywał i jeżeli w gotowym narzędziu nie znajdziesz jakiś barier nie do przejścia nawet nie trudź się w wymyślaniu własnego - nie warto.
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 21:46:39
Post #15





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


cała moja aplikacja to panel do obsługi serwerów głosowych (aktualnie pisze część ventrilo), więc trudno jest mi zmieniać cały program odpowiadający za klienta do własnej woli, wręcz jest to nie możliwe.
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 21:50:37
Post #16





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Własny format tu odpada, ograniczenie configiem ventrilo. Ale teraz już rozumiem o co chodzi.

  1. $Config = Array();
  2.  
  3. $stream = ssh2_exec($connection, "cat $ssh_dir/$user_name/ventrilo_srv.ini");
  4.  
  5. stream_set_blocking($stream, true);
  6. $conf = explode("\n", stream_get_contents($stream));
  7.  
  8. foreach ($conf as $line) {
  9. $line = explode('=', $line, 2);
  10. if (count($line) != 2) continue; // Zabezpieczenie dla linii nie będących w formacie nazwa=wartosc
  11. $Config[$line[0]] = $line[1];
  12. }
  13.  
  14. print_r($Config);


O to chodziło?

Ten post edytował morbic 17.07.2011, 21:55:03


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Monter08
post 17.07.2011, 22:00:40
Post #17





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


hmm, morbic Dzięki! biggrin.gif wgl o tym nie pomyślałem, wstawię to u siebie u dam znać jak będzie działać smile.gif
//btw, lepszym rozwiązaniem jest wykorzystanie sftp niż pobrać to catem smile.gif

Ten post edytował Monter08 17.07.2011, 22:01:25
Go to the top of the page
+Quote Post
morbic
post 17.07.2011, 22:06:34
Post #18





Grupa: Zarejestrowani
Postów: 116
Pomógł: 29
Dołączył: 13.12.2010
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Monter08 @ 17.07.2011, 23:00:40 ) *
//btw, lepszym rozwiązaniem jest wykorzystanie sftp niż pobrać to catem smile.gif


Zdecydowanie, ale nie o to pytałeś, więc nie chciałem mieszać za bardzo wink.gif No problem!


--------------------
"Aby zrozumieć rekurencję, musisz najpierw zrozumieć rekurencję."
Go to the top of the page
+Quote Post
Crozin
post 17.07.2011, 22:09:48
Post #19





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


ventrilo_srv.ini - skoro to plik INI to dlaczego nie skorzystasz z parse_ini_file?
Go to the top of the page
+Quote Post
Monter08
post 18.07.2011, 12:33:42
Post #20





Grupa: Zarejestrowani
Postów: 237
Pomógł: 22
Dołączył: 16.09.2010
Skąd: Lubaczów

Ostrzeżenie: (0%)
-----


Crozin - próbowałem, lecz mam mały problem z wyświetleniem danych, ponieważ otrzymuje coś takiego:
  1. Warning: parse_ini_file([Server] Name=Name=u Montera2 Phonetic=Server 1 Comment=Comment=Comment=Hello22 Port=3784 Auth=1 Duplicates=1 AdminPassword=3123134 Password=2 MaxClients=32 SendBuffer=0 RecvBuffer=0 Diag=0 LogonTimeout=5 CloseStd=1 FilterWave=0 FilterTTS=0 TimeStamp=0 PingRate=10 ExtraBuffer=0 ChanWidth=0 ChanDepth=0 ChanClients=0 DisableMaxClients=1 DisableQuit=1 VoiceCodec=0 VoiceFormat=1 SilentLobby=0 #SpamChat=1,1000,2 #SpamComment=Comment=Comment=Comment=Hello22=Hello=2=1,1000,2 #SpamWave=1,1000,2 #SpamTTS=1,10 [Intf] # Examples: # # Intf=192.168.0.30 # Intf=external.mydomain.com # Intf=internal.mydomain.com # Intf=127.0.0.1 [Status] # Examples: # Intf=0.0.0.0 # Intf=127.0.0.1 # Intf=external.mydomain.com #Password= #ReplyInterval=500 #FilterGen=127.0.0.1 # FilterGen=192.168.0.0/16 #FilterDetail=127.0.0.1 # FilterDetail=10.0.0.0/8 ) [function.parse-ini-file]: failed to open stream: File name too long in /home/monter/public_html/panel/5.php on line 16
  2. Array ( )

  1. $stream = fopen("ssh2.sftp://$sftp/home/monter/serv/my/ventrilo_srv.ini", 'r');
  2. stream_set_blocking($stream, true);
  3. $dane=stream_get_contents($stream);
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:00