none
Como Escrever e Pesquisar um Determinado Dado em Arquivo de Texto?

    Pergunta

  •  

    Olá Pessoal, estou em dúvida com 2 situações

     

     1) Como Escrever em um arquivo de Texto de forma que á cada dado que fôr colhido de uma variavel string á cada vêz que acionar o evento click do botão ele sempre escreva da seguinte forma dentro de um mesmo arquivo.txt

     

     dado1 (acionou pela primeira vêz o evento do click do botão)

     dado2 (acionou pela segunda vêz o evento do click do botão) o dado2 seria escrita na linha abaixo do dado1

     dado3 (acionou pela terceira vêz o evento do click do botão)  o dado3 seria escrito na linha abaixo do dado2

     dado4....(acionou pela quarta vêz o evento do click do botão)  o dado4 seria escrito na linha abaixo do dado3

     

    e por aí vai....

     

     

    2)Baseado na questão 1 ácima como é que eu criaria baseado em uma instrução vinda do evento de outro botão + cx de texto pesquisar um determinado dado(por exemplo dado2) deste mesmo arquivo de texto o repassando para uma label ou outro textbox a resposta apenas do dado2

     

    Se alguem puder me ajudar desde já agradeço (pois estou precisando dele para auxílio em uma classe)

     

     

    quarta-feira, 28 de janeiro de 2009 05:21

Respostas

  • Olá Luiz,

     

    As classes StreamReader e StreamWriter que estão no namespace System.IO, permitem ler e escrever arquivos texto, respectivamente.

     

    Assim, para gravar informações em um arquivo, basta utilizar a classe StreamWriter:

     

    Code Snippet

     

     // Abre o arquivo C:\SeuArquivo.txt em modo escrita, a partir do final

     StreamWriter writer = new StreamWriter("C:\SeuArquivo.txt", true);

     using (writer)

     {

    // Escreve uma nova linha no final do arquivo

    writer.WriteLine("Data/Hora: " + DateTime.Now.ToString());

     }

     

     

    O último parâmetro desse overload do construtor da classe StreamWriter (true) indica que ele deve abrir o arquivo em modo Append, ou seja, as informações escritas serão adicionadas ao final do arquivo.

     

    ---

     

    Depois, para ler o conteúdo do arquivo e pesquisar por informações, basta utilizar a classe StreamReader e percorrer as linhas do arquivo:

     

    Code Snippet

     

     string informacaoQueProcuro = string.Empty;

     

     // Abre o arquivo C:\SeuArquivo.txt em modo escrita, a partir do final (Append = true)

     StreamReader reader = new StreamReader(@"C:\SeuArquivo.txt", true);

     using (reader)

     {

    string linha;

     

    // Lê cada uma das linhas do arquivo

    while ((linha = reader.ReadLine()) != null)

    {

    // A linha possui a informação que procuro?

    if (linha.Contains("informação"))

    {

    // Sim. Então guarda a informação e abandona o loop

    informacaoQueProcuro = linha;

    break;

    }

    }

     }

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 28 de janeiro de 2009 11:52

