none
Editar TXT RRS feed

  • Pergunta

  • Boa Tarde 

    Gostaria de editar o arquivo TXT abaixo por um arquivo .bat e salva - lo txt reeditado

    casa A40,5X50,3A30,2X50,3

    o mesmo teria que ficar assim

    Numeros

    40.5,50.3

    30.2,50.3

    close

    O X foi substituído por  ,  e  A virgula por . e o A  muda a linha .


    • Editado Binho666 quarta-feira, 14 de agosto de 2013 19:12 faltou 2 pontos
    quarta-feira, 14 de agosto de 2013 18:26

Respostas

  • sim,

    você pode usar a mesma logica do replace, e ao final acrescentar o writeline = "Close"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "teste.txt"
    vArquivoFInal = "Resultado.txt"
    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    Do Until objFile.AtEndOfStream
        strLerarquivo = objFile.Readall
    	StrUm = (Replace(strLerarquivo ,",",".")) 
    	Strdois= (Replace(StrUm,"X",",")) 
    	Strfinal = (Replace(Strdois,"A",vbNewLine))
    	Strtopo = (Replace(Strfinal,"casa","Numero"))     
    Loop
    if not objFSO.FileExists(vArquivoFInal)  then
    	Set objFile = objFSO.CreateTextFile(vArquivoFInal)
    else
    	Set objFile = objFSO.OpenTextFile(vArquivoFInal,8)
    end if
    	objFile.write Strtopo
    	objFile.writeline "Close" 
    	objFile.close


    att, Aparecido Deveza

    • Marcado como Resposta Binho666 quinta-feira, 15 de agosto de 2013 02:59
    quinta-feira, 15 de agosto de 2013 02:44

