Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]wyciaganie slow z pliku
nuhandi
post 4.12.2009, 23:01:19
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


witam, do wyciagania tekstu z tablic uzywa sie implode i explode, a jak zrobic cos takiego jesli chce wyciagnac slowa z pliku?
mam np plik.txt

  1. aaaa$ssss$fff$
  2. ssss$ggg$ggg$
  3. ttt$ggg$hhh$


seperatorem jest $

i jak to wciagnac do tablicy w php?

pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
darko
post 4.12.2009, 23:08:48
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


  1. // $my_string jest zawartością pliku:
  2. $my_string = file_get_contents("plik.ext");
  3. /*
  4. $my_string = "
  5. aaaa_ssss_fff
  6. ssss_ggg_ggg
  7. ttt_ggg_hhh";
  8. */
  9. $my_array = array();
  10. $my_array = explode("_", $my_string);
  11. print_r($my_array);


znak $ jest najbardziej nieszcześliwym separatorem

Ten post edytował darko 4.12.2009, 23:13:47


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
r4xz
post 4.12.2009, 23:20:58
Post #3





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


  1.  
  2. <?php
  3. $my_string = 'aaaa-ssss$fffssss$ggg$gggttt$ggg$hhh';
  4. $my_array = explode('$', $my_string);
  5. print_r($my_array);
  6. ?>
  7.  
  8.  


pozwoliłem sobie wykorzystać kod darko, aby udowodnić że znak "$" nie musi być taki felerny winksmiley.jpg



--------------------
Go to the top of the page
+Quote Post
darko
post 4.12.2009, 23:27:12
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


@r4xz
Pewnie, ze Twój kod będzie działać, jednak co w przypadku, jeśli (czysta abstrakcja i hipotetycznie) wcześniej będziesz miał zdefiniowane zmienne:
$fffssss,$ggg, $gggttt, $ggg oraz $hhh questionmark.gif Zmodyfikujesz nieświadomie dane wejściowe.

Ten post edytował darko 4.12.2009, 23:28:52


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
nuhandi
post 4.12.2009, 23:32:53
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


dziala thx

a teraz jak mam to w tablicy to da sie jakos prosto wyciagnac najwiekszy i najmniejszy tekst pod wzgledem ilosci liter? jakby to byli cyfry to mozna by min($my_array), ale jak to najlatwiej zrobic z tekstem?

pozdrawiam
Go to the top of the page
+Quote Post
darko
post 4.12.2009, 23:36:10
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Przykładowo
  1. $min = 0;
  2. $max = 0;
  3.  
  4. $min_pos = 0;
  5. $max_pos = 0;
  6. $h = 0;
  7.  
  8. foreach($my_array as $v) {
  9. $len = strlen($v);
  10. if($len > $max) {
  11. $max = $len;
  12. $max_pos = $h;
  13. }
  14. if($len < $min) {
  15. $min = $len;
  16. $min_pos = $h;
  17. }
  18.  
  19. $h++;
  20. }
  21.  
  22. echo "Najdłuższy ($max znaków) łańcuch w tablicy to ".$my_array[$max_pos]."<br />Najkrótszy ($min znaków) to ".$my_array[$min_pos];


Oczywiście można jeszcze dużo krócej, ale już baw się sam(a)

Ten post edytował darko 4.12.2009, 23:59:57


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
nuhandi
post 5.12.2009, 13:55:44
Post #7





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


thx, ale nie dziala to do konca dobrze.

mam np w pliku

Kod
aaa$bbbb$cccc$
dddd$fff$eeeee$
gg$hhh$iii


to wyswietla mi

Najdłuższy (6 znaków) łańcuch w tablicy to dddd // chyba liczy seperator, a powinno sam tekst
Najkrótszy (3 znaków) to aaa // powinno wyjsc "gg", ale jak juz np w hhh wywale jedno h to wyswietla ok, czyli tak jakby przejscie do nowej linii tez liczylo, a nie powinno

da sie to jakos rozwiazac?

