Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Operacje na 2 plikach danych
sobol6803
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


Witam. Mam małą zagwozdkę i za bardzo nie wiem jak z tego wyjść. Z programowania jestem początkujący, a w internecie nie znalazłem odpowiedzi na moje pytanie. Mam skrypt, który łączy się z bazą danych mysql, wybiera z niej osoby, które wybrałem (WHERE) i wyświetla ich dane z 2 tablic. Później je sortuje od największej do najmniejszej i umieszcza w pliku txt w takim schemacie:
Kod
Rank1:
1. osoba1
Tablica1: 311670

2. osoba2
Tablica1: 246938

(...)

Rank2:
1. osoba1
Tablica2: 3428

2. osoba2
Tablica2: 2404

(...)


Chcę dodać ten skrypt do crona, żeby co miesiąc go wywoływał i spisywał nowe wartości. Później od nowych wartości dla zapisanych osób odejmował stare i zapisywał te różnice. I tu nasuwa się moje pytanie. Jak to zrobić? Może zapisywać je w innym stylu, do innego formatu? Jak wykonać później tą różnicę?

Jeśli potrzebujecie jakiś kawałek kodu to piszcie śmiało.

Z góry dzięki za pomoc,
Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
Fixus
post
Post #2





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


aż się porsi o jakiś banalny zapis typu csv. W ten sposób kosmicznie to komplikujesz

12;ktos;ktosiowy
13;inny;pan
14;inna;pani

Teraz wczytujesz linia po linii robisz explode po ; i masz każdy wiesz w tablicy. dużo prościej
Go to the top of the page
+Quote Post
sobol6803
post
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


Dobra, plik zrobiłem z pomocą "INTO OUTFILE" i zrobił się. Niestety nie chce się nadpisywać i przy każdym generowaniu będę musiał zmieniać nazwę pliku, a stare dalej tam pozostaną. Jak usunąć te zbędne?

W dodatku w pliku co się generuje mam krzaki i zapis "bad handshake". Jak sobie z tym poradzić?
Go to the top of the page
+Quote Post
Fixus
post
Post #4





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


w jaki sposób generujesz plik ? możesz wkleić funkcję ?

usunięcie pliku możesz wykonać za pomocą funkcji unlink()

btw odrobina pracy w formie wpisania tego do wyszukiwarki nie boli (IMG:style_emoticons/default/smile.gif)

http://www.google.pl/search?q=php+delete+f...lient=firefox-a
Go to the top of the page
+Quote Post
sobol6803
post
Post #5





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


  1. $sql = "SELECT * FROM players WHERE NAME='user1' OR NAME='user2' INTO OUTFILE 'ranking3.csv' FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY ';' LINES TERMINATED BY '\n'";



  1. unlink('sciezka');
nie usuwa pliku ze sql'a tylko próbuje z serwera, na którym jest skrypt. Nie działa nawet po wskazaniu ścieżki wraz z portem do mysql (przez który ściągam wygenerowane pliki).


