Jump to content
Luigi

Pequenos scripts úteis

Recommended Posts

Substituição em lote

 

Apagar um arquivo recursivamente

 

Limpando a lixeira do Windows (testado no Windows Seven)

 

Algoritmo de Bresenham.

 

Algoritmo para plotar um circulo

 

JANELA SOBRE JANELA - GuiCreateEx

Quando você possui uma janela e por exemplo, precisa abrir uma janela acima da principal, com configurações, e quando apertar ESC, fechar esta que está como secundária acima da principal e retornar a visão/foco para a principal.

A função foi um pouco além, permitindo janela acima de janela, acima de janela, acima de janela... e assim por diante...

GuiCreateEx_Example.au3

 

 

CONSERTANDO SEUS ARQUIVOS MP3

Houve uma certa vez, que ocorreu um fato desconhecido e todos os meus arquivos MP3 ficaram "defeituosos".

Acredito que foi uma vírus que alterou alguma coisa no arquivo, e você ouvia a música, mas ela estava acelerada e com uns estalos esquisitos.

 

Enfim, quase deletei tudo, mas no final, acabei guardando...

 

Pesquisando aqui, ali, existe um executável que faz milagres, tira leite de pedra: o ffmpeg.exe

 

Esse cara faz tanta coisa, reduz vídeo, transforma vídeo em gif animado, converte ogg para mp3, faz mais coisas que bombril!

 

E resolvi testar nos meus arquivos MP3 defeituosos. Demorei até achar a configuração exata, mas achei, o script recursivo acima e recuperei todos os arquivos, segue o fonte:

 

Na verdade, ele monta um array dos arquivos da pasta "H:\__BACKUP\Mp3\" e replica em [/size]"D:\__BACKUP\Mp3\", mas você pode reconfigurar me qualquer outra pasta![/size]

;~ https://ffmpeg.zeranoe.com/builds/
#include <Array.au3>
#include <File.au3>

Global $sFolder = "H:\__BACKUP\Mp3\"
Global $aFiles = _FileListToArrayRec($sFolder, "*.mp3", 1, 1, 0, 2)
Global $sRet = "", $PID, $sNome, $sDrive, $sDir, $sFile, $sExt

