Skocz do zawartości

Zablokowane fgets()


Arent

Rekomendowane odpowiedzi

Czy ktoś może wie jak przy pomocy funkcji fgets() wydobyć np. ostatnią lub którąś od końca linię z pliku txt, oraz jak wydodrębnić samą datę i samą liczbę?

 

31-Jan-08 0.8812

3-Jan-08 0.8819

4-Jan-08 0.8762

 

przejrzałem php.net, ale widzę że ta funkcja chyba nie umożliwia czegoś takiego

Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

Nie chce mi się sprawdzać czy kod będzie wolny od błędu, ale lepiej już zastować funkcję file(), która zwraca cały plik w formie tablicy, gdzie każdy element to kolejna linia pliku.

 

$tresc = file ( "sciezka_i_nazwa_do_pliku" );

 

Ostatnia linijka:

$linijka = $tresc[ count( $tresc ) - 1 ];

 

Przedostatnia linijka:

$linijka = $tresc[ count( $tresc ) - 2 ];

 

Pierwsza linijka:

$linijka = $tresc[ 0 ];

 

Żeby wydobyć określone części tekstu, gdzie wiesz w jakim formacie jest zapisany, najlepiej posłużyć się metodą explode, która rozbija tekst i zwraca tablicę. W tym celu trzeba podać odpowiedni separator. Przykładowo ta ostatnia liczba:

 

$rozbicie = explode( " ", $linijka[0] );

$liczba = floatval( $rozbicie[1] ); //wyciagnieto liczbe 0.8812

 

Rok:

$rozbicie2 = explode( "-", $rozbicie[0] );

$rok = intval( $rozbicie2[2] ); // 8

 

Dzień:

$dzien = intval( $rozbicie2[0] ); // 31

 

Miesiąc:

$miesiac = $rozbicie[1]; // Jan

 

 

A tak w o ogóle to lepiej było zapisać daty w formie uniksowego znacznika czasu (liczba zwracana przez funkcję time). Wtedy byś miał same liczby i formatowanie ich z i do daty by było znacznie łatwiejsze.

 

Przykładowa treść pliku daty.txt:

 

1205244118

1205244120

1205244130

 

$daty = file( "daty.txt" );

$czas1 = intval( $daty[0] ); //pobieramy 120524418

 

echo date( "j-M-y G:i:s", $czas1 ); //wyświetli 11-Mar-08 15:01:58

 

Dzięki temu można łatwo sortować, bo czas jest zapisany w liczbie (w bazie danych podobnie, trzymać datę jako liczbę).

Odnośnik do komentarza
Udostępnij na innych stronach

dzięki za info

 

chciałbym jeszcze zrobić coś takiego, że po zapisaniu danych do mysql, została wyświetlona struktura podobna do xml:

 

<set z1='09/06' z2='09' z3='text'/>

<set z1='09/07' z2='07' z3='text'/>

<set z1='09/08' z2='01' z3='text'/>

 

czyli dla z1 wyświetlałoby zawartość kolumny timestamp, a dla z2 wyswietlałoby zawartosc kol. price:

 

<set z1='timestamp' z2='price' z3='text'/>

 

próbowałem coś takiego:

 

$global_dbh = mysql_connect($hostname, $username, $password);

mysql_select_db($db, $global_dbh);

 

$query = "SELECT timestamp. price FROM $tablename WHERE id>=1 ORDER by id";

 

$result = mysql_query($query);

 

while($row = mysql_fetch_array($result)) {

echo "$row['timestamp'], $row['price]<br>\n";

}

 

 

i tutaj w miejsce:

echo "$row['timestamp'], $row['price]<br>\n";

 

próbowałem coś takiego:

 

"<set z1='" . $row['timestamp'] . "' z2='" . $row['price'] . "' z3='text'/>";

 

lub tez tak

 

$strXML .= <set z1='" . $row['timestamp'] . "' z2='" . $row['price'] . "' z3='text'/>";

 

 

ale nie działa

Odnośnik do komentarza
Udostępnij na innych stronach

<?php

$hostname=('xx');

$username=('xxxx');

$password=('xxxx');

$db=('xxxxxxxx');

$tablename=('xxxxx');

 

 

$global_dbh = mysql_connect($hostname, $username, $password);

mysql_select_db($db, $global_dbh);

 

$query = "SELECT timestamp. price FROM $tablename WHERE id>=1 ORDER by id";

 

$result = mysql_query($query);

 

while($row = mysql_fetch_array($result)) {

echo '<set z1="'.$row["timestamp"].'" z2="'.$row["price"].'" z3="tekst" />\n';

 

}

 

?>

 

 

jest coś takiego

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in xml.php on line 17

 

tutaj:

while($row = mysql_fetch_array($result)) {
Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...