Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]zawartość pliku jako liczba
pernaczy
post 7.11.2019, 09:00:12
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


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:

Kod
<span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;20.12&nbsp;</span>


Liczba w treści (w tym przypadku 20.12 zmienia się (jest zależna od temperatury i wilgotności otoczenia w momencie generowania pliku).
Pytanie. Czy da się "wyjąć" tą liczbę z pliku i podstawić jako wartość zmiennej?
Chciałbym tą zmienną użyć do wyświetlania właściwego (w zależności od wielkości liczby) obrazka.

Pozdrawiam,
Piotr
Go to the top of the page
+Quote Post
viking
post 7.11.2019, 09:04:06
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


A czy aplikacja może generować plik w innym formacie typu json? Tak trzeba parsować regexpami.


--------------------
Go to the top of the page
+Quote Post
pernaczy
post 7.11.2019, 09:07:03
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


Cytat(viking @ 7.11.2019, 09:04:06 ) *
A czy aplikacja może generować plik w innym formacie typu json? Tak trzeba parsować regexpami.

Nie mam wpływu na format generowanego pliku.
Piotr

Ten post edytował pernaczy 7.11.2019, 09:07:50
Go to the top of the page
+Quote Post
viking
post 7.11.2019, 09:10:00
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


  1. <?php
  2. $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;20.12&nbsp;</span>';
  3. preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches);
  4. echo $matches[1];


--------------------
Go to the top of the page
+Quote Post
pernaczy
post 7.11.2019, 10:05:57
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


Cytat(viking @ 7.11.2019, 09:10:00 ) *
  1. <?php
  2. $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;20.12&nbsp;</span>';
  3. preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches);
  4. echo $matches[1];


Dzięki ale:
1. Myślę, że w tym przypadku "wynikowe" $matches ciągle nie jest liczbą.
Użycie skryptu:
  1. <?php
  2. $string ='<span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;20.12&nbsp;</span>';
  3. preg_match('/<span[^>]*>(.*?)<\/span>/si', $string, $matches);
  4. echo $matches[1];
  5. var_dump(is_float($matches));
  6.  
  7. ?>

daje wynik: 20.12 bool(false)

2. Jak napisałem w pierwszym poście, liczba w treści pliku zmienia się i w związku z tym nie mogę (nie umiem) wstawić jako "$string" jego zmieniającej się treści treści. Chciałbym więc użyć nazwy tego pliku (niech ten plik nazywa się "pwsFWIcurrent.php" - to jest jego rzeczywista nazwa) do "wyciągania" z jego treści tej liczby.

Piotr
Go to the top of the page
+Quote Post
viking
post 7.11.2019, 10:22:00
Post #6





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Nie jest liczbą bo wynik zawiera spacje. Nie wiem czy masz tam encje czy spacje jako białe znaki bo forum mogło przekonwertować.


--------------------
Go to the top of the page
+Quote Post
pernaczy
post 7.11.2019, 15:36:57
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


Cytat(viking @ 7.11.2019, 10:22:00 ) *
Nie jest liczbą bo wynik zawiera spacje. Nie wiem czy masz tam encje czy spacje jako białe znaki bo forum mogło przekonwertować.

Treść pliku jest dokładnie taka jak w moim poprzednim poście.
Jeśli chodzi ci o &nbsp; w treści to nawet po ich wykasowaniu z wyjściowego pliku sytuacja się nie zmienia. ciągle wynik wygląda tak: 20.12 bool(false) .
Piotr
Go to the top of the page
+Quote Post
nospor
post 7.11.2019, 15:55:04
Post #8





Grupa: Moderatorzy
Postów: 36 446
Pomógł: 6292
Dołączył: 27.12.2004




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 &nbsp; to popraw jeszcze wyraznie na

preg_match('/<span[^>]*> &nbsp;(.*?)&nbsp;<\/span>/si', $string, $matches);


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
pernaczy
post 8.11.2019, 20:30:27
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


Cytat(nospor @ 7.11.2019, 15:55:04 ) *
No i jesli faktycznie tam masz doslownie &nbsp; to popraw jeszcze wyraznie na

preg_match('/<span[^>]*> &nbsp;(.*?)&nbsp;<\/span>/si', $string, $matches);

