none
Dividir arquivo em dois, um que contém determinada string, outro não RRS feed

  • Pergunta

  • Fábio, sem querer abusar, me ajuda no seguinte:

    Gostaria que o script excluísse as linhas com a string que eu determine do arquivo original.txt, e ainda escrevesse em outro arquivo novo.txt essas linhas que foram excluídas entende?

    Estou usando o script abaixo, mas está fazendo o contrário e sem excluir as linhas do arquivo original.txt. Está mantendo no arquivo original.txt as linhas com a string que determino e escrevendo no arquivo novo.txt as linhas que não contém a string.

    Const ForReading = 1
    Const ForWriting = 2

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile("C:\Temp\original.txt", ForReading)

    Do Until objFile.AtEndOfStream
        strLine = objFile.Readline
        strLine = Trim(strLine)
        If instr(strLine,"string") = 0 Then
            strNewContents = strNewContents & strLine & vbCrLf
        End If
    Loop

    objFile.Close

    Set objFile = objFSO.OpenTextFile("C:\Temp\novo.txt", ForWriting)
    objFile.Write strNewContents
    objFile.Close

    • Dividir Fábio JrModerator quarta-feira, 25 de julho de 2012 21:20 Dúvida diferente do original
    quarta-feira, 25 de julho de 2012 18:19

Respostas

  • SET PROCURA=-a-b-c
    SET ARQUIVO=C:\Temp\original.txt
    
    findstr /I /c:"%PROCURA%" %ARQUIVO% > novo.txt
    findstr /V /I /c:"%PROCURA%" %ARQUIVO% > original.txt

    Adicione o /c.

    Veja a saida testando por prompt, primeiro com erro e depois adicionando o /c.

    C:\Users\fpjunior>findstr "-a-b-c" c:\temp\original.txt
    FINDSTR: /a ignorado
    FINDSTR: /- ignorado
    FINDSTR: /- ignorado
    FINDSTR: /c ignorado
    
    C:\Users\fpjunior>findstr /i /c:"-a-b-c" c:\temp\original.txt
    -a-b-c757575
    -a-b-cididd
    -a-b-ckkdkdkd
    -a-b-c
    
    C:\Users\fpjunior>findstr /i /v /c:"-a-b-c" c:\temp\original.txt
    ikdkdkdkd
    ldldld

    Se quiser em .VBS tente o seguinte, abra dois objetos de Gravação (é a sua linha que tem o ForWriting), então na parte onde vc testa se tem a string vc faz um "IF then ELSE" , se existe grava em um arquivo senão grava em outro.

    Tente fazer a modificação no .VBS e poste aqui como ficou, eu vou ajudando até chegar aonde vc quer.


    Fábio de Paula Junior

    • Marcado como Resposta Marco_AM segunda-feira, 30 de julho de 2012 10:42
    quinta-feira, 26 de julho de 2012 16:45
    Moderador

