Usuário com melhor resposta
Substituir caracter

Pergunta
-
Pessoal Bom dia,
Tenho um arquivo TXT que possui diversos endereços de IP, mas todos estão misturados, vejam um exemplo:
123.35.1.267.142.30.1.528.132.30.9.183No exemplo acima eu tenho 3 endereços de IP (ficticios) sendo que o unico separador entre eles é o ponto, o correto são:
123.35.1.267,142.30.1.528,132.30.9.183Eu gostaria de saber se é possivel no powershell fazer algo que ele entenda que a cada 4 valores (que usariam o separador ponto) ele adicionará uma virgula.
Isso é possivel?
Agradeço
Jonathan Santos | http://jonathanrsantos.wordpress.com MCP | MCSA | MCSA Messaging | MCSE | MCITP Exchange 2010 | MCITP Lync Server
Respostas
-
Jonathan,
Acredito que PowerShell deva existir uma maneira mais fácil utilizando Expressões Regulares, mas eu tenho pouca experiência com expressões regulares.
Veja se este .VBS quebra seu galho:
Const ForReading = 1 Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("ips.txt", ForReading) Set objTextSaida = objFSO.CreateTextFile("ipsNovo.txt", ForAppending, TRUE) strConteudo = objTextFile.ReadAll PosicaoProcura=1 NumeroPonto=0 While not FinaldoTexto UltimoPontoLocalizado=instr(PosicaoProcura,strConteudo,".") if UltimoPontoLocalizado>0 then NumeroPonto=NumeroPonto+1 if NumeroPonto mod 4 = 0 then strConteudo=left(strConteudo,UltimoPontoLocalizado-1) & "," & _ mid(strConteudo,UltimoPontoLocalizado+1) end if else FinaldoTexto=True end if PosicaoProcura=UltimoPontoLocalizado+1 wend objTextSaida.WriteLine (strConteudo)
Ele lê o arquivo ips.txt e cria um novo ipsNovo.txt. Coloque seu arquivo na mesma pasta do .VBS.
Se vc quiser que fique um IP por linha, você pode ao invés de substituir o ponto por virgula substituir pela quebra de linha (VbCrLf), altere esta linha
strConteudo=left(strConteudo,UltimoPontoLocalizado-1) & VbCrLf & _ mid(strConteudo,UltimoPontoLocalizado+1)
Fábio de Paula Junior
- Marcado como Resposta Jonathan Santos sexta-feira, 26 de outubro de 2012 15:06
-
Jonathan,
Fiz esse em PowerShell
$Arquivo="ips.txt" $ArquivoNovo = "ips_Novo.txt" $ArrIP = (get-content($Arquivo)).split(".") $Resultado = @() for ($i = 0; $i -le $ArrIP.getupperbound(0); $i+=4) { $Resultado+=$ArrIP[$i]+"."+$ArrIP[$i+1]+"."+$ArrIP[$i+2]+"."+$ArrIP[$i+3] } [string]::join(",", $Resultado) > $ArquivoNovo
Se quiser quebrar por linha, altere a ultima linha do código:
[string]::join("`r`n", $Resultado) > $ArquivoNovo
Fábio de Paula Junior
- Marcado como Resposta Jonathan Santos sábado, 27 de outubro de 2012 18:42
Todas as Respostas
-
Jonathan,
Acredito que PowerShell deva existir uma maneira mais fácil utilizando Expressões Regulares, mas eu tenho pouca experiência com expressões regulares.
Veja se este .VBS quebra seu galho:
Const ForReading = 1 Const ForAppending = 8 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("ips.txt", ForReading) Set objTextSaida = objFSO.CreateTextFile("ipsNovo.txt", ForAppending, TRUE) strConteudo = objTextFile.ReadAll PosicaoProcura=1 NumeroPonto=0 While not FinaldoTexto UltimoPontoLocalizado=instr(PosicaoProcura,strConteudo,".") if UltimoPontoLocalizado>0 then NumeroPonto=NumeroPonto+1 if NumeroPonto mod 4 = 0 then strConteudo=left(strConteudo,UltimoPontoLocalizado-1) & "," & _ mid(strConteudo,UltimoPontoLocalizado+1) end if else FinaldoTexto=True end if PosicaoProcura=UltimoPontoLocalizado+1 wend objTextSaida.WriteLine (strConteudo)
Ele lê o arquivo ips.txt e cria um novo ipsNovo.txt. Coloque seu arquivo na mesma pasta do .VBS.
Se vc quiser que fique um IP por linha, você pode ao invés de substituir o ponto por virgula substituir pela quebra de linha (VbCrLf), altere esta linha
strConteudo=left(strConteudo,UltimoPontoLocalizado-1) & VbCrLf & _ mid(strConteudo,UltimoPontoLocalizado+1)
Fábio de Paula Junior
- Marcado como Resposta Jonathan Santos sexta-feira, 26 de outubro de 2012 15:06
-
Olá Fabio Muito Obrigado pela informação,
Na verdade a alteração desse arquivo segue uma sequancia de tarefas que estou executando em um Script PS1 por isso que fiquei na duvida se existe a opção de usar o Powershell, de qualquer forma eu posso salvar esse VBS e executar com o PS1.
Obrigado pela dica! Vou dar uma pesquisada em Expressões Regulares também!
Obrigado!
Jonathan Santos | http://jonathanrsantos.wordpress.com MCP | MCSA | MCSA Messaging | MCSE | MCITP Exchange 2010 | MCITP Lync Server
-
Jonathan,
Fiz esse em PowerShell
$Arquivo="ips.txt" $ArquivoNovo = "ips_Novo.txt" $ArrIP = (get-content($Arquivo)).split(".") $Resultado = @() for ($i = 0; $i -le $ArrIP.getupperbound(0); $i+=4) { $Resultado+=$ArrIP[$i]+"."+$ArrIP[$i+1]+"."+$ArrIP[$i+2]+"."+$ArrIP[$i+3] } [string]::join(",", $Resultado) > $ArquivoNovo
Se quiser quebrar por linha, altere a ultima linha do código:
[string]::join("`r`n", $Resultado) > $ArquivoNovo
Fábio de Paula Junior
- Marcado como Resposta Jonathan Santos sábado, 27 de outubro de 2012 18:42
-
Cara, Perfeito!
É exatamente o que eu preciso!Eu precisava adicionar virgula mesmo pois o meu código será usado para importar as informações de IP em um Receive Connector no Exchange.
Obrigado Fábio!
Jonathan Santos | http://jonathanrsantos.wordpress.com MCP | MCSA | MCSA Messaging | MCSE | MCITP Exchange 2010 | MCITP Lync Server