Odczytywanie 2 wyrazu z pliku txt


(Janek Max) #1

Witam, mam plik txt który jest zapisany w taki sposób:

alex 22Gb

Romek 33gb

Waldek 49gb

Bartek 40gb

....

I chciałbym aby pobierał odpowiedia linie z wartością gdzie są gb czyli 2 wyraz. Wyglądało by to tak ze gdyby nick zgadzał się z $_SESION['username'] to wyswietlalby ilos gb mu przypisana. Da się takie coś zrobić ?


(Jacek705) #2

otwórz plik

pobiez linię:

while (!eof(file)){

$linia=$fgets($file);

$row=explode(' ',$linia);

if ($row[0]==$_SESSION['username']){

echo $row[1];

}

}

to tylko podpowiedź nie sprawdzałem czy działa


(Janek Max) #3

Też o tym myślałem ale to nie działa tak jak powinno. Wstawiłem taki skrypt, trochę zmodyfikowałem bo były błędy:

<?

$file = fopen("a.txt", "rb");


while (!feof($file)){

$linia=fgets($file);

$row=explode(' ',$linia);

if ($row[1]=='reyder'){

echo $row[0];

}

echo $row[0]; ?>
<?

}

echo $row[0];

fclose($file);

?>

a to jest plik a.txt

34GB zdzichu

24GB reyder

36GB jacek

36GB walrk

87GB awe

Dodatkowo dałem poza ifem echo i poza pętlom. Pierwsze skrypt z ifem się nie wykonał (było pusto). echo w pętli zwracało wynik

34GB

24GB

36GB

36GB

87GB

a if poza pętlą

87GB

Gdy dałem zamiast nicku "reyder" dałęm "awe". Wynik był porawny czyli 87GB. Więc wniosek jest taki że trzeba by było wpisywać odpowiednio $row[3], $row[4], $row[5]...a to nie ma sensu. Macie jakieś inne pomysły ?


(Damgora) #4

funkcja

function ileGB($user, $nazwaPliku) {

    $plik = file($nazwaPliku, FILE_IGNORE_NEW_LINES);

    foreach ($plik as $linia) {

        $linia_fr = explode(' ', $linia);

        if ($linia_fr[0] == $user)

            return $linia_fr[1];

    }

    return false;

}

przykład: plik 'test.txt' w katalogu 'folder':

alex 22Gb

Romek 33gb

Waldek 49gb

Bartek 40gb

ileGB('Romek', 'folder/test.txt');

zwraca '33gb' reyder , w Twoim przypadku byłoby to coś na zasadzie:

if ($GB = ileGB($_SESION['username'], 'twoj_plik.txt'))

    echo $GB;

else

    echo 'brak użytkownika';

u mnie działa, ale jeśli widzicie jakieś błędy to poprawcie :wink:


(Jacek705) #5

albo zamień

if ($row[1]=='reyder')

na

if (trim($row[1])=='reyder')

powinno zadziałać :wink:


(Janek Max) #6

Oba sposoby działają. Dziękuje bardzo :slight_smile: