Ir para conteúdo

POWERED BY:

Arquivado

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

asp.net

FSO Complicado

Recommended Posts

Pessoal estou trabalhando com um arquivo txt, de fechamento de chamados e estou com um grande problema que é o seguinte. O Layout do arquivo é este ai de baixo.

 

::::::::::::::Layout do arquivo:::::::::::::::::::::::::::::::::::::::::::

 

81TELEMATIC 20040311150200000000000000066570930000000000000051516510400000007352004031113300

01

820000000109HABILITAÇÃO/REMANEJAMENTO DE PONTO LOGICO OU TELEFONICO* (*) MATERIAIS INCLUSO: CONEC. RJ11 E RJ45 000100000000001300

820000000247INST. DE SOFT., UTILIZANDO FERR. DE CLON./INSTAL. DESASSIS., INCLUINDO TODAS A CONFIG. NECES. 000100000000002500

820000000246INST/DESINST/SUBST/CONFIG DE SOFTWARE 000200000000001200

820000000907DESLOCAMENTO REGIÃO 8 KM ( 0735/1028/7156JP ) 000200000000000400

83HABILITAÇÃO/REMANEJAMENTO DE PONTO LOGICO OU TELEFONICO* (*) MATERIAIS INCLUSO: CONEC. RJ11 E RJ45

83INST. DE SOFT., UTILIZANDO FERR. DE CLON./INSTAL. DESASSIS., INCLUINDO TODAS A CONFIG. NECES.

83INST/DESINST/SUBST/CONFIG DE SOFTWARE

83DESLOCAMENTO REGIÃO 8 KM ( 0735/1028/7156JP )

83Registrado por: MÓISES AIRES DA SILVA 'depois daqui as linhas são sobre a observação do técnico que tenho que identificar e colocar numa variável.

83Habilitado ponto lógico; Efetuada baixa de imagem, instalação do Internet Explorer 6 e Brazip. Testes Ok. Obs:chamado agendado p/ 10/03 conforme autorização 3592; houve demora na conclusão do chamado devido a imagem disponível no servidor da agênci

83a não estar OK, sendo necessário levar o equipamento à RESUT para conclusão do serviço.

990001300000000006700

 

O grande problema é nas linhas que começam com 83 que são as linhas que guardam tanto a natureza do chamado, como o técnico que atendeu, se ele teve deslocamento para atender o chamado,e ainda alguma observação que o tecnico coloque sobre o problema. As linhas 83 não são de números fixos, cada chamado tem um número específico de linhas começando com 83, mas sei que sempre depois da linha 83 que traz o nome do técnico que atendeu o arquivo me traz a observação colocada pelo técnico, ai o problema, como pegar esta linha para colocar numa variável. Abaixo está o Script para ler todo o arquivo e colocar as informações em variáveis específicas.

 

:::::::::::::::::::::::Script para gravação:::::::::::::::::::::::::::::::::::::::::::::::::::::

 

<!--#include file="conexao/conexao.asp"-->

<!--#include file="verificalogado.asp"-->

<%Dim caminho_arquivo, objetofso, objetopasta, nome_arquivo, cor, chamado, sql_fechamento, movendoarquivo, ano, mes, dia, hora, min, sec, contagem, observacao, observacao1

 

Function obs()

Objetotexto.SkipLine()

' texto = ObjetoTexto.Readline

Observacao = Observacao & Mid(Texto,3,248)

end function

observacao=""

xobs=""

if Request.QueryString("id")=1 then

' response.Write(Request.QueryString("chamado"))

' response.redirect("fechados.asp?chamados="&contagem)

 

'::::::::::::::::: Gravando no banco de dados :::::::::::::::::

sql_fechamento = "Insert Into fechamento(codigo, dtfechamento, tecnico, responsavel, dtimportacao)"

sql_fechamento = sql_fechamento & "values('"&Request.QueryString("chamado")&"','"&Date()&"','"&Request.QueryString("tecnico")&"','"&Session("usuario")&"','"&Date()&"')"

Satec.Open sql_fechamento

response.Redirect("pendentes.asp")

else

contagem=0

Server.ScriptTimeout = 200

Set objetofso = Server.CreateObject("Scripting.FileSystemObject")

