Guinho.TI
Membros-
Total de itens
36 -
Registro em
-
Última visita
Sobre Guinho.TI
- Data de Nascimento 28/12/1986
Perfil
-
Gender
Male
-
Location
Rio de Janeiro
Guinho.TI's Achievements
0
Reputação
-
Ultimamente, devido a vida corrida, eu só tenho tempo para estudar Java na Faculdade. Gostaria mesmo de ter mais tempo para me dedicar, pois eu me interesso e gosto de programar. Assim que eu der uma "aliviada" já sei onde e a quem recorrer, rsrsrs! Abc e valeu, mais uma vez, pela atenção
-
Valeu pela dica! Verei o que posso fazer! Abc
-
Sou novo em Java e estou tentando montar um projeto. Estou criando Interface Gráfica e gostaria de associar os métodos das minhas classes que estão prontas a ela. Alguém sabe onde posso achar um tutorial que me auxilia e fazer isso?
-
valeu mesmo pela dica! Eu pedi logo pra baixar porque eu estive tentando fazer e não consegui e as pesquisas eu eu fiz na Net não estavam sendo suficientes.... Consegui achar muito material em sites estrangeiros, e acredito que com mais estas informações eu consiga o que eu quero. Abc
-
Esperei um dia para ver como ficaria a atualização dos LOGS e deu certo! Os Logs que estavam dando erro atualizaram e os que iniciaram ontem e finalizaram hoje atualizaram normalmente após a alteração do código. Espero que não ocorra mais erros. Valeu mesmo pela atenção, Jhonas! Abc
-
Jhonas, ficou muito boa esta estrutura. Era isso que eu estava tentando montar mas não conseguia. Vou fazer as alterações necessárias e ver o que ocorre! Tomara que desta vez funcione.
-
Vamos ver se eu entendi ou piorei a situação. No meu caso, quando o a String "Exit Status" é encontrada, significa que o LOG finalizou. Se o log finalizou, devem ser coletados os outros dados, Status e data Término, ou seja, vai até o final. Se não finalizou, pula para leitura do outro log. Sendo assim, este trecho está correto? if completo=true then begin func := Funcoes.Create; temp := Trim(AnsiRightStr(linha, Length(linha) - Pos(':', linha))); temp := StrtoInt(temp); break; end else begin completo:=false; continue; end; Quanto ao While eu vou tentar desvinculá-los e digo como ficou. Abc
-
De acordo com o que aprendi até agora, modifiquei algumas linhas do código. Enquanto eu tento fazer alguns testes por aqui, gostaria que vocês analisassem desde já, se pelo menos a estrutura está certa, mesmo que ainda não funcione do jetio que eu preciso. Se possível, gostaria que alguém pudesse me explicar também a diferença do BREAK e do CONTINUE. while (indice > arquivo.Count - 10) do begin indice := indice - 1; linha := arquivo[indice]; //Se a string for encontrada, significa que o arquivo está completo if (AnsiContainsText(linha, '= Exit Status') = True) then completo:= True; if completo=true then begin func := Funcoes.Create; temp := Trim(AnsiRightStr(linha, Length(linha) - Pos(':', linha))); temp := StrtoInt(temp); break; end else begin completo:=false; continue; end; if (func.IsInteger(temp) = True) then begin self.Status := StrToInt(temp); break; end else completo := False; //Data de término while (indice < arquivo.Count) do begin linha := arquivo[indice]; temp := AnsiMidStr(linha, Pos('/', linha) - 2, LastDelimiter(':', linha) - Pos('/', linha) + 8); if (func.IsDate(temp) = True) then begin self.Termino := StrToDateTime(temp); completo := True; Break; end else completo := False; indice := indice + 1; end; end; end; //TÉRMINO DO WHILE DE LEITURA DO ARQUIVO - RODAPÉ
-
Bom, a estrutura para a leitura sequencial do todos os Logs já estah pronta e funcionando. O único erro é nesta parte, pois o antiga rotina nem sempre está coletando o FIM dos Scripts. Eles já estão como terminados, ou seja, com a String "Exit Status", mas o BD não tem os dados "Status" e "data Término", o que faz o usuário imaginar que o Script está em andamento ainda. O que eu estou fazendo é recontruir a Procedure que foi feita por outro estagiário. Segue abaixo a que está dando erro(que foi feita por outra pessoa): procedure ArquivoLog.Atualizar(dirArqLog: String); var arquivo:TStringList; //Variável que vai carregar e manipular o arquivo linha:String; //Variável em que será colocada a linha lida do arquivo cont:integer; //Contador para informar qual o número da linha corrente; indice:integer; //Indice para coleta dos dados na lista temp:String; //Variável onde ficarão as informações temporárias da linha lida do arquivo completo:Boolean; //Variável para informar se o arquivo de log está completo (True) ou não (False), //Muda para true quando encontra o rodapé padrão dos arquivos de log arqErro:TStringList; //Objeto para carregar os erros existentes no arquivo de erro e salvá-los junto com os novos erros:TStringList; //Objeto para guardar os erros gerados pelo sistema e passá-los para o objeto arqErro func:Funcoes; nomeArq:String; begin nomeArq := ExtractFileName(dirArqLog); arquivo := TStringList.Create; completo := False; Writeln('>> Atualizando dados do arquivo...'); cont := 0; self.CaminhoLog := dirArqLog; try CopyFile(PChar(dirArqLog), Pchar('CopyLogTWS_Log_' + nomeArq), false); arquivo.LoadFromFile('CopyLogTWS_Log_' + nomeArq); DeleteFile(Pchar('CopyLogTWS_Log_' + nomeArq)); {LENDO DADOS DO ARQUIVO DE LOG - CABECALHO} indice := 0; while (indice < arquivo.Count - 1) do begin cont := cont + 1; linha := arquivo[indice]; //Nome do script if ((cont = 4) and (completo = False)) then begin temp := AnsiRightStr(linha, Length(linha) - Pos(':', linha) - 1); if (AnsiContainsText(temp, ' ')=True) then temp := AnsiLeftStr(temp, Pos(' ', temp) - 1); temp := AnsiRightStr(temp, Length(temp) - LastDelimiter('\', temp)); if (AnsiContainsText(temp, '.')=True) then temp := AnsiLeftStr(temp, pos('.', temp) - 1); self.NomeScript := temp; end //Número do job else if ((cont = 5) and (completo = False)) then begin temp := AnsiRightStr(linha, Length(linha) - LastDelimiter(':', linha)); self.Job := StrToInt(Trim(temp)); Break; {DEPOIS DE LER O NUMERO DO JOB, NÃO É NECESSÁRIO LER OS OUTROS DADOS DO CABEÇALHO PORQUE O NOME DO SCRIPT E O NUM DO JOB FORMAM A CHAVE PRIMÁRIA DA TABELA} end; indice := indice + 1; end; //TÉRMINO DO WHILE DE LEITURA DOS DADOS DO CABEÇALHO {LENDO OS DADOS DO ARQUIVO DE LOG - RODAPÉ} indice := arquivo.Count; while (indice > arquivo.Count - 10) do begin indice := indice - 1; linha := arquivo[indice]; //Se a string for encontrada, significa que o arquivo está completo if (AnsiContainsText(linha, '= Exit Status') = True) then begin completo := True; func := Funcoes.Create; temp := Trim(AnsiRightStr(linha, Length(linha) - Pos(':', linha))); END; if (func.IsInteger(temp) = True) then self.Status := StrToInt(temp) else begin completo := False; break; end;//fim do IF //Data de término while (indice < arquivo.Count) do begin linha := arquivo[indice]; temp := AnsiMidStr(linha, Pos('/', linha) - 2, LastDelimiter(':', linha) - Pos('/', linha) + 8); if (func.IsDate(temp) = True) then begin self.Termino := StrToDateTime(temp); completo := True; Break; end else completo := False; indice := indice + 1; end; Break; end; end; //TÉRMINO DO WHILE DE LEITURA DO ARQUIVO - RODAPÉ {VERIFICANDO SE O TERMINO DO ARQUIVO FOI ENCONTRADO, CASO NEGATIVO O PROCESSO DE ATUALIZAÇÃO É ABORTADO} if (completo = True) then begin //Lendo todo o conteúdo do arquivo de log self.LogScript := arquivo.Text; end else begin Writeln('-- MSG: A atualizacao dos dados do arquivo de log não foi realizada'); Writeln('-- MSG: O log ainda esta em andamento'); exit; //Saindo da função sem atualizar o arquivo end; except //TRATAMENTO DA EXCEÇÃO - O log ainda está em andamento, os dados não podem ser atualizados on e:EFileStreamError do begin Writeln('-- MSG: A atualizacao dos dados do arquivo de log não foi realizada'); Writeln('-- MSG: O log ainda esta em andamento'); Exit; end; on e:Exception do begin temp := DateTimeToStr(Now, formatoData); Writeln('## ' + temp); Writeln('-- ERRO: Ocorreu um erro durante a atualizacao dos dado do arquivo'); Writeln('-- MSG: ' + e.Message); if (self.config.DiretorioArqErro <> '') then begin arqErro := TStringList.Create; erros := TStringList.Create; erros.Append(''); erros.Append('## ' + temp); erros.Append('-- ERRO: Ocorreu um erro quando o sistema tentava atualizar o arquivo de log ' + dirArqLog); erros.Append('-- MSG: ' + e.Message); if (FileExists(self.config.DiretorioArqErro) = True) then arqErro.LoadFromFile(self.config.DiretorioArqErro); arqErro.AddStrings(erros); arqErro.SaveToFile(self.config.DiretorioArqErro); erros.Destroy; arqErro.Destroy; end; self.numErros := self.numErros + 1; Exit; end; end; {A PARTIR DESSE PONTO TODOS OS DADOS PARA ATUALIZAÇÃO FORAM COLETADOR DO ARQUIVO, O CÓDIGO ABAIXO FARÁ A ATUALIZAÇÃO NO BANCO DE DADOS} try with self.modConn.queryUpdateArqLog.Parameters do begin ParamByName('NomeScr').Value := self.NomeScript; ParamByName('Job').Value := self.Job; ParamByName('Termino').Value := self.Termino; ParamByName('Status').Value := self.Status; ParamByName('LogScript').Value := arquivo.Text; end; //Atualizando os dados do arq de log no Banco de Dados self.modConn.queryUpdateArqLog.ExecSQL; //Mostrando os dados do Arquivo de Log atualizado Writeln('>> OS DADOS DO ARQUIVO DE LOG FORAM ATUALIZADOS COM SUCESSO'); Writeln('>> NOME SCRIPT: ' + self.NomeScript); Writeln('>> No DO JOB: ' + IntToStr(self.Job)); Writeln('>> TERMINO: ' + DateTimeToStr(self.Termino, self.formatoData)); Write('>> STATUS: ' + IntToStr(self.Status)); if (self.Status = 0) then Writeln(' (OK)') else Writeln(' (ERRO)'); except on e:Exception do begin Writeln('## ' + DateTimeToStr(Now, formatoData)); Writeln('-- ERRO: Ocorreu um erro durante a atualizacao dos dados do arquivo no BD'); Writeln('-- MSG: ' + e.Message); end; end; end; Acredito então estar indo no caminho certo. Aceito sugestões! Abc
-
Ainda tenho uma dúvida: Este caso funcionou direito pois eu estou fazendo a leitura de somente um arquivo. A real intenção deste programa é ler uma série de arquivos de logs. Todos os Logs são salvos no Banco de Dados, mas alguns dados como Data de Término e Status só podem ser atualizados após o término de um Script, ou seja, quando programa insere no mesmo a String " = Exit Status" . Esta rotina que estou tentando criar vai servir para isso: Ler todos os logs, salvar no BD, verificar os que finalizados, inserir no BD as informações dos finalizados e reler até que todos estejam finalizados. Então a lógica que eu quero é essa: -Se tiver finalizado, salva os dados no BD e passa para o próximo Log . -Se não tiver finalizado, passa para o próximo Log. Será um Loop diário até que todos os arquivos estejam finalizados e inseridos no BD. Neste caso, a rotina acima funcionará corretamente ou eu terei que fazer ainda algumas alterações? Desde já agradecido...
-
Ouvi dizer que é possível criar uma espécie de chat utilizando RMI. Alguém saberia onde tem um codigo pronto para eu baixar?
-
É o seguinte, Depois de muito custo, consegui montar uma rotina que lê um arquivo e procura nele uma String que indica que houve o fim na execução de um script.Agora estou tendo dois problemas: 1. Não consigo inserir múltiplos comandos dentro do If. Quando eu faço isso, ele só resolve o que estiver no Else. Temporariamente, criei vários If´s pra solucionar isto. 2. Quando eu incluo a linha "if completo=false then break;" o programa me devolve para os dois casos (true/false) a Mensagem "Script em andamento", mas se eu retiro novamente, o programa funciona corretamente. Arq: TStringList; i: Integer; FileName:string; linha:String; temp:String; completo:boolean; begin Arq := TStringList.Create; (*** INSTANCIA A VARIÁVEL ***) try FileName := 'C:\log.txt'; if FileExists(FileName) then Arq.LoadFromFile('C:\log.txt'); for i := 0 to Arq.Count - 1 do (*** PERCORRE AS LINHAS (ÍNDICES) ***) begin linha:=Arq[i]; {se esta string estiver no LOg, significa que a execução terminou} if (AnsiContainsText(linha, '= Exit Status) = True) then completo:= True; {Se a o Log finalizou, recebe o número do Status. Se não finalizou, completo é false} if completo=true then temp := Trim(AnsiRightStr(linha, Length(linha) - Pos(':', linha))) else completo:=false; if completo=false then break; end; //End For if completo=true then Showmessage('Script Finalizado!') else showmessage('Script em Andamento); finally FreeAndNil(Arq); // LIBERA A VARIÁVEL DA MEMÓRIA end;//end do try/finally end.
-
(Resolvido) Arquivos Texto (.txt) Em Delphi
pergunta respondeu ao Guinho.TI de Guinho.TI em Delphi, Kylix
Cara, pior que foi isso mesmo! Olhei com calma e vi que o que você falou está correto! Brigadão mesmo! Porém ainda não funciona do jeito que eu queria. Estive dando uma olhada sobre como fazer o que eu queria com TStringList e consegui. Vou postar para quem tiver as mesmas dúvidas: var (*** VARIÁVEL DE MANIPULAÇÃO DO ARQUIVO ***) Arq: TStringList; i: Integer; //x: Integer FileName:string; aff:boolean; linha:String; begin Arq := TStringList.Create; (*** INSTANCIA A VARIÁVEL ***) try FileName := 'C:\log.txt'; (*** ATRIBUI O NOME DO ARQUIVO COM O DIRETÓRIO ***) if FileExists(FileName) then (*** VERIFICA SE O ARQUIVO EXISTE ***) begin Arq.LoadFromFile('C:\log.txt'); for i := 0 to Arq.Count - 1 do (*** PERCORRE AS LINHAS ***) begin linha:=Arq[i]; aff:=ansicontainstext(linha,'error'); If aff=true Then Showmessage('LOG executado com erro') Else Showmessage('LOG executado com sucesso!') end;//fim for end;//fim else finally FreeAndNil(Arq); // LIBERA A VARÁVEL DA MEMÓRIA end; end. -
Preciso criar uma rotina que leia uma determinada String dentro de um arquivo txt e retorne se foi encontrada ou não. Eu havia feito o seguinte: var nomeDoArquivo: String; aff:boolean; arq: TextFile; linha: String; begin AssignFile ( arq, 'C:\log.txt'); Reset ( arq ); ReadLn ( arq, linha ); while not Eof ( arq ) do begin ReadLn ( arq, linha ); aff:=ansicontainstext(arq,'error'); If aff=true then Showmessage('ERRO encontrado no Log!') else showmessage('Log finalizado com sucesso!') end; CloseFile ( arq ); end; Quanso eu executo, aparece o seguinte erro: Incompatible Types 'String' and 'Text' O que fazer para consertar e fazer o que eu quero???
-
Consegui resolver! da forma mais "boba" possível. Depois de fazer vários testes, inclusive o que o nosso amigo indicou, inseri um ON ERROR RESUME NEXT antes da conexão com o Banco de Dados, que era a linha que indicava erro. Desta forma, as mensagens de erro voltaram a ser exibidas como eu havia feito! valeww pela ajuda!