Todas as Respostas

  • Em um arquivo de texto eu não sei como fazer isso, mas com um arquivo XML é fácil:

    Aqui um documento XML:
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    <!-- Adicione uma tag dessa para cada dado adicionado -->
    <tagDado_1 value="valor do dado 1">
    </tagDado_1>
    ...
    <tagDado_n value="valor do dado n">
    </tagDado_n>
    </configuration>



    E aqui uma classe prontinha para ler e escrever no arquivo XML:

    using System.Xml.Linq;
    using System.Xml;

    /// <summary>
    /// Classe que altera qualquer valor em qualquer tag do arquivo XML externo
    /// </summary>
    public class ReadWriteXML
    {
        #region "Global Variables and Properties"
            private string path = "";
            private string m_exception = "";
            private XmlDocument cbConfig = new XmlDocument();

            public string exception
            {
                get { return m_exception; }
            }
        #endregion

        #region "Public Methods"
            /// <summary>
            /// Altera keys em tags de um arquivo XML
            /// </summary>
            /// <param name="pathDocXML">Caminho e nome do documento, exemplo: "D:\\WebSite\\Web.config"</param>
            /// <param name="tag">Tag XML, como "sessionState"</param>
            /// <param name="key">Key XML, como "mode"</param>
            /// <param name="value">Parâmetro que substitui o valor anterior da key no XML</param>
            /// <returns>Retorna verdadeiro se sucesso</returns>
            public bool WriteXML(string pathDocXML, string tag, string key, string value)
            {
                return p_WriteXML(pathDocXML, tag, key, value);
            }

            /// <summary>
            /// Lê keys em tags de um arquivo XML
            /// </summary>
            /// <param name="pathDocXML">Caminho e nome do documento, exemplo: "D:\\WebSite\\Web.config"</param>
            /// <param name="tag">Tag XML, como "sessionState"</param>
            /// <param name="key">Key XML, como "mode"</param>
            /// <param name="value">Parâmetro que retorna o valor da key no XML, se encontrado, senão, retorna null</param>
            /// <returns></returns>
            public bool LoadXML(string pathDocXML, string tag, string key, ref string value)
            {
                return p_LoadXML(pathDocXML, tag, key, ref value);
            }
        #endregion

        #region "Private Methods"
            private bool p_WriteXML(string pathDocXML, string tag, string key, string value)
            {
                try
                {
                    // Carrega o arquivo XML na memória
                    cbConfig.Load(pathDocXML);

                    // Armazena a tag com suas keys na variável nodelist.
                    XmlNodeList nodeList = cbConfig.GetElementsByTagName(tag);

                    // Percorre toda a tag
                    foreach (XmlNode node in nodeList)
                    {
                        XmlAttributeCollection xmlAttCollection = node.Attributes;
                        // Percorre todas as keys da tag
                        foreach (XmlAttribute attribute in xmlAttCollection)
                        {
                            if (attribute.Name == key)   // se encontrar uma key no XML igual a passada por parâmetro,
                                attribute.Value = value; // altera seu valor
                        }
                    }
                }
                catch (Exception ex)
                {
                    m_exception = ex.Message;
                    return false;
                }

                // Finalmente salva o arquivo XML
                cbConfig.Save(pathDocXML);
                return true;
            }

            private bool p_LoadXML(string pathDocXML, string tag, string key, ref string value)
            {
                try
                {
                    // Carrega o arquivo XML na memória
                    cbConfig.Load(pathDocXML);

                    // Armazena a tag com suas keys na variável nodelist.
                    XmlNodeList nodeList = cbConfig.GetElementsByTagName(tag);

                    // Percorre toda a tag
                    foreach (XmlNode node in nodeList)
                    {
                        XmlAttributeCollection xmlAttCollection = node.Attributes;
                        // Percorre todas as keys da tag
                        foreach (XmlAttribute attribute in xmlAttCollection)
                        {
                            if (attribute.Name == key)   // se encontrar uma key no XML igual a passada por parâmetro,
                                value = attribute.Value; // retorna o valor
                        }
                    }
                }
                catch (Exception ex)
                {
                    m_exception = ex.Message;
                    return false;
                }
               
                return true;
            }
        #endregion
    }

    Exemplo de uso:

    ReadWriteXML WebConfig = new ReadWriteXML();
    string DirectoryPath = Request.ApplicationPath.ToString();
    // caminho do documento xml
    string path = Server.MapPath(DirectoryPath) + "doc.xml";
    string value = "valor do dado 1";

    // escreve o valor da string value no arquivo xml:
    WebConfig.WriteXML(path, "tagDado_1", "value", value);

    // leitura:
     WebConfig.LoadXML(path, "tagDado_1", "value", ref value);
    // agora a string value tem o valor lido no xml

    Espero que ajude.

    quarta-feira, 28 de janeiro de 2009 11:10
  • Opa, tem uma coisinha que eu esqueci, para adicionar novos nós e keys, implemente dentro da classe ReadWriteXML novas funções utilizando os métodos da classe XmlDocument: CreateNode(); AppendChild(); etc.
    quarta-feira, 28 de janeiro de 2009 11:18
  • Olá Luiz,

     

    As classes StreamReader e StreamWriter que estão no namespace System.IO, permitem ler e escrever arquivos texto, respectivamente.

     

    Assim, para gravar informações em um arquivo, basta utilizar a classe StreamWriter:

     

    Code Snippet

     

     // Abre o arquivo C:\SeuArquivo.txt em modo escrita, a partir do final

     StreamWriter writer = new StreamWriter("C:\SeuArquivo.txt", true);

     using (writer)

     {

    // Escreve uma nova linha no final do arquivo

    writer.WriteLine("Data/Hora: " + DateTime.Now.ToString());

     }

     

     

    O último parâmetro desse overload do construtor da classe StreamWriter (true) indica que ele deve abrir o arquivo em modo Append, ou seja, as informações escritas serão adicionadas ao final do arquivo.

     

    ---

     

    Depois, para ler o conteúdo do arquivo e pesquisar por informações, basta utilizar a classe StreamReader e percorrer as linhas do arquivo:

     

    Code Snippet

     

     string informacaoQueProcuro = string.Empty;

     

     // Abre o arquivo C:\SeuArquivo.txt em modo escrita, a partir do final (Append = true)

     StreamReader reader = new StreamReader(@"C:\SeuArquivo.txt", true);

     using (reader)

     {

    string linha;

     

    // Lê cada uma das linhas do arquivo

    while ((linha = reader.ReadLine()) != null)

    {

    // A linha possui a informação que procuro?

    if (linha.Contains("informação"))

    {

    // Sim. Então guarda a informação e abandona o loop

    informacaoQueProcuro = linha;

    break;

    }

    }

     }

     

     

    Abraços,
    Caio Proiete




    Caio Proiete
    http://www.caioproiete.com
    quarta-feira, 28 de janeiro de 2009 11:52