Todas as Respostas

  • Binho, como vai?

    Creio que não conseguirá fazer isso via batch ou vbs. Sugiro utilizar uma ferramenta para edição de TXT.

    Eu, particularmente, para desenvolver scripts utilizo o "notepad ++". Com ele você grava macros (sequencia de comandos) e os repete quantas vezes quiser. Te ajudaria, com toda certeza.

    Faça um busca no bing sobre "notepad ++ macro" e terá sua resposta.

    Abraço

    quarta-feira, 14 de agosto de 2013 23:30
  • Boa Noite Binho,

    tente o cod abaixo em vbs, na bat não conseguir fazer com que pulasse de linha, mas em vbs segue uma alternativa.

    Utilizei o Replace onde após ler o arquivo ..

    StrUm = Ler o arquivo e troca o '," por "." ;

    StrDois = Faz o mesmo alterado o "X" por ",";

    StrFinal = Troca o "A" pelo "VbNewLine" que faz com que haja a quebra de linha...

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "teste.txt" 'Arquivo Original
    vArquivoFInal = "Resultado.txt" 'Resultado final
    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    Do Until objFile.AtEndOfStream
        strLerarquivo = objFile.Readall
    	StrUm = (Replace(strLerarquivo ,",",".")) 
    	Strdois= (Replace(StrUm,"X",",")) 
    	Strfinal = (Replace(Strdois,"A",vbNewLine))
    Loop
    if not objFSO.FileExists(vArquivoFInal)  then
    	Set objFile = objFSO.CreateTextFile(vArquivoFInal)
    else
    	Set objFile = objFSO.OpenTextFile(vArquivoFInal,8)
    end if
    	objFile.write Strfinal
    	objFile.close

    Salve com a extensão vbs (ex. File.vbs)

    Esse é o cod em Bat, no entanto, não conseguir fazer pular a linha, mas pode ser que alguém no fórum possa melhora-lo...

    @echo off
    setlocal DisableDelayedExpansion
    set INTEXTFILE=teste.txt
    set OUTTEXTFILE=test_out.txt
    set SEARCHTEXT=,
    set REPLACETEXT=.
    set OUTPUTLINE=
    for /f "tokens=1,* delims=¶" %%A in ( '"type %INTEXTFILE%"') do (
        SET string=%%A
        setlocal EnableDelayedExpansion
        SET alterar=!string:%SEARCHTEXT%=%REPLACETEXT%!
        >> %OUTTEXTFILE% echo(!alterar!
        endlocal
    )
    setlocal DisableDelayedExpansion
    set INTEXTFILE=test_out.txt
    set OUTTEXTFILE=Resultado.txt
    set SEARCHTEXT=X
    set REPLACETEXT=,
    set OUTPUTLINE=
    for /f "tokens=1,* delims=¶" %%A in ( '"type %INTEXTFILE%"') do (
        SET string=%%A
        setlocal EnableDelayedExpansion
        SET alterar=!string:%SEARCHTEXT%=%REPLACETEXT%!
        >> %OUTTEXTFILE% echo(!alterar!
        endlocal
    )
    del %INTEXTFILE%


    att, Aparecido Deveza


    quinta-feira, 15 de agosto de 2013 02:08
  • Esta perfeito, era realmente a primeira opção que eu precisava muito obrigado
    quinta-feira, 15 de agosto de 2013 02:24
  • No primeiro comando em VBS é possivel 

    Numeros

    40.5,50.3

    30.2,50.3

    close

    fazer a palavra casa ser substituida pelo Numeros 

    e no final aparecer CLOSE

    quinta-feira, 15 de agosto de 2013 02:32
  • sim,

    você pode usar a mesma logica do replace, e ao final acrescentar o writeline = "Close"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "teste.txt"
    vArquivoFInal = "Resultado.txt"
    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    Do Until objFile.AtEndOfStream
        strLerarquivo = objFile.Readall
    	StrUm = (Replace(strLerarquivo ,",",".")) 
    	Strdois= (Replace(StrUm,"X",",")) 
    	Strfinal = (Replace(Strdois,"A",vbNewLine))
    	Strtopo = (Replace(Strfinal,"casa","Numero"))     
    Loop
    if not objFSO.FileExists(vArquivoFInal)  then
    	Set objFile = objFSO.CreateTextFile(vArquivoFInal)
    else
    	Set objFile = objFSO.OpenTextFile(vArquivoFInal,8)
    end if
    	objFile.write Strtopo
    	objFile.writeline "Close" 
    	objFile.close


    att, Aparecido Deveza

    • Marcado como Resposta Binho666 quinta-feira, 15 de agosto de 2013 02:59
    quinta-feira, 15 de agosto de 2013 02:44
  • correto com o comando que vc me enviou o resultado sai assim

    30.2,50.3close

    como colocar o close na linha abaixo  conforme exemplo abaixo 

    30.2,50.3

    close

    Muito grato por tudo.

    quinta-feira, 15 de agosto de 2013 02:53
  • Não precisa , segui a logica consegui muito obrigado

    quinta-feira, 15 de agosto de 2013 02:57
  • blz =D

    att, Aparecido Deveza

    quinta-feira, 15 de agosto de 2013 03:33
  • Aparecido, tenho ainda uma duvida espero que possa me ajudar

    digamos que da inicial a palavra Casa seja porta hotel ou outra coisa qualquer (então digamos eu gostaria

    de apagar todos os dados antes do primeiro A) e substituir pela palavra Numero (seria possível)

    casa A40,5X50,3A30,2X50,3

    Desde já muito grato por tudo


    • Editado Binho666 quinta-feira, 15 de agosto de 2013 06:34
    quinta-feira, 15 de agosto de 2013 06:33
  • Boa noite Binho,

    bom usei um split separando  a "Frase" no primeiro espaço, ou seja ele verifica onde tem espaço (teste A40,5X50,3A30,2X50,3) e com writeline deixo definido o Numero,..

    se o seu arquivo mantém o padrão (xxxxxx A40,5X50,3A30,2X50,3) deve funcionar...

    faça um teste...

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "teste.txt"
    vArquivoFInal = "Resultado.txt"
    
    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    Do Until objFile.AtEndOfStream
    strLerarquivo = objFile.Readall
    	vSepara = Split(strLerarquivo," ",2)
    	for each cSepara in vSepara
    		StrUm = (Replace(cSepara,",","."))
    		Strdois= (Replace(StrUm,"X",","))
    		Strfinal = (Replace(Strdois,"A",vbNewLine))
    	Next
    Loop
    
    If not objFSO.FileExists(vArquivoFInal)  Then
    	Set objFile = objFSO.CreateTextFile(vArquivoFInal)
    Else
    	Set objFile = objFSO.OpenTextFile(vArquivoFInal,8)
    End If
    	objFile.writeline "Numero"
    	objFile.write Strfinal
    	objFile.writeline ""
    	objFile.writeline "Close"
    	objFile.close


    att, Aparecido Deveza

    sexta-feira, 16 de agosto de 2013 03:36
  • Realmente Aparecido a separação da frase ocorreu 

    Mas pelo fato da palavra ser varias opções 

    ocorreu o caso da palavra ficar isolada na segunda linha exemplo 

    Numero
    TATU 
    73.5175656028,69.6852133102
    67.8875452262,-5.5621084384
    Close

    É possivel adicionar nesse script um comando para deletar a segunda linha por completo apos todas as mudanças ?? Axo que funcionaria

    sexta-feira, 16 de agosto de 2013 04:03
  • Entendi,

    faz o seguinte, verifique qual a maior variação, suponhamos que você tenha a seguinte variação :

    São paulo é localizado em um estado do Brasil A40,5X50,3A30,2X50,3

    note que antes do "A" existem 9 espaços, sendo assim no Split coloque 10...

    vSepara = Split(strLerarquivo," ",10)

    


    att, Aparecido Deveza

    sexta-feira, 16 de agosto de 2013 04:22
  • Não possui e mas que três espaço vou escrever o tipo de frase que aparece 

    Numero
    TATU,.*° *°  
    73.5175656028,69.6852133102
    67.8875452262,-5.5621084384
    Close


    Este tatu ou qualquer outra frase com essas símbolos na frente não desaparecem (tentei o metodo que vc acabou de explicar)

    sexta-feira, 16 de agosto de 2013 04:41
  •     Aparecido a um bom tempo abri esse tópico suas explicações me ajudaram bastante, no caso intendi o ultimo comando que vc me ensinou, só que quando o arquivo txt é muito extenso ele nao converte todo o txt somente um pouco , você sabe a causa do erro estou utilizando o comando abaixo  grato. 

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "COORDENADAS"
    vArquivoFInal = "Resultado.scr"

    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    Do Until objFile.AtEndOfStream
    strLerarquivo = objFile.Readall
    vSepara = Split(strLerarquivo,"Z",10)
    for each cSepara in vSepara
    StrUm = (Replace(cSepara,",","."))
    Strdois= (Replace(StrUm,"X",","))
    Strfinal = (Replace(Strdois,"A",vbNewLine))
    Next
    Loop

    If not objFSO.FileExists(vArquivoFInal)  Then
    Set objFile = objFSO.CreateTextFile(vArquivoFInal)
    Else
    Set objFile = objFSO.OpenTextFile(vArquivoFInal,8)
    End If
    objFile.Write strNewContents
    objFile.writeline "pline"
    objFile.write Strfinal
    objFile.writeline ""
    objFile.writeline "Close"
            objFile.close

    terça-feira, 28 de janeiro de 2014 15:37
  • Bom dia Binho,

    Desculpe a demora na resposta, é que ando meio corrido e que bom que o script esta ajudando, isso demonstra que o forum estar conseguindo atingir o seu objetivo de colaboração =D

    Então que pode esta ocorrendo que o script quando ler o arquivo, ele Ler como um "todo" ("strLerarquivo = objFile.ReadAll"), e guarda essa informação na memória depois vai tratando e no final gera o arquivo final.

    É provável que exista uma limitação de caracteres a serem armazenados, com isso ele somente trata até essa limitação.

    Pensando dessa forma, alterei o Script, fazendo que ao invés de ler o arquivo como um todo, ele passe a ler e tratar linha por linha ("strLerarquivo = objFile.ReadLine"), pode ser que o script demore um pouco mais a finalizar... 

    OBS: como o tratamento passou ser de  linha a linha, adaptei o script.

    faça um teste

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    vArquivoOriginal = "COORDENADAS"
    vArquivoFInal = "Resultado.scr"
    
    Set objFile = objFSO.OpenTextFile(vArquivoOriginal, 1)
    If not objFSO.FileExists(vArquivoFInal)  Then
    	Set oFile = objFSO.CreateTextFile(vArquivoFInal)
    Else
    	Set oFile = objFSO.OpenTextFile(vArquivoFInal,8)
    End If
    	oFile.Write strNewContents
    	oFile.writeline "pline"
    
    Do Until objFile.AtEndOfStream
    	strLerarquivo = objFile.ReadLine
    	vSepara = Split(strLerarquivo,"Z",10)
    	For each cSepara in vSepara
    		StrUm = (Replace(cSepara,",","."))
    		Strdois= (Replace(StrUm,"X",","))
    		Strfinal = (Replace(Strdois,"A",vbNewLine))
    
    		oFile.write Strfinal
    		oFile.writeline ""
    	Next
    Loop
    	oFile.writeline "Close"
    	oFile.close
    
    


    att, Aparecido Deveza

    sábado, 1 de fevereiro de 2014 14:09
  •             Boa Tarde

                   Aparecido, o erro parou de aparecer esta funcionando legal, somente o comando abaixo que não fuciona como antes, teria algum comando para substitui-lo(antes ele funcionava axo q pelo fato de ser leitura por linhas deixou de funcionar). Caso consiga ajudar desde já muito grato.

    vSepara = Split(strLerarquivo,"Z",10)
    quinta-feira, 13 de fevereiro de 2014 14:13