Jump to content
Fórum Script Brasil

Guinho.TI

Membros
  • Posts

    36
  • Joined

  • Last visited

About Guinho.TI

  • Birthday 12/28/1986

Perfil

  • Gender
    Male
  • Location
    Rio de Janeiro

Guinho.TI's Achievements

0

Reputation

  1. 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
  2. Valeu pela dica! Verei o que posso fazer! Abc
  3. 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?
  4. Guinho.TI

    Chat Em Rmi

    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
  5. 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
  6. 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.
  7. 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
  8. 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É
  9. 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
  10. 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...
  11. Guinho.TI

    Chat Em Rmi

    Ouvi dizer que é possível criar uma espécie de chat utilizando RMI. Alguém saberia onde tem um codigo pronto para eu baixar?
  12. É 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.
  13. 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.
  14. 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???
  15. 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!
×
×
  • Create New...