Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bina0

C# - Problema com loop para ler arquivo

Recommended Posts

Boa tarde pessoal,

 

Estou com um problema do qual não consigo solucionar, ja tentei várias maneiras mas não consigo acertar a lógica da coisa..

Bom tenho um método que básicamente, le um arquivo, confere se ele é de extensão .log, abre esse arquivo e le as linhas contidas nele.

Lendo as linhas, preciso verificar linha por linha, se ela contém caracteres que são "inválidos". Os caracteres estão dentro de um array como dicionário, se tiver caracteres inválidos, analiso a próxima linha, se não guardo essa linha em uma string.

 

O problema: Ele esta me retornando somente a primeira linha, como se todas as outras tivessem caracteres inválidos.

 

Segue o método:

 

        #region ClearLogs

        /**********************************************************************************************************************
        * Método: ClearLogs                                                                                                   *
        * Tipo: string                                                                                                        *
        * Descrição: abre todos os arquivos de log com os parametros especificos, elimina as linhas que não são necessárias      *
        *            e armazena em uma string                                                                                 *
        * Parametros: string path: passa o diretório onde esta o arquivo log_users.txt                                        *
        *             string directory: passa o diretório onde esta os arquivos de logs                                       *
        * Retorno: string ClearLog - Retorna todas as linhas de todos os arquivos sem os caracteres especiais                 *             
        **********************************************************************************************************************/

        public string ClearLogs(string path, string directory)
        {
            //Cria um novo objeto ArrayList para receber os parametros do log_users.txt
            ArrayList parameters = new ArrayList();

            //Cria um novo objeto ArrayList para receber os arquivos encontrados
            ArrayList files = new ArrayList();

            //chama o método para guardar seus valores em um array
            parameters = StringsLogUsers(path);

            //inicia as variaveis com os valores retornados pelo metodo
            pais = parameters[0].ToString();
            oper = parameters[1].ToString();
            prob = parameters[2].ToString();

            //Cria um novo objeto da classe Files para pegar os arquivos que contenham os parametros necessários
            Files workFiles = new Files();

            //chama o método e indica os parametros de busca
            files = workFiles.getWorksFile(directory, pais, oper, prob);


            //Cria uma lista de dicionario para proibir os caracteres especiais
            List<string> dicionario = new List<string>();
            
            //adiciona os caracteres invalidos 
            dicionario.Add("^");    dicionario.Add("/");    dicionario.Add("[");
            dicionario.Add("-");    dicionario.Add("¨");    dicionario.Add("#");
            dicionario.Add("+");    dicionario.Add("%");    dicionario.Add("*");
            dicionario.Add("]");    dicionario.Add("=");    dicionario.Add("~");

            //cria e inicializa a variavel de string para guardar as linhas
            lineTemp = "";
            
/************ Aqui é o loop que não esta funcionando corretamente *************/

            //abre um laço nos arquivos encontrados 
            foreach (string logs in files)
            {
                bool ok = true;

                if (ok)
                {

                    //confere se são arquivos de logs
                    if (logs.EndsWith(".log"))
                    {

                        string[] lines = File.ReadAllLines(logs);

                        for (int i = 0; i < lines.Length; i++)
                        {
                            for (int j = 0; j < dicionario.Count; j++)
                            {
                                if ((lines[i].ToString().Contains(dicionario[j])) != true)
                                {
                                    ok = false;
                                }
                            }

                            if (ok)
                            {
                                lineTemp += lines[i].ToString() + Environment.NewLine;
                            }
                        }
                    }
                }
            }

            //retorna somente as linhas validas
            return lineTemp;

        }

        #endregion

Alguém tem ideia de como resolver?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema está quando você atribui false à variável Ok, pois nas próximas iterações, você não volta a atribuir true caso a linha esteja "Ok".

Outro problema é que o if que permite a inclusão das linhas está fora do loop.

 

Teria que ser:

 

for (int j = 0; j < dicionario.Count; j++)
{
   ok = true;

   if ((lines[i].ToString().Contains(dicionario[j])) != true)
   {
      ok = false;
   }
   
   if (ok)
   {
      lineTemp += lines[i].ToString() + Environment.NewLine;
   }

}


Compartilhar este post


Link para o post
Compartilhar em outros sites

Juliano.net, obrigado pela resposta, testei aqui, mas infelizmente ainda continua não limpando meu arquivo e ainda duplica a partir da segunda linha..

 

por exemplo, as minhas primeiras linhas de log são:

 

11:44:11: Serra-Leoa_Africell_IR24_RJ 	Jan 22, 2009
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Probe Group Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Total = 10
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Suite Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Signup for Probe <10.26.73.72>...
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Got Permision to Use Probe <10.26.73.72>.
11:44:11: Serra-Leoa_Africell_IR24_RJ 	TelnetSession::Connecting to <10.26.73.72, 23>...
11:44:13: Serra-Leoa_Africell_IR24_RJ 	Starting Logon to Rtp...
11:44:19: Serra-Leoa_Africell_IR24_RJ 	Logon succeed!!
11:44:19: Serra-Leoa_Africell_IR24_RJ ============================================

o meu arquivo gerado esta saindo:

11:44:11: Serra-Leoa_Africell_IR24_RJ 	Jan 22, 2009
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Probe Group Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Probe Group Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Total = 10
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Total = 10
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Suite Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Suite Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Test Case Cycle Total = 1
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Signup for Probe <10.26.73.72>...
11:44:11: Serra-Leoa_Africell_IR24_RJ 	Got Permision to Use Probe <10.26.73.72>.
11:44:11: Serra-Leoa_Africell_IR24_RJ 	TelnetSession::Connecting to <10.26.73.72, 23>...
11:44:13: Serra-Leoa_Africell_IR24_RJ 	Starting Logon to Rtp...
11:44:19: Serra-Leoa_Africell_IR24_RJ 	Logon succeed!!
11:44:19: Serra-Leoa_Africell_IR24_RJ ============================================
11:44:19: Serra-Leoa_Africell_IR24_RJ ============================================

deveria ter limpado todas as linhas onde se encontra =..

ja procurei e debuguei 1000 vezes e não consigo acertar isso, tem alguma idéia por favor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque um breakpoint dentro do loop e verifique o conteúdo de lines.ToString()

 

Juliano,

coloquei e me parece tudo ok:

 

Imagem Postada

 

Não consigo achar onde ele duplica e por que ele não elimina os caracteres

já tentei de tudo =/

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode me enviar por e-mail um pedaço do arquivo de log e a função que está apresentando o erro para que possa verificar diretamente no Visual Studio?

 

Meu e-mail é julianonunes arroba live.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.