1. nie działa, nic nie wyświetla.
2. popróbowałem rzutowania jak radziłeś:

  1. <?php
  2. # dla testu plik "pwsFWIcurrent.txt" ma następującą zawartość: <span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;500.98&nbsp;</span>
  3.  
  4. $plik = fopen('pwsFWIcurrent.txt','r');
  5. {
  6. $linia = fgets($plik);
  7. $zawartosc .= $linia;
  8. }
  9. preg_match('/<span[^>]*>(.*?)<\/span>/si', $zawartosc, $matches);
  10.  
  11. print_r($matches[1]); #wyświetla 500.98 czyli liczbę z pliku (bez zielonego tła)
  12. # echo $matches[1]; również wyświetla 500.98 czyli liczbę z pliku (bez zielonego tła)
  13.  
  14. # użycie funkcji floatval — aby zamienić 500.98 na liczbę
  15.  
  16. $var = "$matches[1]";
  17. $float_value_of_var = floatval($var);
  18. echo $float_value_of_var; # wyświetla 0 zamiast 500.98 dlaczego?
  19.  
  20. var_dump(is_float($float_value_of_var)); # wyświetla "bool(true)" czyli to wyświetlane 0 jest liczbą
  21.  
  22. # sprawdzenie czy zmienna $float_value_of_var jest faktycznie liczbą
  23. $dwa =5;
  24. $suma = $float_value_of_var + $dwa;
  25. echo $suma; # wyświetla 5 czyli
  26.  
  27. # cała treść wyświetlana przez skrypt wygląda tak: 500.98 0bool(true) 5
  28.  
  29. ?>


Ale wyniku (zadowalającego) nie ma
Piotr
Go to the top of the page
+Quote Post
viking
post 8.11.2019, 20:47:21
Post #10





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Dostałeś pełne wyrażenie z uwzględnieniem nbsp. Dlaczego nie stosujesz?


--------------------
Go to the top of the page
+Quote Post
pernaczy
post 9.11.2019, 09:48:55
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 4.11.2019
Skąd: Niesiołowice

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


Cytat(viking @ 8.11.2019, 20:47:21 ) *
Dostałeś pełne wyrażenie z uwzględnieniem nbsp. Dlaczego nie stosujesz?


W poprzednim poście napisałem, że to wyrażenie nie działa. Nie miałem racji (i nie wiem dlaczego nie działało). wstydnis.gif
Podstawiłem to jeszcze raz:
  1. <?php
  2. # plik "pwsFWIcurrent.txt" ma następującą zawartość:
  3. //<span style="border: 1px solid black;text-align:center;background:green;color: white"> &nbsp;XXX.XX&nbsp;</span> gdzie XXX.XX to liczba
  4.  
  5. // przypisanie zawartości pliku do zmiennej
  6. $plik = fopen('pwsFWIcurrent.txt','r');
  7. {
  8. $linia = fgets($plik);
  9. $zawartosc .= $linia;
  10. }
  11. # wyodrębnienie ciągu XXX.XX z treści pliku
  12. preg_match('/<span[^>]*> &nbsp;(.*?)&nbsp;<\/span>/si', $zawartosc, $matches);
  13.  
  14. # użycie funkcji floatval — aby zamienić ciąg XXX.XX na liczbę
  15.  
  16. $var = "$matches[1]";
  17. $float_value_of_var = floatval($var);
  18.  
  19. # sprawdzenie czy rzutowany ciąg jest liczbą
  20.  
  21. //var_dump(is_float($float_value_of_var)); # wyświetla "bool(true)" a więc wyrażenie XXX.XX jest liczbą
  22.  
  23. # dodatkowe sprawdzenie czy zmienna $float_value_of_var jest faktycznie liczbą
  24. //$dwa =5;
  25. //$suma = $float_value_of_var + $dwa;
  26. //echo $suma; # wyświetla rzeczywiście zsumowaną wartość XXX.XX i 5 czyli wszystko jest OK.
  27.  
  28. ?>

Działa. yahoo.gif
Uzyskaną liczbę wykorzystałem w innym skrypcie do wyświetlania właściwego obrazka w zależności od wartości tej liczby.
Serdecznie dziękuję za pomoc. heart.gif
Znowu się czegoś nauczyłem więc dzień nie jest bezpowrotnie stracony.
Temat zamknięty.

Piotr

Ten post edytował pernaczy 9.11.2019, 11:57:57
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: 18.04.2024 - 17:47