←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

PHP
Pobieranie z pliku dwóch wartości

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Mam w pliku jakiśplik.txt zapisane kilka linijek:

jakieś_tam_literki    jakieś_tam_cyferki
jakieś_tam_literki    jakieś_tam_cyferki
jakieś_tam_literki    jakieś_tam_cyferki
....

Z tym że "literki" mogą być maksymalnie trzema wyrazami.

 

I teraz pytanie jak pobrać "literki" i "cyferki" do innego pliku do if'a który sprawdzi czy "cyferki" == xxx i podmieni te "cyferki" na "literki" z pliku .txt ?

 

 


Użytkownik playaz44 edytował ten post 14.08.2013 18:21
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

Twój temat nie jest w 100% dla mnie zrozumiały, postaraj się trochę lepiej i na spokojnie opisać co dokładnie chcesz uzyskać.

Odpowiedz

PHP <3 - zdjęcie PHP <3 14.08.2013

Chodzi mu pewnie o zmianę jakiejś wartości w pliku po jej uprzednim znalezieniu, służy do tego fopen("plik.txt", "w") i fseek(); ale trochę trzeba się namęczyć :D

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

@PHP <3, nie, nie o to mi chodzi



Mam dwa pliki, jeden .php który robi za "silnik" i drugi .txt w którym są takie dane:
 
 
nick1   4365436
nick2   345346
nick3   435236
nick4   3426526
...
//"nick" "numer" //żeby było wiadomo niżej co jest co 
Z tym, że "nicki" mogą mieć max 3 wyrazy (np. xxx ccc vvv), ewentualnie mogę użyć "str_replace" do usunięcia spacji żeby "nick" miał jeden wyraz a nie trzy

Mam przychodzącą wiadomość która zawsze jest w takiej formie
Wiadomość od użytkownika: "numer" o treści: "wiadomość"
Chcę pobrać z pliku .txt do "silnika" najpierw "numer" żeby porównać czy "numer" który pokazał się przy powyższej wiadomości ma w pliku .txt obok siebie jakiś "nick" i jeżeli ma to zamienił "numer" na "nick" z pliku txt

Może łatwiej będzie jak napisze to w pseudo-kodzie bo nie wiem jak to wytłumaczyć :P
 
jeżeli $numer_ktory_napisał == $numerowi_z_pliku

to zamień $numer_ktory_napisał na $nick_z_pliku_txt

Wiem że mógłbym klepać cały czas
$wyslane = strip_tags($HTTP_RAW_POST_DATA);
...
if($numer_ktory_napisal == 12345)
{
$wiadomosc = str_replace($numer_ktory_napisal, 'nick_dla_numeru_12345', $wyslane);
}
I tak dla każdego numeru ale to mija się z celem bo po pierwsze za każdym razem musiałbym mieszać w kodzie, a po drugie teraz mam tyc numerów 129 więc dodawanie ich ręcznie to byłoby z lekka sami wiecie jakie...
A tak miałbym możliwość łatwego dodania/usunięcia jakiegoś nicku z numerem dodając w nowej linii w pliku txt "nick" "numer"
Użytkownik playaz44 edytował ten post 14.08.2013 19:03
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

I teraz wszystko ładnie wytłumaczone :)

 

Funkcja PHP

file()

 

Jedziesz po każdej lini

Nick od Numeru rozdziel funkcją explode() lub preg_match_all :]

 

Dane z pliku zapisz do jakiejś tablicy

np 

$users[$numer] = $nick

 

I potem sprawdzaj, to jakim sposobem sprawdzisz można np...

if(in_array($numer, $users))

{

     $nick = $users[$numer];

}

else

{

echo 'nie ma takiego użytkownika';

}

 

Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

W każdej linijce oddziel nick od numeru np "$" lub jakimś innym niedozwolonym znakiem dla nicku (bo numer to oczywiście INT), to ułatwi ci o wiele rozdzielenie :) 

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Nie wiem, nie umiem, zgubiłem się :D

naprodukowałem takie coś:
 
if (substr($wyslane, 0, 4) == "/pw " || substr($wyslane, 0, 4) == ".pw ")
{
	$plik = file('kontakty.txt');
	$itoito = explode(' ', $plik);
	$nickplik = $itoito[0];
	$numerplik = $itoito[1];
	$numerypliku[$numer] = $numerplik;
	
	if(in_array($numer, $numerplik))
	{
	$users = $numerypliku[$numer];
	}
	else
	{
	$users = $numergg;
	}
	
	$M->addText('Wiadomość wysłana');
	$M->reply();
	$M->clear();
	$wiadomosc = str_replace('/pw ', '', $wyslane);
	if($numergg == $users)
	{
	$M->addText('Wiadomość od użytkownika: '.$nickplik.' o treści: '.$wiadomosc);
	}
	else 
	{
	$M->addText('Wiadomość od użytkownika: '.$numergg.'(nieznajomy) o treści: '.$wiadomosc);
	}
	$M->setRecipients(44321102);
	$P->push($M);
	}
