Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyciaganie slow z pliku
Forum PHP.pl > Forum > Przedszkole
nuhandi
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
darko
  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
r4xz
  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

darko
@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.
nuhandi
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
darko
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)
nuhandi
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
darko
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
nuhandi
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
darko
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.
nuhandi
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
r4xz
  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


nuhandi
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
darko
To jeszcze przed explode dodaj:

$my_string = str_replace("\n","",$my_string);
r4xz
$string = str_replace(array("r\n", "r", "\n"), "", $string);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.