Bina0 0 Denunciar post Postado Julho 23, 2009 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
Juliano.net 2 Denunciar post Postado Julho 23, 2009 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
Bina0 0 Denunciar post Postado Julho 23, 2009 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
Juliano.net 2 Denunciar post Postado Julho 24, 2009 Coloque um breakpoint dentro do loop e verifique o conteúdo de lines.ToString() Compartilhar este post Link para o post Compartilhar em outros sites
Bina0 0 Denunciar post Postado Julho 24, 2009 Coloque um breakpoint dentro do loop e verifique o conteúdo de lines.ToString() Juliano,coloquei e me parece tudo ok: 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
Juliano.net 2 Denunciar post Postado Julho 24, 2009 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