Autor | Zpráva | ||
---|---|---|---|
jtfcobra Profil |
Ahoj potreboval bych poradit jak to ukladat tohle do MYSQL
je to soubor comm.log jak z toho vyselectovat ten datum,cas id,seq,type,len, prikaz ,text 05/23/2017 14:19:57.96 id: 0001 seq: 0001 < type: 0009 len: 10 CMD_CHECK_PROTOCOL version: 7 05/23/2017 14:19:57.96 id: 0001 seq: 0001 > type: 8001 len: 72 ANS_OK 05/23/2017 14:19:58.07 id: 0001 seq: 0002 < type: 0001 len: 91 CMD_AUTH sender: 0 type: 4 id: 'admin' 05/23/2017 14:19:58.07 id: 0001 seq: 0002 > type: 8002 len: 10 ANS_ERR err_code: 0x1 05/23/2017 14:19:58.07 id: 0001 seq: 0001 > type: 000f len: 12 CMD_DISCONNECT reason: 3 05/23/2017 14:20:01.91 id: 0002 seq: 0003 < type: 0009 len: 10 CMD_CHECK_PROTOCOL version: 7 05/23/2017 14:20:01.91 id: 0002 seq: 0003 > type: 8001 len: 72 ANS_OK 05/23/2017 14:20:01.92 id: 0002 seq: 0004 < type: 0001 len: 91 CMD_AUTH sender: 0 type: 4 id: 'admin' 05/23/2017 14:20:01.92 id: 0002 seq: 0004 > type: 8002 len: 10 ANS_ERR err_code: 0x1 05/23/2017 14:20:01.92 id: 0002 seq: 0001 > type: 000f len: 12 CMD_DISCONNECT reason: 3 05/23/2017 14:24:53.27 id: 0003 seq: 0001 < type: 0009 len: 10 CMD_CHECK_PROTOCOL version: 7 05/23/2017 14:24:53.27 id: 0003 seq: 0001 > type: 8001 len: 72 ANS_OK 05/23/2017 14:24:53.32 id: 0003 seq: 0002 < type: 0001 len: 91 CMD_AUTH sender: 0 type: 4 id: 'Admin' 05/23/2017 14:24:53.32 id: 0003 seq: 0002 > type: 8001 len: 15 ANS_OK 05/23/2017 14:24:53.37 id: 0003 seq: 0003 < type: 0100 len: 16 CMD_USER_LIST limit: 0 offset: 0 05/23/2017 14:24:53.37 id: 0003 seq: 0003 > type: 8001 len: 499 ANS_OK 05/23/2017 14:24:53.40 id: 0003 seq: 0004 < type: 000d len: 10 CMD_SVR_GET_PARAMS parameter_id: 0 |
||
Enko Profil |
#2 · Zasláno: 26. 5. 2017, 12:34:21
Určitě ti může pomoct funkce explode(), kde jako oddělovač použiješ pravděpodobně mezeru (nebo něco, co slouží jako oddělovač)
|
||
jtfcobra Profil |
Udelal jsem to takle a jen jeden radek funguje ale dalsi radek se radi spatne
<?php $s = '05/26/2017 16:55:31.66 id: 000b seq: 0134 > type: 000f len: 12 CMD_DISCONNECT reason: 0'; // $s = '05/26/2017 11:53:34.99 id: 000b seq: 001f > type: 8001 len: 495 ANS_OK '; // nefunguje $pole = explode(' ', $s); //print_r($pole); echo 'Datum: '.$pole[0].'</br>'; echo 'Cas: '.$pole[1].'</br>'; echo 'ID: '.$pole[3].'</br>'; echo 'Seqvence: '.$pole[5].'</br>'; echo 'Prenos: '.$pole[6].'</br>'; echo 'Typ: '.$pole[9].'</br>'; echo 'Len: '.$pole[14].'</br>'; echo 'Prikaz: '.$pole[15].'</br>'; /* $s1 Datum: 05/26/2017 Cas: 16:55:31.66 ID: 000b Seqvence: 0134 Prenos: > Typ: 000f Len: 12 Prikaz: CMD_DISCONNECT */ /* $s2 Datum: 05/26/2017 Cas: 11:53:34.99 ID: 000b Seqvence: 001f Prenos: Typ: 8001 Len: ANS_OK Prikaz: */ |
||
Keeehi Profil |
#4 · Zasláno: 26. 5. 2017, 18:49:58
Problémem jsou ty mezery, kterých není stejný počet. Proto explode nebude vhodný přístup.
Použil bych regulárním výrazy. Ty se v pohodě zvládnou popírat s více mezerami. |
||
TomášK Profil |
#5 · Zasláno: 26. 5. 2017, 18:58:44
$date = substr($line, 0, 21); nebo $pole = preg_split("/\s+/", $line);
|
||
Časová prodleva: 3 dny
|
|||
Medvídek Profil |
Udělal jsem v rychlosti regular dle dodanych dat:
/([\d]{2}\/[\d]{2}\/[\d]{4})[\s]([\d]{2}:[\d]{2}:[\d]{2}\.[\d]{2})\sid:\s([\d]{4})\sseq:\s([\d]{4})[\s<>]*type:\s([\da-f]{4})\slen:[\s]*([\d]{2})\s([\w]*)/ Najde to správně všechny záznamy z dodaného vzorku: Match 1 Full match 0-85 `05/23/2017 14:19:57.96 id: 0001 seq: 0001 < type: 0009 len: 10 CMD_CHECK_PROTOCOL` Group 1. 0-10 `05/23/2017` Group 2. 11-22 `14:19:57.96` Group 3. 27-31 `0001` Group 4. 37-41 `0001` Group 5. 51-55 `0009` Group 6. 64-66 `10` Group 7. 67-85 `CMD_CHECK_PROTOCOL` Match 2 Full match 101-174 `05/23/2017 14:19:57.96 id: 0001 seq: 0001 > type: 8001 len: 72 ANS_OK` Group 1. 101-111 `05/23/2017` Group 2. 112-123 `14:19:57.96` Group 3. 128-132 `0001` Group 4. 138-142 `0001` Group 5. 152-156 `8001` Group 6. 165-167 `72` Group 7. 168-174 `ANS_OK` Match 3 Full match 192-267 `05/23/2017 14:19:58.07 id: 0001 seq: 0002 < type: 0001 len: 91 CMD_AUTH` Group 1. 192-202 `05/23/2017` Group 2. 203-214 `14:19:58.07` Group 3. 219-223 `0001` Group 4. 229-233 `0002` Group 5. 243-247 `0001` Group 6. 256-258 `91` Group 7. 259-267 `CMD_AUTH` Možno vyzkoušet tady s jiným vzorkem dat: regex101.com/r/PqCLu7/2 - kod pro php: regex101.com/r/PqCLu7/2/codegen?language=php Ty mezery co byly pevné jsou jako pevné, v případě, že by byl dynamické počet mezer i na jiných místech, tak nahradit pomocí [\s]* |
||
Časová prodleva: 6 let
|
0