[Resolvido] PHP Exp. Regular
Boa tarde pessoal, tudo bem com vocês?
Sou consultor ABAP, porém tenho que voltar as minhas raizes e desenvolver um sisteminha em PHP aqui para a consultoria em que trabalho.
O programa é "simples", tenho um programa ABAP e preciso fazer algumas validações em seu código fonte. Então pensei logo no nosso querido amigo preg_split para poder separar o código com "problema".
Por exemplo, tenho uma regra que diz que não é bom fazer "SELECT " então tenho que procurar todos os comandos SQL com SELECT .
Por exemplo, o código abaixo:
REPORT Zbc0046.
TABLES: ztbc045, " Registros de usuários
ztbc045_log. " Log de Registros de usuários
TYPE-POOLS: truxs, slis.
DATA: t_ztbc045 TYPE STANDARD TABLE OF ztbc045, " Tabela principal.
wa_ztbc045 LIKE LINE OF t_ztbc045, " WA da tabela principal.
e_ztbc045 TYPE ztbc045,
" Tabela interna auxiliar de Log de erros.
aux_log_ztbc045 LIKE LINE OF t_ztbc045,
" Tabela interna da tabela de LOG de GRUD de usuários.
t_ztbc045_log LIKE ztbc045_log OCCURS 0,
" WA da tabela de LOG de GRUD de usuários.
wa_ztbc045_log TYPE ztbc045_log.
* Tabela de sistemas para a tela do usuário
data: t_systens type USZBVSYS OCCURS 0.
TYPES: BEGIN OF ty_log_erros,
msg_erro TYPE string,
bname TYPE ztbc045-bname,
acao TYPE ztbc045-acao,
pernr TYPE ztbc045-pernr,
land1 TYPE ztbc045-land1,
ussystem TYPE ztbc045-ussystem,
incidencia TYPE ztbc045-incidencia,
datei TYPE ztbc045-datei,
name1 TYPE ztbc045-name1,
email TYPE ztbc045-email,
link_email TYPE ztbc045-link_email,
observacao TYPE ztbc045-observacao,
uname TYPE ztbc045-uname,
udate TYPE ztbc045-udate,
END OF ty_log_erros.
DATA: wa_log_erros TYPE ty_log_erros.
DATA: t_log_erros TYPE STANDARD TABLE OF ty_log_erros.
* Tabela interna do arquivo excel sem o MANDT.
DATA: BEGIN OF t_excel_ztbc045 OCCURS 0,
bname TYPE ztbc045-bname,
acao TYPE ztbc045-acao,
pernr TYPE ztbc045-pernr,
land1 TYPE ztbc045-land1,
ussystem TYPE ztbc045-ussystem,
incidencia TYPE ztbc045-incidencia,
datei TYPE ztbc045-datei,
name1 TYPE ztbc045-name1,
email TYPE ztbc045-email,
link_email TYPE ztbc045-link_email,
observacao TYPE ztbc045-observacao,
uname TYPE ztbc045-uname,
udate TYPE ztbc045-udate,
tp_atualiza TYPE ztbc045_log-tp_atualiza,
END OF t_excel_ztbc045.
* ALV OOP.
DATA: ctl_alv TYPE REF TO cl_gui_alv_grid,
ctl_cccontainer TYPE REF TO cl_gui_custom_container.
* ALV field catalogs OOP
DATA: it_fieldcatalog TYPE lvc_t_fcat,
wa_fieldcatalog TYPE lvc_s_fcat.
* ActionW - Leonardo Fanhoni - 12.05.2011 - Inicio
DATA: it_fieldcatalog_alv TYPE slis_t_fieldcat_alv,
wa_fieldcatalog_alv TYPE slis_fieldcat_alv.
* ALV layout (basico).
DATA: gs_layout_basic TYPE slis_layout_alv.
* Sort para o ALV basico.
DATA it_sort_alv TYPE slis_t_sortinfo_alv.
* ActionW - Leonardo Fanhoni - 12.05.2011. - Final
* ALV layout OOP
DATA: gs_layout TYPE lvc_s_layo.
* ALV layout variant OOP
DATA: gs_variant TYPE disvariant.
DATA: gf_first_display TYPE c VALUE 'X'.
DATA: wa_sort TYPE lvc_s_sort,
it_sort TYPE lvc_t_sort.
* Constants
CONSTANTS: c_x(1) TYPE c VALUE 'X',
c_s TYPE c VALUE 'S',
c_e TYPE c VALUE 'E'.
DATA: gs_change TYPE flag.
DATA: gs_qtde(6) TYPE n.
DATA: gs_qtde_erros(6) TYPE n.
DATA msg(50) TYPE c.
DATA: f4_system_tab TYPE ussystem OCCURS 0 WITH HEADER LINE.
**********************************************************************
** SCREEN SELECTION
**********************************************************************
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN POSITION 1.
PARAMETER p_qua1 RADIOBUTTON GROUP pad1 DEFAULT 'X' USER-COMMAND sap.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-010.
SELECT-OPTIONS:
so_user FOR ztbc045-bname MODIF ID b1, " Nome do usuário no mestre de usuários
so_date FOR ztbc045-datei MODIF ID b1, " Data atual do servidor de aplicação
so_land1 FOR ztbc045-land1 MODIF ID b1, " Chave do país
so_acao FOR ztbc045-acao MODIF ID b1. " AçãoSELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETER p_qua2 RADIOBUTTON GROUP pad1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-011.
PARAMETER: p_path TYPE rlgrap-filename MODIF ID b2. " OBLIGATORY.
SELECTION-SCREEN END OF BLOCK b2.
INITIALIZATION.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
IF NOT p_qua2 IS INITIAL.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_PATH'
IMPORTING
file_name = p_path.
ENDIF.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-group1 EQ 'B1' AND p_qua1 NE 'X'.
screen-input = '0'.
MODIFY SCREEN.
FREE: so_user,so_date,so_land1,so_acao .
ENDIF.
IF screen-group1 EQ 'B2' AND p_qua2 NE 'X'.
screen-input = '0'.
MODIFY SCREEN.
MOVE '' TO p_path.
ENDIF.
ENDLOOP.
START-OF-SELECTION.
IF p_qua2 EQ 'X' AND p_path IS INITIAL.
MESSAGE 'Nome do arquivo obrigatório' TYPE 'I' DISPLAY LIKE 'E'.
STOP.
ENDIF.
IF p_qua1 EQ 'X'.
CLEAR: t_ztbc045.
REFRESH: t_ztbc045.
PERFORM zf_carrega_dados.
CALL SCREEN 2000.
ELSE.
PERFORM import_from_excel_to_sap.
CHECK t_excel_ztbc045[] IS NOT INITIAL.
PERFORM grava_dados_zbc0045_log.
IF NOT t_log_erros[] IS INITIAL.
PERFORM monta_fieldcat.
PERFORM monta_alv_log_erros.
ENDIF.
ENDIF. " IF p_qua1 EQ 'X'
&---------------------------------------------------------------------
*& Form ZF_CARREGA_DADOS
&---------------------------------------------------------------------
* carrega tabela de registros
----------------------------------------------------------------------
FORM zf_carrega_dados .
SELECT *
FROM ztbc045
INTO TABLE t_ztbc045
WHERE bname IN so_user
AND datei IN so_date
AND land1 IN so_land1
AND acao IN so_acao.
SELECT * FROM ztbc045 INTO TABLE t_ztbc045 WHERE bname IN so_user AND datei IN so_date AND land1 IN so_land1 AND acao IN so_acao.
DESCRIBE TABLE t_ztbc045 LINES gs_qtde.
ENDFORM. " ZF_CARREGA_DADOS
Eu creio o preg_plit /(SELECT|select)\s(\)/ e ele sinaliza os SELECT que foram encontrados, porém eu quero pegar o comando inteireo desde o SELECT até o ponto (.) que é o final do comando select. Só que não manjo muito de ER. Se alguém tiver uma luz! :-)
Um grande abraço a todos e ótima semana.
Léo
Discussão (3)
Carregando comentários...