Set objetopasta = objetofso.GetFolder("C:\Inetpub\wwwroot\satec\fatura\Fatura"&Session("pasta")&"\fechadas")

for each file in objetopasta.files

arquivo1=File.name 'nome do arquivo

if (Left(arquivo1,1) <> "F") and (Len(arquivo1) = 8) then

arquivo="C:\Inetpub\wwwroot\satec\fatura\Fatura"&Session("pasta")&"\fechadas\"+arquivo1 'caminho do arquivo

Set Objetotexto = Objetofso.OpenTextFile(arquivo)

while not Objetotexto.AtEndOfStream

texto = ObjetoTexto.Readline

if Left(texto,2)="81" then

 

Session("fc_fornecedor") = Mid(texto,3,40)

Session("fc_numerocaixa") = Mid(texto,57,20)

Session("fc_numerofornecedor") = Mid(texto,77,20)

Session("fc_agencia") = Right(Mid(texto,100,10),4)

 

':::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::Traba

lhando a data

Session("fc_dttermino") = Mid(texto,110,14)

ano = Left(Mid(texto,110,14),4)

mes = Mid(Mid(texto,110,14),5,2)

dia = Mid(Mid(texto,110,14),7,2)

hora = Mid(Mid(texto,110,14),9,2)

min = Mid(Mid(texto,110,14),11,2)

sec = Mid(Mid(texto,110,14),13,2)

Session("fc_dttermino") = dia+"/"+mes+"/"+ano+" - "+hora+":"+min+":"+sec

'response.Write(Session("fc_dttermino"))

'response.end()

Session("fc_status") = Mid(texto,124,1)

dtrepasse = Mid(Mid(texto,43,14),7,2) + "/" + Mid(Mid(texto,43,14),5,2) + "/" + Left(Mid(texto,43,14),4) + " - " +Mid(Mid(texto,51,6),1,2)+":"+Mid(Mid(texto,51,6),3,2)+":"+Mid(Mid(texto,51,6),5,2)

 

elseif Left(texto,2)="82" then 'Possivelmente tera mais de um servico utlizar um contador

 

'Session("fc_codigoservico"&i82&"") = Mid(texto,1,3)

'Session("fc_servico"&i82&"") = Right(Mid(texto,10,150),Len(Mid(texto,10,150))-3)

'Session("fc_qtservico"&i82&"") = Mid(texto,163,4)

'Session("fc_valor"&i82&"") = Mid(texto,167,14)

'i82=i82+1

 

sql_fechamento = "Insert Into servicos(codigo, nservico, quantidade, valor)"

sql_fechamento = sql_fechamento & "values('"&Session("fc_numerocaixa")&"','"&Mid(texto,3,10)&"','"&Mid(texto,163,4)&"','"&Mid(texto,167,14)&"')"

Satec.Open sql_fechamento

 

elseif Left(texto,2)="83" then 'Inserção da descrição do chamado, tecnico, e observacao

if Mid(texto,3,10) <> "Registrado" then

descricao = Mid(Texto,3,248)

else

Session("fc_tecnico") = Mid(texto,18,Len(texto)-18)

 

'Nesta parte eu verifico se a linha 83 que o fso está lendo é da descrição do chamado ou do técnico que atendeu, para isto eu faço uma comparação entre o Mid(texto,3,10) e a palavra Registrado, que indica o técnico que registrou, mas ai eu tenho que ver o seguinte, depois que ele pegar isto as linhas 83 seguintes serão as da observação, como pegar estas linhas e colocar numa variável?

 

'Aqui eu já começo a Ler o resto do arquivo que traz outro tipo de informação.

 

elseif left(texto,2)="99" then

Session("fc_total") = Mid(texto,8,21)

end if

wend

Objetotexto.close

 

'::::::::::::::::: Renomear arquivo :::::::::::::::::::::::::::

Set objetoarquivo = objetofso.GetFile(arquivo)

'Copiando arquivo para a pasta recebidass com o P na frente

movendoarquivo = "C:\Inetpub\wwwroot\satec\fatura\Fatura"&Session("pasta")&"\fechadas\F_"+arquivo1

Objetofso.Copyfile arquivo, movendoarquivo, true

Objetofso.DeleteFile arquivo

contagem = contagem + 1

 