w zmiennej $numergg jest zapisany numer który napisał "/pw", a $wyslane to "/pw *ten_tekst*"

efekt tego powyżej: do każdej wiadomości dokleja na początku cały plik z nickami i numerami nawet kiedy "/pw" lub ".pw" nie są wpisywane, naprowadzisz mnie na właściwą drogę? :D
Użytkownik playaz44 edytował ten post 14.08.2013 20:03
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

1.

$plik = file('kontakty.txt');

Funkcja file() zwraca linie pliku jako tablicę więc użyj foreach.

 

Pobierz WSZYSTKICH użytkowników przed rozpoczęciem skryptu ;) 

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Poddaje się, nie umiem, można to jakoś inaczej zrobić bez pętli których nie umiem?
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

Foreach(ponieważ to ci się do tego przyda)

http://php.net/manua...res.foreach.php

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Zrobiłem tak:

foreach($plik as $zmienna)
ale co mi to da jak zatkało mnie w miejscu, nie wiem co mam z tym zrobić, gdzie to wstawić ani do czego tą $zmienna przypisać
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

przed foreach zrób

$_all_users = array();

w foreach

 

$zmienna to jest dana linia.

czyli w foreach zrób rozdzielenie Nicku od numeru

i przypisz do $_all_users

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

if (substr($wyslane, 0, 4) == "/pw " || substr($wyslane, 0, 4) == ".pw ")
{
	$plik = file('kontakty.txt');
	$_all_users = array();
	foreach($plik as $zmienna);
	{
	$_all_users = explode(' ', $zmienna);
	$nickplik = $_all_users[0];
	$numerplik = $_all_users[1];
	}
	$numerypliku[$numer] = $numerplik;
	
	if(in_array($numer, $numerplik))
	{
	$users = $numerypliku[$numer];
	}
	else
	{
	$users = $numergg;
	}
	
	$M->addText('Wiadomość wysłana');
	$M->reply();
	$M->clear();
	$wiadomosc = str_replace('/pw ', '', $wyslane);
	if($numergg == $users)
	{
	$M->addText('Wiadomość od użytkownika: '.$nickplik.' o treści: '.$wiadomosc);
	}
	else 
	{
	$M->addText('Wiadomość od użytkownika: '.$numergg.'(nieznajomy) o treści: '.$wiadomosc);
	}
	$M->setRecipients(44321102);
	$P->push($M);
	}
Tak?
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

$_all_users = array();

 foreach($plik as $zmienna);

{
    $zmienna = explode(' ', $zmienna);
    $_all_users[$zmienna[0]] = $zmienna[1];
}

tak.

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

<b>Warning</b>: in_array() [<a href='function.in-array'>function.in-array</a>]: Wrong datatype for second argument in <b>/playaz44/bot.php</b> on line <b>97</b><br />
<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /playaz44/kontakty.txt:25) in <b>/playaz44/MessageBuilder.php</b> on line <b>331</b><br/>
A do tego na początku dokleiło cały plik txt
Użytkownik playaz44 edytował ten post 14.08.2013 21:08
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 14.08.2013

Zmień sprawdzanie.

zamiast in_array to sprawdzaj isset.

if(isset($_all_users[$nick]))

oczywiście $nick to twoja zmienna.

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Teraz dokleja cały plik txt i wywala
<b>Warning</b>:  Cannot modify header information - headers already sent by (output started at /playaz44/kontakty.txt:25) in <b>/playaz44/MessageBuilder.php</b> on line <b>331</b><br />
Dokleja też cały txt gdy nie wpisuje /pw


tak mam aktualnie:
 
	$plik = file('kontakty.txt');
	$_all_users = array();
	foreach($plik as $zmienna);
{
    $zmienna = explode(' ', $zmienna);
    $_all_users[$nickplik[0]] = $numerplik[1];
}
	$numerypliku[$numer] = $numerplik;
	
	if(isset($_all_users[$numerplik]))
	{
	$users = $numerypliku[$numer];
	}
	else
	{
	$users = $numergg;
	}
I jakbyś mógł dodać komentarze co jest co bo ja już nic nie wiem, dodaje tylko to co ty mi podajesz
Użytkownik playaz44 edytował ten post 14.08.2013 21:28
Odpowiedz

PHP <3 - zdjęcie PHP <3 14.08.2013

Notatnik czy notepad++?

Odpowiedz

  • +
  • -
Engi - zdjęcie Engi 14.08.2013

Notepad++
Odpowiedz

  • +
  • -
Gh0st - zdjęcie Gh0st 15.08.2013

Czuje że to tłumaczenie jest na nic bo ty i tak robisz po swojemu. Nick gracza pobieraj z $_all_users. 

Headers? daj w załącznik obydwa pliki, silnik i ten txt

Odpowiedz