none
Mudar um caracter dentro de uma linha arquivo texto RRS feed

  • Pergunta

  • Boa tarde.

    Preciso fazer a alteração em um arquivo de texto da seguinte forma:

    Conteúdo original:

    ABCD|TESTE1|D|*|

    ABCD|TESTE1|D|*|

    ABCD|TESTE1|D|*|

    ABCD|TESTE1|D|*|

    Preciso mudar em uma linha especifica, por exemplo, na linha três somente a seguinte parte:

    Conteúdo modificado:

    ABCD|TESTE1|D|*|

    ABCD|TESTE1|D|*|

    ABCD|TESTE1|O|*|

    ABCD|TESTE1|D|*|

    Alguém tem ideia de como fazer? Obrigado.

    quarta-feira, 16 de novembro de 2016 19:44

Respostas

  • Se buscarmos por "|O|" para saber qual é a linha, pode ser feito assim:

    List<string> texto = File.ReadAllLines("CAMINHO_DO_ARQUIVO").ToList();
    int linha = texto.FindIndex(x => x.Contains("|O|"));
    texto[linha] = texto[linha].Replace("|D|", "|O|");
    File.WriteAllLines("CAMINHO_DO_ARQUIVO", texto);


    Perceba que usei o FindIndex utilizando uma expressão lambda para verificar qual linha continha o "|O|"

    Agora, dessa forma seu código fica dinâmico, ele mesmo busca qual a linha com esse termo, faz a substituição e salva no arquivo.

    Valeu!



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 17 de novembro de 2016 19:05

Todas as Respostas

  • Olá, pode fazer assim:

    List<string> texto = File.ReadAllLines("CAMINHO_DO_ARQUIVO").ToList();
    texto[2] = texto[2].Replace("|D|", "|O|");
    File.WriteAllLines("CAMINHO_DO_ARQUIVO", texto);

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quarta-feira, 16 de novembro de 2016 20:02
  • Boa tarde, antes de mais nada obrigado pela resposta, mas esqueci de inserir o código com o método que estou utilizando, com ele até roda, mas não grava.

            public void EstadiaOcupa()
            {
                string linha_pesquisa, REG = "REG|1|";
                FileStream arquivoDesocupa = new FileStream("Quartos.txt", FileMode.OpenOrCreate);
                StreamReader ler = new StreamReader(arquivoDesocupa);
                do
                {
                    linha_pesquisa = ler.ReadLine();
                    if (linha_pesquisa != null)
                    {
                        if (linha_pesquisa.Contains(REG))
                        {
                            var clinha = linha_pesquisa.Split('|');
                            var status = clinha[8];
                            var verifica_status = Convert.ToString(status);
                            //linha_pesquisa = verifica_status.Replace("|D|","|O|");
                            clinha[8] = clinha[8].Replace("|D|", "|O|");
                        }
                    }
                }
                while (linha_pesquisa != null);
                ler.Close();

    quinta-feira, 17 de novembro de 2016 16:20
  • Não está gravando porque não tem nenhum código aí que mande gravar no arquivo novamente.

    Recomendo usar o código que fiz que é muito mais limpo e faz, praticamente a mesma coisa. Talvez precise mudar alguma operação que faz a mais, mas se precisa fazer o que mandou na pergunta, ele faz perfeitamente com apenas 3 linhas de código.


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 17 de novembro de 2016 16:43
  • Sim, na pergunta ele cita somente a terceira linha, não posso editar todo o arquivo.
    quinta-feira, 17 de novembro de 2016 17:13
  • No meu exemplo está editando apenas a 3º linha.

    Aquela parte:

    texto[2] = texto[2].Replace("|D|", "|O|");

    Faz a alteração na 3º linha (está como 2, pois o índice começa a contar do 0)


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco


    quinta-feira, 17 de novembro de 2016 17:17
  • Entendi, e como faço para fazer a mesma alteração descobrindo a linha no arquivo? Por exemplo:

    1|ABCD|TESTE1|D|*|

    2|ABCD|TESTE1|D|*|

    3|ABCD|TESTE1|O|*|

    4|ABCD|TESTE1|D|*|

    quinta-feira, 17 de novembro de 2016 18:52
  • Se buscarmos por "|O|" para saber qual é a linha, pode ser feito assim:

    List<string> texto = File.ReadAllLines("CAMINHO_DO_ARQUIVO").ToList();
    int linha = texto.FindIndex(x => x.Contains("|O|"));
    texto[linha] = texto[linha].Replace("|D|", "|O|");
    File.WriteAllLines("CAMINHO_DO_ARQUIVO", texto);


    Perceba que usei o FindIndex utilizando uma expressão lambda para verificar qual linha continha o "|O|"

    Agora, dessa forma seu código fica dinâmico, ele mesmo busca qual a linha com esse termo, faz a substituição e salva no arquivo.

    Valeu!



    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    quinta-feira, 17 de novembro de 2016 19:05
  • Boa tarde.

    André, obrigado por sua atenção, funcionou perfeitamente.

    sexta-feira, 18 de novembro de 2016 18:34