For $ii = 1 To $aFiles[0]
	ConsoleWrite($ii & "/" & $aFiles[0] & " = " & $aFiles[$ii] & @LF)
	$sNome = "D" & StringTrimLeft($aFiles[$ii], 1)
	_PathSplit($sNome, $sDrive, $sDir, $sFile, $sExt)
	If Not FileExists($sDrive & $sDir) Then DirCreate($sDrive & $sDir)
	If Not FileExists($sNome) Then
		$PID = Run("ffmpeg.exe -i """ & $aFiles[$ii] & """  -q:a 0 -map a -f mp3  """ & $sNome & """", @ScriptDir, @SW_HIDE, 0x08)
	EndIf
;~ 	While True
;~ 		$sRet &= StdoutRead($PID)
;~ 		If @error Then ExitLoop
;~ 	WEnd
;~ 	ConsoleWrite($sRet & @LF)
Next
_ArrayDump

Crie um array 2D qualquer e depois rode veja o que acontece no _ArrayDump:

; Autor: Luigi
Func _ArrayDump($arr, $name = "")
	Local $iCol = UBound($arr, 2)
	Local $aCol[$iCol]
	Local $iLen
	Local $line_head = "+"
	For $ii = 0 To UBound($arr, 1) - 1
		For $jj = 0 To UBound($arr, 2) - 1
			$iLen = StringLen($arr[$ii][$jj])
			If $iLen > $aCol[$jj] Then $aCol[$jj] = $iLen
		Next
	Next
	Local $line = "+"
	For $ii = 0 To $iCol - 1
		$line &= _StringRepeat("-", $aCol[$ii]) & "+"
		$line_head &= _StringRepeat("-", $aCol[$ii] - StringLen(String($ii))) & $ii & "+"
	Next
	If $name Then ConsoleWrite("arr[ " & $name & " ] " & UBound($arr, 1) & "x" & UBound($arr, 2) & @LF)
	ConsoleWrite($line_head & @LF)
	For $ii = 0 To UBound($arr, 1) - 1
		ConsoleWrite($ii = 1 ? $line & @LF & "|" : "|")
		For $jj = 0 To UBound($arr, 2) - 1
			$iLen = StringLen($arr[$ii][$jj])
			ConsoleWrite(Conv($arr[$ii][$jj]) & _StringRepeat(" ", $aCol[$jj] - $iLen) & "|")
		Next
		ConsoleWrite(@LF)
	Next
	ConsoleWrite($line & @LF)
EndFunc   ;==>_ArrayDump

Func Conv($var)
	Local $Pattern[][2] = [["[áãâ]", "a"], ["[éê]", "e"], ["[íî]", "i"], ["[óõô]", "o"], ["[úû]", "u"], ["[ÁÃÂ]", "A"], ["[ÉÊ]", "E"], ["[ÍÎ]", "I"], ["[ÓÕÔ]", "O"], ["[ÚÛ]", "U"], ["[Ç]", "C"], ["[ç]", "c"]]
	For $ii = 0 To UBound($Pattern, 1) - 1
		$var = StringRegExpReplace($var, $Pattern[$ii][0], $Pattern[$ii][1])
	Next
	Return $var
EndFunc   ;==>Conv
GDIPlus

 

Como calcular o FPS (frames por segundo)?

Antes de calcular, vamos fazer algumas continhas matemáticas:

1 segundo possui 1.000 mili segundos.

Se você quer atingir 60 frames por segundo, então a conta é essa:

1000 / 60 = 16,6...

Isso significa que você tem que renderizar (ou redesenhar) os gráficos do seu GDI a cada 16,6 segundos, isso em teoria.

Pra quem tá lendo isso agora, significa que em 1 segundo (ou 1000 milisegundos), você terá que redesenhar a tela a cada 16,6 mili segundos para que ela seja redesenhada 60 vezes em 1 segundo.

Como fazer isso no AutoIt?

 

Primeiro, como medir o FPS?

Use este exemplo, o que é essencial está em azul.

Func AtualizarGDI()

Local Static $time = _Timer_Init()

Local Static $count = 0

_GDIPlus_GraphicsClear($hBackbuffer, 0xFFFFFFFF)

_GDIPlus_GraphicsDrawImageRect($hGraphic, $hBitmap, 0, 0, $FRAME[2], $FRAME[3])

If TimerDiff($time) >= 1000 Then

$time = _Timer_Init()

$count = 0

ConsoleWrite("fps[" & $count & "]" & @LF)

Else

$count += 1

EndIf

EndFunc ;==>Update

 

Para fazer os testes, faça um Ctrl+Alt+Del, abra o gerenciador de tarefas e veja o quanto seu script consome de CPU.

 

Se você construir um loop assim:

While 1

AtualizarGDI()

Wend

Não está errado, pois vai funcionar, mas ele termina de renderizar os gráficos, apaga tudo e renderiza de novo, sem folga!

Status: FPS = 405-440, CPU = 18%

 

Só que, no meu exemplo, há apenas um grafico GDIPlus de 200 x 200 sem mais nenhum outro elemento nele! Agora se for tela inteira, cheio de elementos... Haja processamento!

 

Quer otimizar?

Primeira dica:

Construa um loop assim:

While Sleep(16,6)

AtualizarGDI()

Wend

Status: FPS = 42, CPU = 1,8 - 2,4%

 

Ué? Fizemos as continhas e deveríamos obter 60 FPS, mas só temos 42!

Minha opinião sobre que é o culpado: Sleep()

Ele não é muito preciso.

Vamos diminuir o valor dele? Vamos colocar 10ms

While Sleep(10)

AtualizarGDI()

Wend

Status: FPS = 77, CPU = 3,4%

Melhorou né?

 

E o que acontece se colocarmos Sleep(5), deve aumentar mais o FPS né? Vamos testar!

While Sleep(5)

AtualizarGDI()

Wend

Status: FPS = 77, CPU = 3,6%

Aff, não alterou nada, mas por que?

Simples, o Sleep() arredonda todo o valor menor do que 10, para 10!

 

Será que é possível manter 60 FPS diminuindo o consumo de CPU?

A resposta é SIM!

Ao invés de pendurar o AtualizarGDI() no While...Wend, pendure ele no AdLibRegister

AdLibRegister("AtualizarGDI", 16.6)

While Sleep(1000)

Wend

Status: FPS = 42, CPU = 0,8 - 1,8%

 

Ah, mas o FPS não está em 60? Ok, vamos fazer um teste?

AdLibRegister("AtualizarGDI", 13)

While Sleep(1000)

Wend

Status: FPS = 60 - 72, CPU = 2,0 - 2,6%

 

Pessoalmente, eu prefiro usar o AdLibRegister, ainda estou formulando a ideia para escrever um novo texto.

Mas fica a dica.

Edited by Luigi
  • Like 2

Share this post


Link to post
Share on other sites

Achei de grande utilidade o 1º e o 3º inclusive vou modificar o primeiro para substituir outros nomes nos meus includes, obrigado por compartilhar conosco!

Share this post


Link to post
Share on other sites

A primeira eu resoveria com o Notepad++, mas vai ser bem útil para múltiplas substituições de comandos, é uma ótima ideia para quem mantem o autoit atualizado, aí seria só ficar de olho no changelog e acrescentar ao scripts as novas substituições.

 

As outras duas achei legais, gostei dos 3 scripts.

Edited by Sergio-F

Share this post


Link to post
Share on other sites

O primeiro código atualizou vários scritps meus e isso foi uma verdadeira "mão na roda"!!! :600866:

 

5 *

 

JS

Share this post


Link to post
Share on other sites

04. Force_NumberString

O AutoIt não é uma linguagem com variáveis fortemente tipadas, com C, C++, Java.
Quero dizer, quando você define uma variável $var ela pode receber qualquer coisa:

a) inteiros: 1, 2, 20, 222, 4345

b ) zero: 0

c) boleanos: True, False

d) decimais: 1.01, 2.03, 3.04

e) string: "Está frio", "inverno"

f) array: [1,2,3], ["um", 2, "3"]

O tipo de dado que você pensar em armazenar em uma variável, será armazenado, e o AutoIt não vai chiar por causa disso.

Mas as vezes, pode ser interessante forçar a tipagem da variável para não estourar as próximas linhas de código.

Não é sempre que isso acontece.

Em meus códigos (raríssimas vezes) eu fui obrigado a tipar a variável.
Como assim "tipar" a variável?
Forçar a variável para ela virar um número na marra, ou uma string.

Quando vou usar isso?
Um dos exemplos que eu uso, é quando salvo alguma configuração em arquivo INI.

 

Neste exemplo, eu crio uma variável $var, e atribuo o valor 0.1.

Então eu gravo o conteúdo em arquivo INI e recupero novamente.

Mesmo assim, ela é tipada como string, e não como float.

Local $ini = @ScriptDir & "\teste.ini"
Local $var = IniRead($ini, "config", "teste", 0.1)
ConsoleWrite("$var[ " & $var & " ]" & @LF)

IniWrite($ini, "config", "teste", $var)

$var = IniRead($ini, "config", "teste", 0)

ConsoleWrite("VarGetType[ " & VarGetType($var) & " ]" & @LF)

Existe uma maneira realmente muito simples de forçar a tipagem entre número e string, sem perder informação:

Uma comparação com sinais de iguais dobrados (==), então é comparado o valor, e o tipo da variável *:

Number($var) == String($var)

Se essa comparação for verdadeira, é um integer ou float.

Se for falsa, é uma string.

* A comparação utilizando apenas um sinal de =, compara somente o valor das variáveis:

Number($var) = String($var)

Local $aType[] = [0, 0.1, "0.1", "zero", "1", -1]
Local $var

For $ii = 0 To UBound($aType, 1) - 1
	$var = Force_NumberString($aType[$ii])
	ConsoleWrite("$var[" & $aType[$ii] & "] VarType[" & VarGetType($var) & "] Ret[" & $var & "]" & @LF)
Next

Func Force_NumberString($mInput = "")
	Local $iNumber = Number($mInput)
	Local $sInput = String($mInput)
	If $iNumber == $sInput Then Return $iNumber
	Return $sInput
EndFunc   ;==>Force_NumberString

Executando o script acima, você vai perceber que a função Force_NumberString transforma a string "0.1" em um float 0.1.

 

Pra finalizar, como disse anteriormente, raramente você vai precisar se preocupar se a sua variável é integer ou string.

Mas "SE" isso acontecer, talvez isso resolva seu problema.

OBS: isso funciona com arrays e outras coisas?
Resposta: O fundamento da função
Force_NumberString é trabalhar somente com números ou strings. Qualquer coisa diferente disso, talvez seja necessário uma itereção pra percorrer o array.

Edited by Luigi
  • Like 1

Share this post


Link to post
Share on other sites

05. Verificar se uma determinada fonte (.ttf ou .fon) existe no WIndows.

OBS: não é de minha autoria.

; source: https://www.autoitscript.com/forum/topic/141130-how-to-know-if-a-font-exists/
; AutoIt version: 3.3.12.0
#include <Array.au3>
#include <File.au3>
#include <WinAPIGdi.au3>

MsgBox(0, "", Font_Exists("Times New Roman"))

Func Font_Exists($FontName)
	; source: https://www.autoitscript.com/forum/topic/141130-how-to-know-if-a-font-exists/
	Local Static $aFont
	If Not IsArray($aFont) Then $aFont = _FileListToArray(@WindowsDir & "\Fonts", "*.*", 1)

	Local $iSearch = -1
	Local $aFontList[UBound($aFont) - 1]
	For $ii = 1 To $aFont[0]
		$aFontList[$ii - 1] = _WinAPI_GetFontResourceInfo($aFont[$ii], 1)
	Next

	$iSearch = _ArraySearch($aFontList, $FontName, 0, Default, 0, 1)
	If @error Or ($iSearch = -1) Then Return SetError(1, 0, 0)
	Return 1
EndFunc   ;==>Font_Exists
Edited by Luigi
  • Like 1

Share this post


Link to post
Share on other sites

Para quem está afim de criar mensagens coloridas em seu programa de linha de comando, aqui vai um exemplo:

Compile e use no cmd do windows:

Exemplo:

ColorirConsole.exe 12 "Frase"

Vai mostrar a "Frase" em vermelho.

 

ColorirConsole.exe Tudo "Frase"

Vai mostra a palavra "Frase" com todas as cores.

 

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Outfile=ColorirConsole.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "Console.au3" ; Funções para o console

; Comando: ColorirConsole.exe [numero da cor] {"Frase"}
; Parâmetro 1 --> [número da cor] = 0 a 255 (Tudo = toda as cores)
; Parâmetro 2 --> {Frase} = Uma string

Global $hHandleCMD = _Console_GetStdHandle("STD_OUTPUT_HANDLE") ; Obtém o handle do console

If $CmdLine[0] < 2 Then
    _Ajuda()
Else
    If $CmdLine[1] = "Tudo" Then
        For $i = 0 To 255
            _Console_SetTextAttribute($hHandleCMD, $i) ; Cor
            _Console_Write($CmdLine[2])
            _Console_SetTextAttribute($hHandleCMD, 7) ; Cinza Padrão
            _Console_Write(" > " & StringFormat("%-3s", $i) & " ")
            _Console_SetTextAttribute($hHandleCMD, 7) ; Cinza Padrão
            If Mod($i+1, 4) = 0 Then _Console_Write(@LF)
        Next
    Else
        _Console_SetTextAttribute($hHandleCMD, $CmdLine[1]) ; Cor
        _Console_Write($CmdLine[2] & @LF)
        _Console_SetTextAttribute($hHandleCMD, 7) ; Cinza Padrão
        _Console_Write("Você usou a cor número " & $CmdLine[1] & @LF)
    EndIf
    Exit
EndIf

Func _Ajuda()
    _Console_SetTextAttribute($hHandleCMD, 12) ; Vermelho
    _Console_Write('Erro: Número errado de parâmetros.' & @LF & @LF)
    _Console_SetTextAttribute($hHandleCMD, 7) ; Cinza Padrão
    _Console_Write('Sintaxe: ')
    _Console_SetTextAttribute($hHandleCMD, 10) ; Verde
    _Console_Write('ColorirConsole.exe ')
    _Console_SetTextAttribute($hHandleCMD, 11) ; Azul claro
    _Console_Write('[numero da cor] ', True)
    _Console_SetTextAttribute($hHandleCMD, 14) ; Amarelo
    _Console_Write('{"Frase"}' & @LF & @LF)
    _Console_SetTextAttribute($hHandleCMD, 7) ; Cinza Padrão
    Exit
EndFunc   ;==>_Ajuda

Requer o Console.au3, não consigo postar por ser grande, então upei.

https://onedrive.live.com/redir?resid=B79937D56120E8CF!66755&authkey=!AG1etUa22gUuSUs&ithint=file%2cau3

Edited by Sergio-F
  • Like 1

Share this post


Link to post
Share on other sites

Minha contribuição, uma pequena variação de _ArrayAdd2D, mas para qualquer quantidade de itens...

Func _ArrayAdd2d(ByRef $arr, $mOpt0 = Default, $mOpt1 = Default, $mOpt2 = Default, $mOpt3 = Default)
	$arr[0][0] = UBound($arr, 1)
	Local $iCol = UBound($arr, 2)
	ReDim $arr[$arr[0][0] + 1][$iCol]
	If @NumParams - 1 < $iCol Then $iCol = @NumParams - 1

	For $ii = 0 To $iCol - 1
		$arr[$arr[0][0]][$ii] = Eval("mOpt" & $ii)
	Next
EndFunc   ;==>_ArrayAdd2d​

Logicamente, se faltar parâmetros, basta adicionar mais:

 

$mOpt4 = Default, $mOpt5 = Default, $mOpt6 = Default, $mOpt7 = Default, $mOpt8 = Default) ; e assim por diante

Share this post


Link to post
Share on other sites

@AutoItCoder

 

Excelente.

 

Muito parecida com a minha, mas não conhecia o @NumParams! Já ajustei :lol:

 

Sempre aprendendo! Show de bola!

Share this post


Link to post
Share on other sites

Essa dica, diretamente não tem nada a ver com AutoIt...

 

Quem faz scripts com AutoIt há algum tempo, deve ter aquela pastinha...

 

Sim, aquela pasta onde você guarda todos os scripts que você acha interessante, aqueles exemplos que você já fez, e vai guardando... guardando... guardando...

 

Até que chega uma hora que você não acha mais nada, de tanta coisa que tem.

 

E chega um ponto que não adianta mais procurar pelo nome do arquivo.

 

Você sabe que em algum dos bilhões de scripts que você tem, há um script com uma determinada função ou nome de variável lá dentro...

 

"FRIO NA ESPINHA"

 

Então você lembra da busca do Windows...

 

Só que a busca do Windows é tão lenta quanto falta opção e não ajuda nada!

 

Seus problemas acabaram, uma solução das empresas Tabajara vai ajudar você! (kkkk)

 

Super Finder XT

 

Esse é um programa que eu uso há muitos anos, e a principal vantagem dele é:

Você pode pedir para ele vasculhar todos os arquivos *.au3 que contenham a palavra "TCPStartup" por exemplo, entre 10/08/2016 e 15/08/2016!

 

Fica a dica! ^^

Edited by Luigi
  • Like 1

Share this post


Link to post
Share on other sites

Esse é um programa que eu uso há muitos anos, e a principal vantagem dele é:

Você pode pedir para ele vasculhar todos os arquivos *.au3 que contenham a palavra "TCPStartup" por exemplo, entre 10/08/2016 e 15/08/2016!

 

Mas a função Find in Files não é a mesma coisa? Vc indica a pasta e ela procura arquivos .au3 na pasta e em subpastas a palavra que vc deseja!

Share this post


Link to post
Share on other sites

Show de bola Luigi!

 

Pessoalmente uso no meu micro, algumas ferramentas que selecionei ao longo do tempo...

 

Mas a combinação é que torna boa a brincadeira... Tudo free!

 

Everything - pesquisa de arquivos e pastas super-rápida (mas super mesmo) em toda a máquina. Uso uma HotKey para chamar o programa e usar.

 

Listary - para procurar no Explorer e File Boxes (útil com vários arquivos na mesma pasta). A parte legal é que integra sozinho no Explorer e outros gerenciadores de arquivos. Para usar é só abrir um janela de arquivos e começar a digitar!

 

Alternativa ao Everything, mas procura DENTRO dos arquivos:

FileSearchy - muito parecido com Everything mas com a opção de procura DENTRO dos arquivos

 

Meu preferido, pois além de procurar tem a opção de alterar os arquivos (estilo GREP / estilo Localizar e Substituir em vários arquivos)

Advanced Find and Replace - infelizmente esse é pago US$ 30

 

Para comparar 2 (dois) arquivos - excelente para achar as mudanças em fontes

WinMerge - Mostra lado a lado as linhas modificadas com opção de mostrar a(s) próxima(s) diferença(s)

 

Putz! Quase esqueci do:

Ditto - gerenciador de clipboard. Sempre achei frescura esse negócio de "programa para gerenciar melhor o Clipboard", leia-se CTRL C e CTRL V, afinal era só copiar de novo o que vc queria e pronto. Mas depois que comecei a usar, me acostumei de tal jeito que não largo mais. Configurei para CTRL-SHIFT-V e é muito legal. Como está integrado ao Windows, use normalmente com CTRL C e CTRL V, mas se precisar de algum clipboard mais antigo, hotkey que abre a janela e vc pode escolher qual clipboard vc quer.

Edited by Manimal

Share this post


Link to post
Share on other sites

uso avançado do _ArrayAdd()

 

Cenário: você possui uma string "um;dois;tres" e deseja dividir essa string a cada ";" e inserir cada elemento em um array;

Forma convencional:

Global $var = "um;dois;tres"
Global $arr = StringSplit($var, ";", $STR_NOCOUNT)
_ArrayDisplay($arr)

Forma avançada:

Global $var1 = "um;dois;tres"
Global $arr1[1]
_ArrayAdd($arr1, $var1, Default, ";")
_ArrayDisplay($arr1)

Mas e se for com um Array[m][n]?

Cenário: você possui uma string "key1=value1;key2=value2;key3=value3", a cada ";" é um alinha, e o "=" separa a chave do valor
Forma convencional:

Global $aStr = StringSplit($var2, ";", $STR_NOCOUNT)
Global $arr[UBound($aStr, 1)][2]
For $ii = 0 To UBound($aStr, 1) - 1
	$aTemp = StringSplit($aStr[$ii], "=", $STR_NOCOUNT)
	For $jj = 0 To UBound($aTemp, 1) - 1
		$arr[$ii][$jj] = $aTemp[$jj]
	Next
Next
_ArrayDisplay($arr)

Forma avançada:

Global $var2 = "key1=value1;key2=value2;key3=value3"
Global $arr2[1][2]
_ArrayAdd($arr2, $var2, Default, "=", ";")
_ArrayDisplay($arr2)

Logicamente, a iteração dos arrays entre a forma convencional e avançada é diferente:

Da forma normal você programa:

For $ii = 0 To Ubound($arr, 1) -1
Next

E na forma avançada você programa:

For $ii = 1 To Ubound($arr, 1) -1
Next

Essa é a única diferença, fora a economia de código.

  • Like 1

Share this post


Link to post
Share on other sites

Depois que você baixa um vídeo do YouTube, e você quer converter para MP3:

 

Características:

  • utiliza bitrate de 320k
  • normaliza o volume para 6dB

 

Testado e funciona com:

  • MP4
  • WEBM

 

Pronto, você mesmo baixa e converte as suas MP3 com qualidade!

 

volume 10dB ficou ruim, tentei 6dB e ficou melhor.

 

 

Segue exemplo:

#include-once
#include <Array.au3>
#include <Process.au3>
#include <File.au3>

Local $arr = _FileListToArray(@ScriptDir, "*.mp4,*.webm", 0, True)
Local $sDrive = "", $sDir = "", $sFileName = "", $sExtension = ""

For $ii = 1 To $arr[0]
	_PathSplit($arr[$ii], $sDrive, $sDir, $sFileName, $sExtension)

	RunWait(@ComSpec & " /c ffmpeg -i """ & $sFileName & $sExtension & """ -af ""volume=6dB"" -b:a 320k -vn  music" & StringFormat("%04s", $ii) & ".mp3")
	ConsoleWrite( $sFileName & $sExtension & @LF)
Next

OBS: tem que baixar o ffmpeg.exe

Edited by Luigi
  • Like 2

Share this post


Link to post
Share on other sites

Crie um array 2D qualquer e veja seu conteúdo com _ArrayDump( $array )

; Autor: Luigi
Func _ArrayDump($arr, $name = "")
	Local $iCol = UBound($arr, 2)
	Local $aCol[$iCol]
	Local $iLen
	Local $line_head = "+"
	For $ii = 0 To UBound($arr, 1) - 1
		For $jj = 0 To UBound($arr, 2) - 1
			$iLen = StringLen($arr[$ii][$jj])
			If $iLen > $aCol[$jj] Then $aCol[$jj] = $iLen
		Next
	Next
	Local $line = "+"
	For $ii = 0 To $iCol - 1
		$line &= _StringRepeat("-", $aCol[$ii]) & "+"
		$line_head &= _StringRepeat("-", $aCol[$ii] - StringLen(String($ii))) & $ii & "+"
	Next
	If $name Then ConsoleWrite("arr[ " & $name & " ] " & UBound($arr, 1) & "x" & UBound($arr, 2) & @LF)
	ConsoleWrite($line_head & @LF)
	For $ii = 0 To UBound($arr, 1) - 1
		ConsoleWrite($ii = 1 ? $line & @LF & "|" : "|")
		For $jj = 0 To UBound($arr, 2) - 1
			$iLen = StringLen($arr[$ii][$jj])
			ConsoleWrite(Conv($arr[$ii][$jj]) & _StringRepeat(" ", $aCol[$jj] - $iLen) & "|")
		Next
		ConsoleWrite(@LF)
	Next
	ConsoleWrite($line & @LF)
EndFunc   ;==>_ArrayDump

Func Conv($var)
	Local $Pattern[][2] = [["[áãâ]", "a"], ["[éê]", "e"], ["[íî]", "i"], ["[óõô]", "o"], ["[úû]", "u"], ["[ÁÃÂ]", "A"], ["[ÉÊ]", "E"], ["[ÍÎ]", "I"], ["[ÓÕÔ]", "O"], ["[ÚÛ]", "U"], ["[Ç]", "C"], ["[ç]", "c"]]
	For $ii = 0 To UBound($Pattern, 1) - 1
		$var = StringRegExpReplace($var, $Pattern[$ii][0], $Pattern[$ii][1])
	Next
	Return $var
EndFunc   ;==>Conv
Edited by Luigi

Share this post


Link to post
Share on other sites

Show de bola Luigi.

 

Melhor que o _ArrayDisplay()?

Eu não sei dizer se é melhor/pior, mas atendia uma necessidade que eu tinha, de ver um conteúdo do Array de forma dinâmica, sem toda hora ter que ficar clicando no OK para fechar a janela de exibição do array.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×