pozdrawiam
Go to the top of the page
+Quote Post
darko
post 5.12.2009, 14:07:16
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Teraz działa, ale dalej jest problem z separatorem w postaci symbolu dolara:
  1. $my_string = "
  2. aaa_bbbb_cccc_
  3. dddd_fff_eeeee_
  4. gg_hhh_iii";
  5.  
  6. $my_string = str_replace("\n","",$my_string);
  7.  
  8. $my_array = array();
  9. $my_array = explode("_", $my_string);
  10.  
  11. print_r($my_array);
  12. // zwraca
  13. // Array ( [0] => aaa [1] => bbbb [2] => cccc [3] => dddd [4] => fff [5] => eeeee [6] => gg [7] => hhh [8] => iii )
  14.  
  15. $min = 100000;
  16. $max = 0;
  17.  
  18. $min_pos = 0;
  19. $max_pos = 0;
  20. $h = 0;
  21.  
  22. foreach($my_array as $v) {
  23. $len = strlen($v);
  24. if($len > $max) {
  25. $max = $len;
  26. $max_pos = $h;
  27. }
  28. if($len < $min) {
  29. $min = $len;
  30. $min_pos = $h;
  31. }
  32.  
  33. $h++;
  34. }
  35.  
  36. echo "Najdłuższy ($max znaków) łańcuch w tablicy to ".$my_array[$max_pos]."<br />Najkrótszy ($min znaków) to ".$my_array[$min_pos];
  37. // zwróci na tych danych wejściowych
  38. // Najdłuższy (5 znaków) łańcuch w tablicy to eeeee Najkrótszy (2 znaków) to gg


Ten post edytował darko 5.12.2009, 14:09:50


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
nuhandi
post 5.12.2009, 14:21:02
Post #9





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


skopiowalem ten od Ciebie i mi wyswietla

Najdłuższy (5 znaków) łańcuch w tablicy to dddd
Najkrótszy (3 znaków) to fff

czyli zle
Go to the top of the page
+Quote Post
darko
post 5.12.2009, 14:23:33
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


To coś źle skopiowałeś, u mnie (po skopiowaniu własnego kodu, bo aż nie wierzę) wypluwa:

Najdłuższy (5 znaków) łańcuch w tablicy to eeeee
Najkrótszy (2 znaków) to gg

czyli dobrze.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
nuhandi
post 5.12.2009, 14:34:11
Post #11





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


na serio to u mnie nie dziala. Wywala mi

Najdłuższy (5 znaków) łańcuch w tablicy to dddd
Najkrótszy (3 znaków) to fff

a kopiuje to co wkleiles sad.gif

pozdrawiam
Go to the top of the page
+Quote Post
r4xz
post 5.12.2009, 15:25:52
Post #12





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


  1.  
  2. <?php
  3. $my_string = 'aaaa$ssss$fffssss$ggg$gggttt$ggg$hhh';
  4. $my_array = explode('$', $my_string);
  5. print_r($my_array);
  6.  
  7. $min[0] = null;
  8. $max[0] = null;
  9. echo count($my_array);
  10. for($i = 0; $i < count($my_array); $i++) {
  11. if(strlen($my_array[$i]) > $max[0] || $max[0] === null) {
  12. $max[0] = strlen($my_array[$i]);
  13. $max[1] = $my_array[$i];
  14. }
  15. if(strlen($my_array[$i]) < $min[0] || $min[0] === null) {
  16. $min[0] = strlen($my_array[$i]);
  17. $min[1] = $my_array[$i];
  18. }
  19. }
  20. echo "<br />najmniejsza ($min[0]) to $min[1]<br />najwieksza ($max[0]) to $max[1]";
  21. ?>
  22.  
  23.  


wynik:

Array ( [0] => aaaa [1] => ssss [2] => fffssss [3] => ggg [4] => gggttt [5] => ggg [6] => hhh ) 7
najmniejsza (3) to ggg
najwieksza (7) to fffssss




--------------------
Go to the top of the page
+Quote Post
nuhandi
post 5.12.2009, 16:22:59
Post #13





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 28.11.2009

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


problem jest w tym, ze jak mam dokladnie taki plik

Kod
aaa_bbbb_cccc_
dddd_ff_eeeee_
g_hhh_iii


to np nie dziala, ze g jest najmniejsze, ale jakby bylo tak

Kod
aaa_bbbb_cccc_
dddd_ff_eeeee_
ggg_h_iii

to juz dziala i pokazuje ze h jest najmniejsze, wiec problem jest z enterami, bo jak wklejam wszystko razem
Kod
aaa_bbbb_cccc_dddd_ff_eeeee_g_hhh_iii


to dziala bez problemu


pozdrawiam
Go to the top of the page
+Quote Post
darko
post 5.12.2009, 16:29:12
Post #14





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


To jeszcze przed explode dodaj:

$my_string = str_replace("\n","",$my_string);


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
r4xz
post 5.12.2009, 16:33:10
Post #15





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


$string = str_replace(array("r\n", "r", "\n"), "", $string);


--------------------
Go to the top of the page
+Quote Post

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 - 12:47