Pobieranie z pliku dwóch wartości
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
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ć.
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ć
Engi
14.08.2013
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 coZ 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ć
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
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';
}
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
Engi
14.08.2013
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ę?
Użytkownik playaz44 edytował ten post 14.08.2013 20:03
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
Engi
14.08.2013
Gh0st
14.08.2013
Foreach(ponieważ to ci się do tego przyda)
Engi
14.08.2013
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ć
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
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?
Gh0st
14.08.2013
$_all_users = array();
foreach($plik as $zmienna);
{
$zmienna = explode(' ', $zmienna);
$_all_users[$zmienna[0]] = $zmienna[1];
}
tak.
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
Gh0st
14.08.2013
Zmień sprawdzanie.
zamiast in_array to sprawdzaj isset.
if(isset($_all_users[$nick]))
oczywiście $nick to twoja zmienna.
Engi
14.08.2013
<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
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