Sorry, ale nieogar jestem, na poziomie początkującego początkującego (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Fixus
post
Post #6





Grupa: Zarejestrowani
Postów: 295
Pomógł: 9
Dołączył: 8.02.2006

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


ale co ty chcesz z sql`a usuwać ?

pofatygowałeś się chociaż do dokumentacji tej metody ?
Go to the top of the page
+Quote Post
sobol6803
post
Post #7





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


Przez tą metodę pliki nie zrobiły mi się na serwerze tylko na sql'u. Mogę je tylko pobrać wklepując adres w przeglądarce.

W necie zobaczyłem taką metodę na zapisywanie .csv więc jej użyłem. Za bardzo się w to nie wczytywałem.
Go to the top of the page
+Quote Post
CuteOne
post
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Tworzenie pliku z danymi...

  1. <?php
  2.  
  3. $sql = mysql_query("SELECT * FROM players WHERE NAME='user1' OR NAME='user2'");
  4.  
  5. $toWrite = '';
  6. while($row = mysql_fetch_array($sql)) {
  7.  
  8. $toWrite .= $row['NAME'].','.$row['ID']."\r\n"; // tu sobie zapisuj jakie dane chcesz
  9. }
  10.  
  11. $handler = fopen('plik.txt', "w");
  12. fwrite($toWrite, $handler);
  13. fclose($handler);
  14.  


to odczytu pliku służy funkcja fread

Ten post edytował CuteOne 20.06.2011, 00:05:39
Go to the top of the page
+Quote Post
sobol6803
post
Post #9





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


Taki miałem na początku, zapisywał do txt. Tylko nie mówcie, że wystarczyło zmienić rozszerzenie w fopen na csv i metodę printowania wyników (IMG:style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post
CuteOne
post
Post #10





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. $handler = fopen('plik.txt', "r");
  2. if ($handler) {
  3. while (!feof($handler)) {
  4.  
  5. $lines[] = explode(',', fgets($handler, 4096));
  6. }
  7. fclose($handle);
  8. }
  9.  
  10. echo '<pre>';
  11. print_r($lines);


czytanie pliku linijka po linijce

Ten post edytował CuteOne 20.06.2011, 00:21:40
Go to the top of the page
+Quote Post
by_ikar
post
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Masz tablice, tablice serializuj (serialize), zserializowaną zapisz do pliku (file_put_contents). Później odczytaj unserialize i masz tablice. Po co regexy i pętle tutaj zaprzęgać?

BTW, php 5 wyszło 9 lat temu, funkcje typu file_get_contents czy file_put_contents powinny być na porządku dziennym.
Go to the top of the page
+Quote Post
sobol6803
post
Post #12





Grupa: Zarejestrowani
Postów: 115
Pomógł: 13
Dołączył: 19.06.2011
Skąd: Ruda Śląska

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


Na wstępie przepraszam za mały zastój, ale kilka ważniejszych spraw w tym czasie wynikło. Do rzeczy:

Cytat(CuteOne @ 20.06.2011, 01:04:25 ) *
Tworzenie pliku z danymi...

  1. <?php
  2.  
  3. $sql = mysql_query("SELECT * FROM players WHERE name='user1' OR NAME='user2'");
  4.  
  5. $toWrite = '';
  6. while($row = mysql_fetch_array($sql)) {
  7.  
  8. $toWrite .= $row['NAME'].','.$row['ID']."\r\n"; // tu sobie zapisuj jakie dane chcesz
  9. }
  10.  
  11. $handler = fopen('plik.txt', "w");
  12. fwrite($toWrite, $handler);
  13. fclose($handler);
  14.  


to odczytu pliku służy funkcja fread


To działa. Ładnie zapisuje do pliku.

Cytat( @ 20.06.2011, 10:03:33 )
Masz tablice, tablice serializuj (serialize), zserializowaną zapisz do pliku (file_put_contents). Później odczytaj unserialize i masz tablice. Po co regexy i pętle tutaj zaprzęgać?

BTW, php 5 wyszło 9 lat temu, funkcje typu file_get_contents czy file_put_contents powinny być na porządku dziennym.

Nie do końca wiem na czym polega serialize.

Zrobiłem:
  1. $tabliczka= serialize($tablica['NAME'].','.$tablica['SCORE'].','.$tablica['KILLS'].'\r\n');

I przed NAME są jakieś syfy, w dodatku ja potrzebuję pętle raczej, bo musi mi to układać jak ranking, czyli pozycjami oraz je numerować. Tak jak teraz na to patrzę, to ten zapis jest bez sensu...


Jeszcze raz może napiszę:
Potrzebuję z tych 3 tablic zrobić 2 rankingi. 1 z tablic 'NAME' i 'SCORE' i zapisać. Później 2 ranking z tablic 'NAME' i 'KILLS' i zapisać.
Później te rankingi zapisać (zarchiwizować) przez dodanie do crona, by robił zrzuty każdego 1 dnia miesiąca. <--to sobie zrobię sam, w tym akurat pomocy raczej nie potrzebuję.

Dalej przykładowo:
Dla każdej osoby ('NAME') odjąć same wartości 'SCORE' i 'KILLS' ze zrzutu z 1.06.2011 i 1.07.2011, by otrzymać PRZYROST, czyli wartość, która przez ten miesiąc przybyła w tych tablicach.

Gotowy, ranking (a właściwie 2) dodać do crona, by się wysyłał jako temat na forum phpbb3 (<-- to sobie zrobię sam, w tym akurat pomocy raczej nie potrzebuję.


Sam wygląd (układ) rankingu mogę sobie posortować dopiero w ostatnim pliku generującym temat na forum, więc wcześniej on może mieć jakiekolwiek postacie, tylko żeby łatwo było obliczyć każdemu 'NAME' przyrost.

Myślę, że nie namieszałem za bardzo.

Pozdrawiam.

EDYCJA:
  1. $naglowek = ",name,score,kills \r\n";
  2. while($row = mysql_fetch_array($db_erg)) {
  3.  
  4. $toWrite .= $nr.'.,'.$row['NAME'].','.$row['SCORE'].','.$row['KILLS']."\r\n";
  5. $nr++;
  6. }
  7. $date= date('d-m').'.csv';
  8. $plik= fopen($date, "w");
  9. fclose($plik);
  10. $wszystko = $naglowek.$toWrite;
  11. file_put_contents($date, $wszystko);
  12.  
  13. $row=1;
  14. if (($plik = fopen("$date", "r")) !== FALSE) {
  15. while (($wyswietl= fgetcsv($plik, 1000, ",")) !== FALSE)
  16. {
  17. $num = count($wyswietl);
  18. $row++;
  19. for ($c=0; $c < $num; $c++) {
  20. echo $wyswietl[$c] . "<br />\n";
  21. }
  22. }
  23. }
  24. fclose($plik);


Po tym wszystkim, chyba powinienem mieć stworzone tablice nick[], score[], kills[], nie? Czy zrobiłem coś źle, że tych tablic nie ma?

Ten post edytował sobol6803 24.06.2011, 00:18:59
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 23:58