Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> json zapis do pliku, zapis do pliku txt danych z json
dloogi
post 3.12.2010, 11:36:21
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 30.09.2010
Skąd: Gliwice

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


Cześć,

Bez bicia przyznam się, że php nie znam, rzecz do zrobienia jest na teraz i dlatego mocno proszę o pomoc w takiej sprawie.
Mam pliczek w formacie json.

Metodą prób i błędów udało mi się wypisać z niego dane jakie potrzebuje.

  1. <?php
  2. $input = file_get_contents("http://192.168.x.x/json");
  3. $json = $input;
  4. $output = json_decode($json,true);
  5. $my_t=getdate(date("U"));
  6.  
  7.  
  8. print("$my_t[mday]-$my_t[mon]-$my_t[year] $my_t[hours]:$my_t[minutes]:$my_t[seconds]");
  9. print(" ");
  10. print("Modul: ");
  11. print(" ");
  12. print $modul = $output['input'][0]['id'];
  13. print(" ");
  14. print(" - ");
  15. print(" ");
  16. print("Kierunek: ");
  17. print(" ");
  18. print $kierunek = $output['input'][0]['v'][0];
  19. print("°");
  20. print(" ");
  21. print("Sila:");
  22. print(" ");
  23. print $sila = $output['input'][0]['v'][1];
  24. print $jednostka = $output['input'][0]['u'][1];
  25. ?>


Potrzebuje wypisane dane zapisać/dopisywać do pliku txt - tak że po kolejnych uruchomieniach skrypty będzie tworzyła się baza odczytów z urządzenia.
Proszę o pomoc w temacie.
Go to the top of the page
+Quote Post
Quadina
post 3.12.2010, 11:52:40
Post #2





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


W linii umieścić drukowanie całej tablicy i skopiować nam tutaj wynik ;-) Proszę rówineż napisać w którym miejscu tablicy mają zostać umieszczone nowe dane. Wtedy bez problemu pomożemy. Ewentualnie czy możemy otrzymać wygenerowany plik json?
  1. // w linii 6
  2. print_r($output);


W między czasie wysyłam propozycję takiego skryptu, mam nadzieje, że się przyda.

  1. // pobieramy dane tak jak poprzednio, usunalem tylko niepotrzebne wpisy
  2. $input = file_get_contents("http://192.168.x.x/json");
  3. $output = json_decode($input,true);
  4. $tab = $output['input'][0];
  5.  
  6. // Tworzymy sobie tablice danych ktore chcemy dopisac do pliki z logiem
  7. $save = array(
  8. // generjemy date w troche prostszy sposob
  9. date('Y-m-d H:i:s'),
  10. // nastepnie pobieramy dane tak jak wczasniej
  11. "Modul: ".$tab['id'],
  12. "Kierunek: ".$tab['v'][0],
  13. "Sila: ".$tab['v'][1],
  14. "Jednostka: ".$tab['u'][1],
  15. "",
  16. );
  17.  
  18. // otwieramy plik do zapisu i dodajemy dane z tablicy $save oddzielajac je <ENTEREM>
  19. $file = fopen('log.txt','a+');
  20. fwrite($file, implode($save,"\n"));
  21. fclose($file);
  22.  
  23. // na koncu drukujemy sobie na ekran to samo co zapisalismy do pliku
  24. echo implode($save, "\n");


Ten post edytował Quadina 3.12.2010, 11:44:26


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
dloogi
post 3.12.2010, 12:24:07
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 30.09.2010
Skąd: Gliwice

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


Witam,
  1. print_r($output) daje:


Array ( [vendor] => LAB-EL [type] => LB-489 [sn] => 96 [name] => LB-489 #96 [input] => Array ( [0] => Array ( [name] => Wiatromierz [mode] => s300 [id] => LB-746 #74 [v] => Array ( [0] => 304 [1] => 2 ) [u] => Array ( [0] => ° [1] => m/s ) ) [1] => Array ( [name] => Input 2 [mode] => s300 [id] => [v] => [u] => ) [2] => Array ( [name] => Input 3 [mode] => s300 [id] => [v] => [u] => ) [3] => Array ( [name] => Input 4 [mode] => s300 [id] => [v] => [u] => ) ) ) 3-12-2010 12:18:14 Modul: LB-746 #74 - Kierunek: 304° Sila: 2m/s


W json siedzi:
  1. {
  2. "vendor":"LAB-EL",
  3. "type":"LB-489",
  4. "sn":"96",
  5. "name":"LB-489 #96",
  6. "input":[
  7. {"name":"Input 1","mode":"s300","id":"LB-746 #74","v":[92,0.0],"u":["°","m/s"]},
  8. {"name":"Input 2","mode":"s300","id":null,"v":null,"u":null},
  9. {"name":"Input 3","mode":"s300","id":null,"v":null,"u":null},
  10. {"name":"Input 4","mode":"s300","id":null,"v":null,"u":null}
  11. ]
  12. }


Generalnie wystarczy, żeby po każdym uruchomieniu skryptu do pliku dopisywała się kolejna linka odczytu:
3-12-2010 12:18:14 Modul: LB-746 #74 - Kierunek: 304° Sila: 2m/s
3-12-2010 12:18:34 Modul: LB-746 #74 - Kierunek: 302° Sila: 1m/s
itd.
Go to the top of the page
+Quote Post
Quadina
post 3.12.2010, 12:47:19
Post #4





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


Zatem wystarczy Ci coś takiego:

  1. // pobieramy dane tak jak poprzednio, usunalem tylko niepotrzebne wpisy
  2. $input = file_get_contents("http://192.168.x.x/json");
  3. $output = json_decode($input,true);
  4. $tab = $output['input'][0];
  5.  
  6. // Tworzymy sobie tablice danych ktore chcemy dopisac do pliki z logiem
  7. $save = array(
  8. date('Y-m-d H:i:s'),
  9. "Modul: ".$tab['id'],
  10. "Kierunek: ".$tab['v'][0].$tab['u'][0],
  11. "Sila: ".$tab['v'][1].$tab['u'][1],
  12. );
  13.  
  14. // otwieramy plik do zapisu i dodajemy dane z tablicy $save oddzielajac je <ENTEREM>
  15. $file = fopen('log.txt','a+');
  16. fwrite($file, implode($save," ")."\n");
  17. fclose($file);


Po uruchomieniu w kolejnych linijkach w pliku log.txt będą się dodawać wpisy według podanego przez Ciebie wzoru. Mam nadzieje, że pomogłem smile.gif

Ten post edytował Quadina 3.12.2010, 13:24:54


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
Fifi209
post 3.12.2010, 13:12:03
Post #5





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


@Quadina

Przy ostatnim elemencie tablicy (przed wstawieniem nawiasu) nie dajemy przecinka.
Poza tym zostawiłeś gdzieś niedomknięty apostrof.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
dloogi
post 3.12.2010, 13:24:25
Post #6





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 30.09.2010
Skąd: Gliwice

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


Dziękuje Ci pięknie.smile.gif
Wkleiłem Twój kod:
  1. <?php
  2. $input = file_get_contents("http://192.168.66.220/json");
  3. $output = json_decode($input,true);
  4. $tab = $output['input'][0];
  5.  
  6. $save = array(
  7. date('Y-m-d H:i:s'),
  8. "Modul: ".$tab['id'],
  9. "Kierunek: ".$tab['v'][0].$tab['u'][0],
  10. "Sila: ".$tab['v'][1].$tab['u'][1],
  11. );
  12.  
  13. $file = fopen('log.txt','a+');
  14. fwrite($file, implode($save," ")."\n");
  15. fclose($file);
  16. ?>

Jedna rzecz nie zadziałała. Dopisuje kolejne odczyty w tej samej linii.
Spróbujesz coś jeszcze z tym zrobić?
Dzięki Ci tak czy inaczej wielkie!!
Go to the top of the page
+Quote Post
Quadina
post 3.12.2010, 13:27:20
Post #7





Grupa: Zarejestrowani
Postów: 200
Pomógł: 38
Dołączył: 1.12.2010
Skąd: Wrocław

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


@fifi209
Faktycznie był apostrof jeden nadmiarowy. Przecinek na końcu w PHP nie ma najmniejszego znaczenia - były już o tym ogromne dyskusje, których nie będę tutaj nadmieniał. Fakt pozostaje, że przecinek na końcu nie dodaje żadnego elementu jeżeli zaraz za nim jest nawias - a pozwala to na nie myślenie o tym czy to jest już ostatni element - bo bardzo często w takich sytuacjach kopiuje się linijki i je edytuje, wtedy ten przecinek zmuszałby programistę do dodatkowego myślenia.

@dloogi
  1. // w linii 14
  2. fwrite($file, implode($save," ")."\n\n");

Działa poprawnie ?

Ten post edytował Quadina 3.12.2010, 13:30:40


--------------------
Warsztat: NetBeans 7.2 Beta, PHP, MySQL, PostgreSQL, Symfony (<=1.4), Diem, Java, Sieci neuronowe
Go to the top of the page
+Quote Post
dloogi
post 3.12.2010, 13:28:39
Post #8





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 30.09.2010
Skąd: Gliwice

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


Chociaż nie przepraszam.
Nie widzi enterów w notatniku w Wordpadzie już pokazuje w kolejnych liniach.smile.gif
Dziękuje!!
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: 4.05.2025 - 05:56