Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Generator raportów
Forum PHP.pl > Forum > PHP
TheDuliMen
A więc tak chciałem stworzyć generator raportów dla pewnej gry, jednak napotkałem się na problem nie do przejścia jak dla mnie. Mam kawałek treści raportu jaki dostaje skrypt:

Długość toru: 5821m
Długość trasy: 17 463m
Liczba okrążeń: 3
Informacje na temat uczestników
TheBoyOfThePoland
Informacje na temat gracza
Poziom: 18
Doświadczenie:
(654 / 684)
Informacje na temat pojazdu
Mercedes Benz 190

Skrypt:
  1. <?php
  2. /*********************************************
  3. * plik formularz.php
  4. *********************************************/
  5.  
  6. $pole1 = trim($_POST['pole1']);
  7.  
  8. if(empty($pole1)) {
  9.  
  10. echo '<html>
  11. <head>
  12. <title>
  13. Generator raportów
  14. </title>
  15. <style type="text/css"> body {background-color: #EE7621;} </style>
  16. </head>
  17. </html>
  18. <div align="center">
  19. Wklej tutaj swój raport:<br>
  20. <br>
  21. <form action="" method="post">
  22. <textarea name="pole1" style="width: 50%; height: 30%"></textarea><br />
  23. <input type="submit" value="Generuj raport!" />
  24. </form>
  25. </div>';
  26. }
  27. else {
  28.  
  29. // dane pochodzące z formularza
  30. $dane = $pole1;
  31. // przypisanie zmniennej $file nazwy pliku
  32. $file = "raporty/".date('dmYHis').".txt";
  33. // uchwyt pliku, otwarcie do dopisania
  34. $fp = fopen($file, "a");
  35. // blokada pliku do zapisu
  36. flock($fp, 2);
  37. // zapisanie danych do pliku
  38. fwrite($fp, $dane);
  39. // odblokowanie pliku
  40. flock($fp, 3);
  41. // zamknięcie pliku
  42. fclose($fp);
  43.  
  44. $plik = file('./'.$file);
  45. //tutaj kod brakujący
  46.  
  47. echo '<html>
  48. <head>
  49. <title>
  50. Generator raportów RaceGame.pl by TheBoyOfThePoland
  51. </title>
  52. <style type="text/css"> body {background-color: #EE7621;} </style>
  53. </head>
  54. </html>
  55. <div align="center">';
  56. echo "<textarea></textarea>";
  57. }
  58.  
  59. ?>


Chciałbym aby np. do zmienej $r1 pobrało informację o długości toru. Ale chodzi o samą liczbę.

Dobre to puki to jest w jednej linii, a co zrobić jak ja chcę pobrać coś co nazwę ma w jednej linii, a wartość w drugiej. Ogólnie próbowałem zabawy w poszczególne linie, ale różne raporty są i linie będą się zmieniać.
tolomei
Witaj.

W miejsce, gdzie jest "//tutaj kod brakujący" - coś takiego:

  1. preg_match('#Długość toru:\s*?(\d+?)m#', $dane, $tablica);
  2. $r1 = $tablica[1];


Przetestuj - powinno działać dla danych w jednej linii jaki i w osobnych liniach.

Pozdrawiam.
TheDuliMen
Gościu jesteś wielki!!! W zasadzie jedna linijka i problem główny rozwiązany wink.gif

Teraz jak możesz powiedz mi jak wyszukać osobno dane które tak samo się nazywają?

Wycinek z góry dokumentu:
Knzi
Informacje na temat gracza
Poziom: 16
Doświadczenie:
(511 / 539)
Informacje na temat pojazdu
Mercedes Benz 190

Moc:
(71 + 5)


Wycinek z dołu dokumentu:
TheBoyOfThePoland
Informacje na temat gracza
Poziom: 18
Doświadczenie:
(654 / 684)
Informacje na temat pojazdu
Mercedes Benz 190

Moc:
(71 + 18)


Powiedzmy że to ma być w $r2, a jeśli zamiast
(71 + 18) będzie (71) to mi chodzi tak żeby nie kopiowało tylko to co w nawiasie.
tolomei
Wtedy używasz funkcji preg_match_all().

  1. preg_match_all('#Moc:\s*?\(([^\)]+?)\)#', $dane, $tablica);
  2. $r2 = $tablica[1];


Twoje $r2 będzie zawierało tablicę:
Kod
Array
(
      [0] => 71 + 5
      [1] => 71 + 18
)


Polecam naukę wyrażeń regularnych
http://gajdaw.pl/php/wyrazenia-regularne-p...utorial/p1.html
Świetny kurs.

Pozdrawiam.
TheDuliMen
Powiedz mi dlaczego to nie działa?
  1. preg_match('#Informacje na temat wyścigu rodzaju utrudnionego rozpoczętego dnia (\d+?) o godzinie 17:59:34 między Tobą a graczem Knzi.#', $dane, $tablica);
tolomei
Podaj jeszcze dokładną zawartość zmiennej $dane.
TheDuliMen
Kawałek:
Temat: Wyścig
Nadawca: RaceGame
Data otrzymania: 30.06.2012 18:30:02
Informacje na temat wyścigu rodzaju utrudnionego rozpoczętego dnia 30.06.2012 o godzinie 17:59:34 między Tobą a graczem Knzi.
Informacje na temat toru

Próbowałem jeszcze:
  1. preg_match('#Informacje na temat wyścigu rodzaju utrudnionego rozpoczętego dnia (\d*) o godzinie 17:59:34 między Tobą a graczem Knzi.#', $dane, $tablica);

[b]To powyżej już naprawione[b]
  1. preg_match('#dnia (\d*).(\d*).(\d*)#', $dane, $tablica);
  2. $r1 = $tablica[1];
  3. $r2 = $tablica[2];
  4. $r3 = $tablica[3];


Mam jeszcze jeden problem...
  1. preg_match('#Temat:\s*(\w*)#', $dane, $tablica);

Nie odczytuje polskich znaków... Jak je odczytać?
tolomei
Musisz zadbać o to, aby kodowanie strony w <meta> było identyczne z kodowaniem samych plików wszystkich skryptów.
TheDuliMen
Dobra dzięki, a powiedz mi jak mogę np. w $r1 jest 'używane' zamienić to na 'używany' ?

Np. Da się zrobić coś takiego że w $r3 jest '123' a w $r4 jest '1231', da się to np. odjąć lub dodać?
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.