Todas as Respostas

  • Talvez não seja necessário um script muito elaborado.

    Veja estes comandos no prompt

    C:\Users\FABIOJR\Desktop>type teste.txt
    fabio
    junior
    technet
    fabio2
    tech2
    C:\Users\FABIOJR\Desktop>findstr /V /I "fabio" teste.txt
    junior
    technet
    tech2
    C:\Users\FABIOJR\Desktop>findstr /I "fabio" teste.txt
    fabio
    fabio2

    O primeiro lista o conteudo do arquivo teste.txt

    O segundo filtra apenas as linhas que não contem "fabio"

    O terceiro apenas as linhas que contém "fabio"

    Pra vc jogar o resultado para um arquivo basta acrescentar "> nome do arquivo", e pode salvar o comando em um .BAT, assim:

    findstr /I "fabio" teste.txt > contem.txt
    findstr /V /I "fabio" teste.txt > nao_contem.txt


    Fábio de Paula Junior


    quarta-feira, 25 de julho de 2012 21:29
    Moderador
  • Fábio, obrigado pela dica, vou testar. Mas esse meu arquivo .txt tem mais de 3 milhões de linhas, será que vai funcionar? Se possível, gostaria mesmo de utilizar um script .vbs, pois vou precisar fazer várias vezes as buscas pelas strings neste arquivo entende? Valeu!!!
    quarta-feira, 25 de julho de 2012 23:14
  • Veja, com parametros;

    SET PROCURA=fabio
    SET ARQUIVO=teste.txt
    
    findstr /I "%PROCURA%" %ARQUIVO% > contem.txt
    findstr /V /I "%PROCURA%" %ARQUIVO% > nao_contem.txt

    PROUCURA = é a string que vc vai procurar

    ARQUIVO = É o arquivo original que será dividido em dois.


    Fábio de Paula Junior

    quinta-feira, 26 de julho de 2012 02:01
    Moderador
  • Fábio, bom dia. Salvei o script abaixo em .bat mas não rolou, ignora alguns parâmetros... Não é possível fazer em .vbs mesmo??

    SET PROCURA=-a-b-c
    SET ARQUIVO=C:\Temp\original.txt

    findstr /I "%PROCURA%" %ARQUIVO% > novo.txt
    findstr /V /I "%PROCURA%" %ARQUIVO% > original.txt

    quinta-feira, 26 de julho de 2012 12:56
  • SET PROCURA=-a-b-c
    SET ARQUIVO=C:\Temp\original.txt
    
    findstr /I /c:"%PROCURA%" %ARQUIVO% > novo.txt
    findstr /V /I /c:"%PROCURA%" %ARQUIVO% > original.txt

    Adicione o /c.

    Veja a saida testando por prompt, primeiro com erro e depois adicionando o /c.

    C:\Users\fpjunior>findstr "-a-b-c" c:\temp\original.txt
    FINDSTR: /a ignorado
    FINDSTR: /- ignorado
    FINDSTR: /- ignorado
    FINDSTR: /c ignorado
    
    C:\Users\fpjunior>findstr /i /c:"-a-b-c" c:\temp\original.txt
    -a-b-c757575
    -a-b-cididd
    -a-b-ckkdkdkd
    -a-b-c
    
    C:\Users\fpjunior>findstr /i /v /c:"-a-b-c" c:\temp\original.txt
    ikdkdkdkd
    ldldld

    Se quiser em .VBS tente o seguinte, abra dois objetos de Gravação (é a sua linha que tem o ForWriting), então na parte onde vc testa se tem a string vc faz um "IF then ELSE" , se existe grava em um arquivo senão grava em outro.

    Tente fazer a modificação no .VBS e poste aqui como ficou, eu vou ajudando até chegar aonde vc quer.


    Fábio de Paula Junior

    • Marcado como Resposta Marco_AM segunda-feira, 30 de julho de 2012 10:42
    quinta-feira, 26 de julho de 2012 16:45
    Moderador
  • Legal Fábio, deu certo pelo "findstr". Mas tentei gravar no próprio arquivo original mantendo as linhas que não contém a string e fica em branco. Mas tudo bem, criando 2 novos arquivos funcionou a separação.

    Sobre o .vbs, entendi sua sugestão, mas infelizmente não tenho as manhas de escrever no código, não tenho noção de desenvolvimento, trabalho com Infraestrutura de Redes. Se não for pedir D+, quando puder, pode escrever no código .vbs suas sugestões? Obrigado

    quinta-feira, 26 de julho de 2012 18:40
  • É, não dá pra substituir o próprio arquivo que você está lendo, o que vc pode fazer a apagar ele ao final da criação dos outro dois e então renomear um dos dois que você gerou.

    Fábio de Paula Junior

    sexta-feira, 27 de julho de 2012 11:35
    Moderador
  • Olá Fábio, vou estender um pouco mais minha necessidade, veja se é possível.

    Criei um .bat com os comandos abaixo para dividir um arquivo em dois com base em uma string, um que contém a string e outro não, funciona perfeitamente.

    findstr /I /C:"a-b-c" "C:\Temp\original.txt" > contem.txt
    findstr /I /V /C:"a-b-c" "C:\Temp\original.txt" > nao_contem.txt

    Agora, gostaria de saber se tem como excluir as linhas que contenham 2 ou mais strings entende? Por exemplo: "a-b-c" + "f-g" + "o-p"

    Obrigado

    quinta-feira, 2 de agosto de 2012 16:02