Página 1 de 1

Manusear strings dentro de um texto.

Enviado: 27 Mai 2020 14:03
por Itamar M. Lins Jr.
Ola!
Como eu faço para ler, cortar e adicionar em um texto, por exemplo:
<!DOCTYPE html>
<html>
<body>

<?prg
? "Primeiro PRG script!"
?>

<?prg ? "Segundo PRG script!" ?>

</body>
</html>
Tenho que ler e aguardar a parte até a tag "<?prg" depois pegar dentro desta tag o código e juntar com o resto.

O texto deve sai assim:
<!DOCTYPE html>
<html>
<body>
Primeiro PRG script!
Segundo PRG script!
</body>
</html>
Lembrando que pode ter n tags "<?prg xxx ?>".
Não se preocupar com a parte que vai remover "<?prg" e "?>"
Parece com a rotina que temos para extrai as tags do XML.

Saber quantas vezes essa tag aparece no texto... e cortando e colando.

Saudações,
Itamar M. Lins Jr.

Manusear strings dentro de um texto.

Enviado: 27 Mai 2020 19:49
por JoséQuintas
Seria mais prático se isso estivesse dentro do tal PRG.

Talvez.... ir pegando um bloco de cada vez.
Acho que mais ou menos isto:

Código: Selecionar todos

nStart := 1
DO WHILE .T.
   nStart := hb_At( "<?prg", cHtml, nStart )
   IF nStart == 0
      EXIT
   ENDIF
   nEnd := hb_At( "?>, cHtml, nStart )
   // sei lá o que vai fazer
  cHtml := Subst( cHtml, 1, nStart - 1 ) + ;
      "sei la o que vai fazer" + ;
     Substr( cHtml, nEnd )
   nStart := hb_At( "?>", cHtml, nStart ) + 2
ENDDO

Manusear strings dentro de um texto.

Enviado: 27 Mai 2020 21:06
por lwinter
Itamar, nao sei o que esta pretendendo fazer mas se for possivel fazer com JSON seria muito mais facil ate porque o harbour trabalha com o JSON de forma nativa importando e exportanto de hash table para json e vice versa.
no json, voce pode exportar qualquer coisa fazendo um encode base 64 e vice versa. muito mais facil de dar manutencao. e simples de programar. Mas nao sei se esse é o seu caso.
Só uma curiosidade o json vem substituindo devagarzinho o XML. Hoje temos o jsonc que deixa voce fazer comentarios no arquivo.

Manusear strings dentro de um texto.

Enviado: 27 Mai 2020 22:34
por Itamar M. Lins Jr.
Ola!
Parece que o pessoal já conseguiu fazer.
Vou ver depois como fizeram.
É para poder executar um condigo dentro de um arquivo .HTML igual PHP/Python faz... O harbour via hb_CompileFromBuff() no mod_harbour.
Esperando o commit para testar.

Saudações,
Itamar M. Lins Jr.

Manusear strings dentro de um texto.

Enviado: 27 Mai 2020 22:42
por Itamar M. Lins Jr.
Ola!
hb_TokenCount() retorna 3, mas só tem 2 "<?prg" no exemplo acima, não sei pq retorna 3.
index.html

Código: Selecionar todos

    <!DOCTYPE html>
    <html>
    <body>

    <?prg
    ? "Primeiro PRG script!"
    ?>

    <?prg ? "Segundo PRG script!" ?>

    </body>
    </html>

Código: Selecionar todos

Function Main
Local cHtml:=hb_memoread('index.html')
? cHtml
? hb_TokenCount(cHtml, "<?prg") //retorna 3 deveria ser 2!
Saudações,
Itamar M. Lins Jr.

Manusear strings dentro de um texto.

Enviado: 28 Mai 2020 07:14
por JoséQuintas
Itamar M. Lins Jr. escreveu:hb_TokenCount() retorna 3, mas só tem 2 "<?prg" no exemplo acima, não sei pq retorna 3.
Depende de como ele trata.
Apesar de só ter 2 blocos com <?prg, sobre 1 bloco sem isso.

Manusear strings dentro de um texto.

Enviado: 28 Mai 2020 08:18
por ANDRIL
Tenta

Código: Selecionar todos

Function Main
	Local cHtml:=hb_memoread('index.html')
	? cHtml
	? my_TokenCount(cHtml, "<?prg") //retorna 3 deveria ser 2!

Código: Selecionar todos

function my_TokenCount(texto,busca)
LOCAL ret:=0
do while .t.
	p=at(busca,texto)
	if (p>0)
		texto=substr(texto,p+len(busca))
		ret++
	else
	exit
	endif
enddo
return ret
Att.

Manusear strings dentro de um texto.

Enviado: 28 Mai 2020 08:28
por ANDRIL
As funções hb_TokenCount() e hb_aTokens() quando não encontram o que procuram retornam 1, deve ser um bug.

Código: Selecionar todos

Local cHtml:=hb_memoread('index.html')
        ? cHtml
        ? hb_TokenCount(cHtml, "<?prg")-1 //retorna 2
        cHtml:= ''
        ? hb_TokenCount(cHtml, "<?prg")   //retorna 1  
Ou seja, deveria retornar 0 por que cHtml passou a ser vazia.
Att.