Código: def var ruta as char format "x(30)" init ".". def var ficheros-a-buscar as char format "x(20)" init "*.p". def var fichero-de-salida as char format "x(30)" init "Resultado". def var lineas as char format "x(30)". def var comando-busqueda as char format "x(60)". def var fichero as char format "x(14)". DEF VAR Cadena AS CHAR FORMAT "X(100)". define stream lista. define stream FICHEROS. define stream salida. DEF VAR Cadena-a-Buscar AS CHAR FORMAT "X(50)". DEF VAR Cadena-a-Sustituir AS CHAR FORMAT "X(50)". DEF VAR NUM-FIC AS INT. DEF VAR NUM-LIN AS INT. DEF VAR VECES AS INT. SESSION:DATA-ENTRY-RETURN=TRUE. UPDATE Ruta Ficheros-a-Buscar Cadena-a-Buscar fichero-de-salida with side-labels. comando-busqueda = "dir " + ruta + "\" + ficheros-a-buscar + "/B >" + "Programa". OS-COMMAND silent VALUE(comando-busqueda). OUTPUT STREAM Salida TO value(fichero-de-salida). PUT STREAM Salida "Cadena a Buscar = " Cadena-a-Buscar SKIP(2). PUT STREAM Salida "Fichero" FORMAT "X(31)" "N. VECES" FORMAT "X(9)" "SUMA LINEAS" FORMAT "X(12)" "LINEAS ENCONTRADAS" skip. PUT STREAM Salida fill("-",30) FORMAT "X(30)" SPACE(1) fill("-",30) FORMAT "X(30)" SPACE(1) fill("-",11) FORMAT "X(11)" SPACE(1) fill("-",30) FORMAT "X(31)" skip. /* PUT STREAM Salida fill("=",30) FORMAT "X(30)" SPACE(1) fill("=",30) FORMAT "X(30)" SPACE(1) fill("=",11) FORMAT "X(11)" SPACE(1) fill("=",30) FORMAT "X(31)" skip. */ INPUT STREAM LISTA FROM PROGRAMA. REPEAT: IMPORT STREAM LISTA UNFORMATTED fichero. IF SEARCH(Fichero) = ? THEN NEXT. NUM-LIN = 0. veces = 0. Lineas = "". NUM-FIC = NUM-FIC + 1. INPUT STREAM FICHEROS FROM VALUE(FICHERO). DISPLAY "Buscando en el fichero " fichero WITH FRAME PP NO-LABELS. pause 0. REPEAT: IMPORT STREAM FICHEROS UNFORMATTED CADENA. NUM-LIN = NUM-LIN + 1. IF INDEX(CADENA, Cadena-a-Buscar) > 0 THEN DO: veces = veces + 1. IF Lineas = "" THEN Lineas = STRING(NUM-LIN, ">,>>9"). ELSE Lineas = Lineas + " - " + STRING(NUM-LIN, ">,>>9"). END. END. IF Veces > 0 THEN PUT STREAM Salida fichero format "x(31)" STRING(veces, ">>>,>>9") FORMAT "X(9)" STRING(NUM-LIN, ">>>,>>9") FORMAT "X(12)" Lineas FORMAT "X(30)" SKIP. INPUT STREAM FICHEROS CLOSE. END. INPUT STREAM LISTA CLOSE. OUTPUT CLOSE. return.
fdantas, Estou com o seguinte problema: Tenho um SmartWindow para buscar string, onde defino a Rota de Busca, tipos de Arquivos, string que desejo buscar. E esta então busca os aquivos. No entanto qdo digito na string de busca uma palavra com espaço (Ex: Contas a Pagar), ele busca apenas pelo "Contas" não considera o "a Pagar", se procurar por "contas-a-pagar" ai considera. Pode me ajudar com isso?? Segue o Código: Botão "Pesquisar": --------------------- FOR EACH dir-1: DELETE dir-1. END. CLOSE QUERY BROWSE-2. RUN pro-diretorio. DEF VAR nu-xlinha AS INT. DEF VAR nu-xocorr AS INT. DEF VAR vc-xlinhas AS CHAR. DEF VAR no-xdiretorio AS CHAR. DEF VAR destino AS CHAR. FOR EACH tt-lista: DELETE tt-lista. END. FOR EACH dir-1 WHERE dir-1.vc-dir-1 <> '': ASSIGN no-xdiretorio = dir-1.vc-dir-1 nu-xlinha = 0 nu-xlinha = 0 nu-xocorr = 0 vc-xlinhas = "". nu-xregistro = nu-xregistro + 1. INPUT STREAM arquivos FROM VALUE(no-xdiretorio). vc-xmessage = "Buscando diretório " + no-xdiretorio. DISPLAY vc-xmessage WITH FRAME {&FRAME-NAME}. REPEAT: IMPORT STREAM arquivos UNFORMATTED CADENA. nu-xlinha = nu-xlinha + 1. IF INDEX(CADENA, vc-xstring) > 0 THEN DO: nu-xocorr = nu-xocorr + 1. IF vc-xlinhas = "" THEN vc-xlinhas = STRING(nu-xlinha, ">,>>9"). ELSE vc-xlinhas = vc-xlinhas + " - " + STRING(nu-xlinha, ">,>>9"). END. END. IF nu-xocorr > 0 THEN DO: CREATE tt-lista. tt-lista.no-arquivo = no-xdiretorio. tt-lista.nu-ocorr = nu-xocorr. tt-lista.nu-linha = nu-xlinha. tt-lista.vc-linhas = vc-xlinhas. {&OPEN-QUERY-{&BROWSE-NAME}} END. INPUT STREAM arquivos CLOSE. END. vc-xmessage = "Fim da Busca". DISPLAY vc-xmessage WITH FRAME {&FRAME-NAME}. END. END. Procedure Pro-diretorio ---------------------------- proc-1 = SESSION:TEMP-DIRECTORY + "proc-1". ASSIGN vc-xcomandobusca = "dir " + vc-xrota + "\" + vc-xtp-arquivo + " /b /s > " + proc-1. OS-COMMAND SILENT VALUE(vc-xcomandobusca). INPUT FROM proc-1. REPEAT: CREATE dir-1. IMPORT dir-1. END. INPUT CLOSE. END PROCEDURE. Variaveis --------------- DEFINE VAR vi-xtampag AS INT . DEFINE VAR vc-xempresa AS CHAR. DEFINE VAR vc-xsistema AS CHAR. DEFINE VAR vc-xcontrato AS CHAR. DEFINE VAR vc-xperiodo AS CHAR. DEFINE VAR vc-xdata AS CHAR. DEFINE VAR vc-xlocal AS CHAR. DEFINE VAR vc-xtexto AS CHAR. DEFINE VAR vc-xsaida AS CHAR. DEFINE VAR vc-xcomando AS CHAR. DEFINE VAR vc-xpedida AS CHAR. DEFINE VAR proc-1 AS CHAR. DEFINE VAR proc-2 AS CHAR. DEFINE TEMP-TABLE dir-1 FIELD vc-dir-1 AS CHAR. /* SESSIONATA-ENTRY-RETURN=TRUE. DEF VAR estado AS LOG. DEF VAR Fila AS ROWID. ON 'F10':U GO. */ DEFINE WORKFILE tt-lista FIELD no-arquivo AS CHAR FIELD nu-ocorr AS INT FIELD nu-linha AS INT FIELD vc-linhas AS CHAR. DEF VAR NL AS INT. DEF VAR vc-xcomandobusca as char format "x(60)". DEF VAR no-arquivo AS CHAR. DEF VAR Cadena AS CHAR. DEF VAR nu-xregistro AS INT. DEFINE STREAM arquivos. DEFINE STREAM LISTA.
os-command usa comandos, como do DOS, então no caso de espaços, ele apresenta erros. Indico usar o programa que o fdantas colocou ou arrume uma forma da string de busca ficar entre aspas, por exemplo: assign busca = "~"contas a pagar~"".