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
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
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
$date = substr($line, 0, 21); nebo $pole = preg_split("/\s+/", $line);
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]*

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0