'::::::::::::::::: Gravando no banco de dados :::::::::::::::::

sql_fechamento = "Insert Into fechamento(codigo, dtfechamento, tecnico, responsavel, valortotal, dtimportacao, nomearquivo, observacao, dtconferencia, resp_conferencia)"

sql_fechamento = sql_fechamento & "values('"&Session("fc_numerocaixa")&"','"&Session("fc_dttermino")&"','"&Trim(Session("fc_tecnico"))&"','"&Session("usuario")&"','"&Session("fc_total")&"','"&Now()&"','"&arquivo1&"','"&observacao&"','"&Now()&"','"&Session("usuario")&"')"

Satec.Open sql_fechamento

end if

next

response.redirect("fechados.asp?chamados="&contagem)

end if

Set objetopasta = Nothing

%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Existe algum texto que consiga diferenciar essas observações do resto?

Se sim você pode usar uma comparação usando o InStr

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para a linha que eu quero pegar não, ele começa com o codigo 83, o que eu tenho que fazer é o seguinte, depois que ele identificar a usuário que registrou ai sim a linha seguinte será a que contem a observacao, mas ai está o problema como fazer isto? e ainda depois eu tenho que voltar a ler normalmente para poder pegar o valor da linha 99 para finalizar o chamado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que entendi, o texto "83" se encontra no inicio de cada linha correto? A primeira abaixo da que contem a palavra "Registrado" é a que contém o comentário, daí até a linha que aparece o texto "99" no inicio dela correto?

Encontrar a palavra "Registrado" você já conseguiu correto?

 

Dê uma testada nisso:

if Mid(texto,3,10) <> "Registrado" then
descricao = Mid(Texto,3,248)
else
Session("fc_tecnico") = Mid(texto,18,Len(texto)-18)
While Not Left(Text,2)<>"83"
 Texto = Objetotexto.ReadLine
 TXT_Observacao = TXT_Observacao & Texto
Wend

Dê uma corrigida na sintaxe o FSO pois como fiz aqui de cabeça, sem testar, pode ser que tenha algo errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado, tem um problema que você não viu que é o seguinte: Antes da linha 83 com a palavra "registrado" existem linhas tambem começando com 83 que trazem a descrição do problema, se eu utilizar apenas este if que você fez, vou colocar a descrição do problema na observação. Eu consigo chegar na linha 83 que tem o tecnico, e logo depois desta linha é que tenho que pegar o valor e jogar na observacao, voltando depois para ler a linha 99 que finaliza o chamado entendeu? Sei que tenho que usar tipo um flag para dizer que foi achada a linha 83 com a palvra registrado, mas da maneira que testei não deu certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Asp.Net,

Repare que usei seu IF que pega a descrição e encontra o "Registrado", somente depois que ele encontra (dentro do mesmo ELSE) que comecei a pegar os dados da observação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salgado eu fiz assim:

 

if Mid(texto,3,10) <> "Registrado" then 'Quando ele ve que a linha não começa com registrado é porque está pegando a parte da descrição do problema.

descricao = Mid(Texto,3,248)

elseif xobs="1" then 'Agora quando ele verifica que a variaval xbos está com 1 ai sim passou pelo técnico e tem que jogar os valores dentro de observacao, coisa que não está acontecendo

Objetotexto.SkipLine()

Observacao = Observacao & Mid(Texto,3,248)

response.Write(observacao)

'response.End()

else

Session("fc_tecnico") = Mid(texto,18,Len(texto)-18)

xobs="1"

end if

Compartilhar este post


Link para o post
Compartilhar em outros sites

Par aqueles que estão acompanhando este tópico eu achei a solução.

 

if Mid(texto,3,10) <> "Registrado" and xobs="0" then

descricao = Mid(Texto,3,248)

elseif xobs="1" then

Objetotexto.SkipLine()

Observacao = Observacao & Mid(Texto,3,248)

response.Write(observacao)

else

Session("fc_tecnico") = Mid(texto,18,Len(texto)-18)

xobs="1"

end if

 

No caso bastou usar uma variável auxiliar que é a xobs, que eu seto para 1 depois do FSO ler a linha que começa com a palavra REGISTRADO.

 

Valeu pela ajuda de todos.

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.