Guinho.TI
Membros-
Total de itens
36 -
Registro em
-
Última visita
Tudo que Guinho.TI postou
-
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!
-
É o seguinte: Possuo um formulário de consulta onde o usuário escolhe seus parâmetros de busca e as realiza. Dentre estes campos, eu possuo um campo HORAS, onde o usuário pode digitar o intervalo de horas desejado na consulta. Ocorre que, eu estava tentando criar alguns tratamentos de erros que caso o usuário digitasse algum valor inválido, por exemplo: 25:59, exibiria uma mensagem solicitando que ele retornasse a página e corrigisse o erro. Executei a mesma consukta em dois Servidores diferentes, não sei porque em um funciona e no outro não... Analisem! Ao invés de exibir a minha mensagem, o navegador exibe The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value. A linha eque ele exibe o erro corresponde a da conexão: iRS.Open SQLStmt, oConn, 3, 1 Gostaria que vocês me ajudassem se possível
-
Descobri o problema. Realmente as duas lógicas estão corretas, mas estive lendo alguns tutoriais e olha o que eu vi: Não utilize includes para estruturar o site, se uma página possuir um If ou um Select Case para escolher qual include utilizar, então, está na hora de você pensar em transformá-la em duas ou mais páginas distintas. Provavelmente deve ser por isso q não consigo e nem conseguirei resolver o problema. Valeu pela ajuda, Kuroi! Até a próxima!
-
Fala, pessoal! Fiz a seguinte rotina: A Aplicação roda em dois Servidores diferentes. Então na página 1, é requisitado o Servidor Local (que pode ser serva/servb) e esta informação é enviada via Querystring para uma página no servc. Página 1 Na página 2, deve ser exibido o Menu relacionado ao Servidor da página anterior.Então, criei uma Session para armazenar este valor e criei um IF para inserir o menu correto: Página 2 O problema é que não importa qual dos dois servidores foi requisitado, o IF, sempre segue para o ELSE, ou seja, em ambas as páginas exibe o "Menu_servb.asp". Já dei Response.write para verificar se o nome do Servidor estava correto e estava. Inseri o "menu_Serva" no Else para ver se o problema estava no include, mas não estava. O que eu faço agora?
-
Ok! Entendi e já corrigi! Ouvi dizer que eu posso utilizar o bufferedreader para ler as variávies e dei uma pesquisada na NET. Eu poderia fazer desse jeito: InputStreamReader valor; BufferedReader a; BufferedReader b; valor = new InputStreamReader(); a = new BufferedReader(valor); valor = new InputStreamReader(); b = new BufferedReader(valor);
-
Conseguir fazer isso a mão. Não rodei pois não possuo nenhum software em casa. Estou no caminho certo?
-
fala, pessoal! Estou iniciando com Java e fui solicitado a criar uma rotina que leia duas variáveis e após informar o operador aritmético, executar o cálculo. A lógica eu entendi, mas como eu faço isso em Java??? Se alguém puder me ajudar ficarei imensamente grato! Abc
-
Micheus, Obrigado mesmo pela informação. Ela já me deu uma luz! O que eu fiz, então: * Criei um arquivo .txt chamado "teste" * Fui em variáveis do sistema, criei uma variável de nome "teste", que aponta para o diretório onde eu inseri o arquivo teste.txt. * Alterei as referências do código, referente a "'Variavel_Ambiente_JOB'" e substituí por teste. E funcionou!!!!!! Esta questão está resolvida! Caso haja outras subseqüentes, voltarei outra vez! Abc e fica com Deus!
-
Sou novo na área e fui solicitado a alterar uma aplicação Delphi. Para testá-la, fiz uma cópia da mesma para um Servidor de Teste, e automaticamente eu deveria alterar a aplicação para se conectar a ele. A conexão com o Banco é feita na varíavel de ambiente, mas como eu troquei a aplicação de Servidor, eu não a encontro! Desta forma, eu não consigo alterar a conexão e não tenho como testar. Gostaria de saber como eu faço para criar uma nova e fazer a chamada a ela, ou como descobrir onde está localizada a existente... function Configuracao.CarregarDados: Boolean; var arqConfig:TStringList; temp:String; cont:Integer; func:Funcoes; retorno:Boolean; //Valor do retorno da função (se carregou os dados com sucesso ou não) begin retorno := True; arqConfig:= TStringList.Create; try //Lendo a variável do ambiente com o diretório do arquivo de configuração temp := GetEnvironmentVariable('Variavel_Ambiente_JOB'); arqConfig.LoadFromFile(temp); //Lendo os dados do arquivo de configuração for cont := 0 to arqConfig.Count - 1 do //Lendo a connection string if (AnsiContainsText(arqConfig[cont], '#CONN_STRING#') = True) then begin temp := arqConfig[cont]; temp := AnsiReplaceText(temp, '#CONN_STRING#', ''); self.connString := temp; end //Lendo o número de dias para varredura else if (AnsiContainsText(arqConfig[cont], '#NUM_DIAS#') = True) then begin temp := arqConfig[cont]; temp := AnsiReplaceText(temp, '#NUM_DIAS#', ''); func := Funcoes.Create; if (func.IsInteger(temp) = True) then self.numDias := StrToInt(temp); func.Destroy; end //Lendo o endereço da fila else if (AnsiContainsText(arqConfig[cont], '#END_FILA#') = True) then begin temp := arqConfig[cont]; temp := AnsiReplaceText(temp, '#END_FILA#', ''); self.endFila := temp; end //Lendo o diretório do arquivo de erros else if (AnsiContainsText(arqConfig[cont], '#DIR_ERRO#') = True) then begin temp := arqConfig[cont]; temp := AnsiReplaceText(temp, '#DIR_ERRO#', ''); self.DiretorioArqErro := temp; end else begin Writeln(''); Writeln('-- ERRO: Existem informacoes erradas no arquivo de configuracao.'); retorno := false; end; except on e:exception do begin Writeln(''); Writeln('-- ERRO: Ocorreu um erro quando o sistema tentava ler o arquivo de configuracoes.'); Writeln('-- MSG: ' + e.Message); retorno := false; Halt(1); end; end; result := retorno; end; A Variável de Ambiente contém os seguintes dados: #CONN_STRING#Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=BANCO_DE_DADOS;Data Source=SERVIDOR;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=USUARIO;Use Encryption for Data=False;Tag with column collation when possible=False #NUM_DIAS#3 #END_FILA#cotovia\private$\logtws #DIR_ERRO#C:\Temp\JOB_Erro.txt
-
Como o código é muito grande, vou inserir somente as partes que utilizam esta parte 1. Página do Form: <FORM name=""JobsMF"" id=""JobsMF"" action=""Result.asp"" method=post> INTERVALO DE HORAS entre : <input class=""textarea"" type=""text"" name=""H_INI"" id=""H_INI"" size=6 value="&StrValue("H_INI",4)&" > e: <input class=""textarea"" type=""text"" name=""H_FIM"" id=""H_FIM"" size=6 value="&StrValue("H_FIM",5)&" > IfNull("H_INI") IfNull("H_FIM") 2. Pagina de Functions: * Cria uma session para os camos textbox não nulos. Public Sub IfNull(Nome) If (Request.Form(""&Nome&"") <> "") Then Session(""&Nome&"") = Trim(Request.Form(""&Nome&"")) Else Session.Contents.Remove(""&Nome&"") End If End Sub * Formata o campo, criando uma função de horas Public Function StrValue(nSession,op) Select case op case 4 StrValue = THora(CStr(Trim(Session(nSession))),1) case 5 StrValue = THora(CStr(Trim(Session(nSession))),2) End Select End Function * Função que trabalha com as horas, inserindo os campos não digitados (lembrando que, somente o case 2 não funciona) Public Function THora(PHora,opcao) Dim aux Dim conth Dim temp Dim hora Dim hFormat If (PHora <> "") Then conth = Len(PHora) aux = Split(PHora,":",-1) If (aux(0) = "24") then hora = "00" End If Select case conth case 8 If (aux(0) = "24") then hFormat = "00:"&aux(1)&":"&aux(2) Else hFormat = PHora End If case 5 If (aux(0) = "24") then hFormat = "00:"&aux(1)&":00" Else hFormat = PHora&":00" End If case 2 If (aux(0) = "24") then hFormat = "00:00:00" Else hFormat = PHora&":00:00" End If End Select Else If (opcao = 1) Then hFormat = "" Else hFormat = "23:59:59.997" End If End If THora = hFormat * Query (este é o trecho que usa esta parte) .... WHERE data_hora BETWEEN '"&Session("Data_Inicio")&" "&Session("H_INI")&"' AND '"&Session("Data_fim")&" "&Session("H_FIM")&"'" ** Não fui eu quem desenvolvi esta parte da aplicação, por isto estou tendo estes problemas. Uma vez, eu tentei criar uma session para receber o valor de THORA e enviar este valor para Query e não consegui. Pode ser este o problema... desde já agradecido
-
Amigos, Sou novo na área e possuo uma rotina (criada por outra pessoa) que cria nomes a partir de outros. Ex: **Arquivo: OPCMASTER#C01DAAE98661D0C0.J_002_A-07-025 {LENDO DADOS DO ARQUIVO DE LOG - CABEÇALHO} while (indice <= arquivo.Count - 1) do begin cont := cont + 1; linha := arquivo[indice]; if (cont = 2) then begin temp := AnsiRightStr(linha, length(linha) - LastDelimiter('_', linha)); temp := AnsiReplaceStr(temp, '-', '#'); temp := Trim(temp); self.SiglaSist := AnsiMidStr(temp, Pos('#', temp) + 1, LastDelimiter('#', temp) - Pos('#', temp)-1); modConn.querySelectIdAplic.Parameters.ParamByName('NomeAplic').value := temp; end ** Ao final deste trecho ele retorna dois valores: temp = A#07#25 Self.SiglaSist = 07 e grava no Banco. Ocorre que, surgiu um nome de arquivo maior que os comuns e por algum motivo o trecho está retornando um novo valor: OPCMASTER#C01D119C207A1280.J_002_A-07-025-POS9030 temp = A#07#25#POS9030 Self.SiglaSist = 07#025 (quando deveria ser somente 07). Gostaria de obter ajuda para fazer com que a rotina retorne o valor correto. Desde já agradecido.