Witam wszystkich. Jestem absolutnym początkującym więc proszę, nie obrażajcie się na banalność pytania.
Używam aplikacji, która generuje plik TXT. Plik wysyłam na serwer jako PHP i wyświetlam wartość z pliku na swojej stronie pogodowej.
Zawartość pliku jest następująca:
A czy aplikacja może generować plik w innym formacie typu json? Tak trzeba parsować regexpami.
<?php $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> 20.12 </span>'; http://www.php.net/preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches); http://www.php.net/echo $matches[1];
<?php $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> 20.12 </span>'; http://www.php.net/preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches); http://www.php.net/echo $matches[1];
<?php $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> 20.12 </span>'; http://www.php.net/preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches); http://www.php.net/echo $matches[1]; http://www.php.net/var_dump(http://www.php.net/is_float($matches)); ?>
Nie jest liczbą bo wynik zawiera spacje. Nie wiem czy masz tam encje czy spacje jako białe znaki bo forum mogło przekonwertować.
eeeeeeee.......
skoro kod
echo $matches[1];
var_dump(is_float($matches));
daje ci w wyniku
20.12 bool(false)
No to wszystko jest ok.
Swoja liczbe masz pod $matches[1]
I oczywiscie ze is_float zawsze da ci false na tym, bo to jest tekst 20.12
Jak tak bardzo chcesz by to byla liczba 20.12 - co przy wyswietlaniu nie ma najmniejszego znaczenia - to zrzutuj to na float i wowczas is_float da ci true jak to dla ciebie takie wazne....
ps: poza tym teraz ty robisz is_float na $matches, ktore jest tablica wiec tym bardziej nie zwroci ci nigdy true...
No i jesli faktycznie tam masz doslownie to popraw jeszcze wyraznie na
preg_match('/<span[^>]*> (.*?) <\/span>/si', $string, $matches);
<?php # dla testu plik "pwsFWIcurrent.txt" ma następującą zawartość: <span style="border: 1px solid black;text-align:center;background:green;color: white"> 500.98 </span> $plik = http://www.php.net/fopen('pwsFWIcurrent.txt','r'); { $linia = http://www.php.net/fgets($plik); $zawartosc .= $linia; } http://www.php.net/preg_match('/<span[^>]*>(.*?)<\/span>/si', $zawartosc, $matches); http://www.php.net/print_r($matches[1]); #wyświetla 500.98 czyli liczbę z pliku (bez zielonego tła) # echo $matches[1]; również wyświetla 500.98 czyli liczbę z pliku (bez zielonego tła) # użycie funkcji floatval — aby zamienić 500.98 na liczbę $var = "$matches[1]"; $float_value_of_var = http://www.php.net/floatval($var); http://www.php.net/echo $float_value_of_var; # wyświetla 0 zamiast 500.98 dlaczego? http://www.php.net/var_dump(http://www.php.net/is_float($float_value_of_var)); # wyświetla "bool(true)" czyli to wyświetlane 0 jest liczbą # sprawdzenie czy zmienna $float_value_of_var jest faktycznie liczbą $dwa =5; $suma = $float_value_of_var + $dwa; http://www.php.net/echo $suma; # wyświetla 5 czyli # cała treść wyświetlana przez skrypt wygląda tak: 500.98 0bool(true) 5 ?>
Dostałeś pełne wyrażenie z uwzględnieniem nbsp. Dlaczego nie stosujesz?
<?php # plik "pwsFWIcurrent.txt" ma następującą zawartość: //<span style="border: 1px solid black;text-align:center;background:green;color: white"> XXX.XX </span> gdzie XXX.XX to liczba // przypisanie zawartości pliku do zmiennej $plik = http://www.php.net/fopen('pwsFWIcurrent.txt','r'); { $linia = http://www.php.net/fgets($plik); $zawartosc .= $linia; } # wyodrębnienie ciągu XXX.XX z treści pliku http://www.php.net/preg_match('/<span[^>]*> (.*?) <\/span>/si', $zawartosc, $matches); # użycie funkcji floatval — aby zamienić ciąg XXX.XX na liczbę $var = "$matches[1]"; $float_value_of_var = http://www.php.net/floatval($var); # sprawdzenie czy rzutowany ciąg jest liczbą //var_dump(is_float($float_value_of_var)); # wyświetla "bool(true)" a więc wyrażenie XXX.XX jest liczbą # dodatkowe sprawdzenie czy zmienna $float_value_of_var jest faktycznie liczbą //$dwa =5; //$suma = $float_value_of_var + $dwa; //echo $suma; # wyświetla rzeczywiście zsumowaną wartość XXX.XX i 5 czyli wszystko jest OK. ?>
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)