Ir para conteúdo

POWERED BY:

Arquivado

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

Claudio Neto

Trabalhando com notepad

Recommended Posts

Tenho o seguinte código:

 

Dim fso As Scripting.FileSystemObjectDim ts As Scripting.TextStreamDim a As StringDim b As StringDim c As IntegerDim d As StringSet fso = New Scripting.FileSystemObjectSet ts = fso.OpenTextFile("Scripts.inf", ForReading, True)Do While Not ts.AtEndOfStream	a = Mid(UCase(ts.ReadLine), 1, Len(cboVenda.Text)) 'a recebe o conteudo da linha	b = UCase(cboVenda.Text) 'b recebe a palavra que quero procurar	If a = b Then		Do While Not ts.AtEndOfStream			d = UCase(ts.ReadLine) 'mandei d receber o conteudo da linha para fazer algo onde a linha só é lida uma vez			c = c + Len(d) 'mandei c contar a quantidade de caracteres na linha para tentar trabalhar com isso depois			If d = "FIM" Then 'quando d for a FIM, não quero que leia mais				lblScript.Caption = ts.Read(c) 'Então mandei ler a quantidade de letras que c contou, mas ele vai contar a partir de fim pra frente, o que preciso fazer é ele voltar lá no começo e depois contar esses caracteres.				Exit Do			End If		Loop		Exit Do	End IfLoop

O que preciso fazer é o seguinte, tenho um arquivo chamado scripts.inf. Nesse arquivo tenho o scripts de vários produtos diferentes, então o código acima procura dentro desse arquivo a palavra solicitada (item que será escolhido na cboVenda.text)

 

Se for igual ( a = b ) ele vai pra próxima parte que está me dando trabalho.

 

O arquivo está da seguinte forma:

 

------------------------------------------------------------------------

Nome_Produto

 

Descrição:

 

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

 

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla blablabla

 

FIM

------------------------------------------------------------------------

 

Eu preciso fazer aparecer em uma label todo o conteúdo entre o Nome_Produto e FIM.

 

Só que está sendo difícil fazer isso, porque quando trabalha com notepad, a cada leitura de linha que ele faz, já passa para a próxima, não é preciso mandar passar, só que também, quando quero voltar, não consigo (pelo menos eu não estou conseguindo).

 

Alguém sabe se é possível fazer o que quero?

 

Muito obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você não faz algo nesse genero para ler esse arquivo.

Open "caminho e nome do arquivo" For Input As #1Do Until EOF(1)Line Input #1, Linhaif instr(linha,UCase(cboVenda.Text))> 1 then áchou o seu item      achou = trueend ifif achou then      if instr(linha,"FIM") > 1 then       achou = false      exit subend ifif achou then     des = des & linhaend ifLoopClose #1

acredito que isso possa resolver seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu Fernando, vou tentar.O que faz o instr()?E o que você quis dizer com if achou then? É só isso mesmo, não tenho que compará-lo com nada (if acho = true then)?Valeu, depois te digo o resultado.Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

pq você não faz algo nesse genero para ler esse arquivo.

Open "caminho e nome do arquivo" For Input As #1Do Until EOF(1)Line Input #1, Linhaif instr(linha,UCase(cboVenda.Text))> 1 then áchou o seu item	  achou = trueend ifif achou then	  if instr(linha,"FIM") > 1 then 	  achou = false	  exit subend ifif achou then	 des = des & linhaend ifLoopClose #1
acredito que isso possa resolver seu problema.
Então Fernando, não funcionou não, precisava entender o que faz o instr, porque na linha "if instr(linha,UCase(cboVenda.Text))> 1 then", nunca está dando que é maior, nunca acha, mesmo quando chega na linha certa.Valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom o instr verifica em que posição na string tem o texto procuradodai no meu codigo seria para quando isso fosse >= que 1 (muda para isso pq ñ tinha saido esse =), ou seja ele encontrou a string no meio de algum outro texto, mas isso inclui elas terem o mesmo formato, maiusculas e minusculas (talvez um ucase em ambas na hora de comparar resolva esse problema) dai o resto acredito que você tenha entendido, mas qqer duvida ou se funcionar avisa.vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom o instr verifica em que posição na string tem o texto procuradodai no meu codigo seria para quando isso fosse >= que 1 (muda para isso pq ñ tinha saido esse =), ou seja ele encontrou a string no meio de algum outro texto, mas isso inclui elas terem o mesmo formato, maiusculas e minusculas (talvez um ucase em ambas na hora de comparar resolva esse problema) dai o resto acredito que você tenha entendido, mas qqer duvida ou se funcionar avisa.vlw

Mais ou menos Fernando... ele até exibiu todo o conteúdo no intervalo que precisava, mas de uma forma meio ruim...Como no exemplo que dei, ele tem algumas linhas em branco entre uma frase e outra. Como fui adicinando tudo em des, ele foi colocando tudo em seguida, sem "enters". Ai ficou uma bagunça só...você conhece alguma maneira dele receber essas linhas puladas?Tipo, se ele conferir se a lina é "", não tem como enviar vbenter?Valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

como exatamente você está exibindo os dados deste texto, em uma textbox com multiline? caso sim acredito que ele deveria compreender isso pois quando ele identifica o caractere padrão do enter ele já modifica automatico, ma se não tenta

 

des = des & replace(linha,chr(13),vbenter)

não tenho certeza que vá funcionar, mas quanto ao teste que voc^ mencionou, tenta usar

 

if trim(linha) = "" thendes = des & vbenter

repito não testei nenhum dos codigos, mas acredito que resolva.

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

como exatamente você está exibindo os dados deste texto, em uma textbox com multiline? caso sim acredito que ele deveria compreender isso pois quando ele identifica o caractere padrão do enter ele já modifica automatico, ma se não tenta

des = des & replace(linha,chr(13),vbenter)
não tenho certeza que vá funcionar, mas quanto ao teste que voc^ mencionou, tenta usar
if trim(linha) = "" thendes = des & vbenter
repito não testei nenhum dos codigos, mas acredito que resolva.flw
Vou tentar o primeiro Fernando, o segundo eu já havia testado, e ele inclui 0 (zero) no meio do texto.Na verdade está aparecendo em um label, mas vou tentar então colocar em uma textbox com multiline para ver se dá certo.valeu...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nada, não adiantou, coloquei uma textbox com multiline e tentei das duas maneiras. Da primeira nada aconteceu, e da segunda deu a mesma de quando com a label (adicionou 0).

 

Da maneira que eu estava fazendo consegui uma possível solução, mas o código ficou muito feio, segue abaixo:

 

'Dim fso As Scripting.FileSystemObject'Dim ts As Scripting.TextStream'Dim a As String'Dim b As String'Dim c As Integer'Dim d As String''Set fso = New Scripting.FileSystemObject'Set ts = fso.OpenTextFile("Scripts.inf", ForReading, True)''Do While Not ts.AtEndOfStream'	a = Mid(UCase(ts.ReadLine), 1, Len(cboVenda.Text))'	b = UCase(cboVenda.Text)'	If a = b Then'		Do While Not ts.AtEndOfStream'			d = UCase(ts.ReadLine)'			c = c + Len(d)'			If d = "FIM" Then'				Exit Do'			End If'		Loop'		Exit Do'	End If'Loop''ts.Close'Set ts = fso.OpenTextFile("Scripts.inf", ForReading, True)''Do While Not ts.AtEndOfStream'	a = Mid(UCase(ts.ReadLine), 1, Len(cboVenda.Text))'	b = UCase(cboVenda.Text)'	If a = b Then'		lblScript.Caption = ts.Read(c + 50)'		Exit Do'	End If'Loop''ts.Close''c = Len(lblScript.Caption)

Sò que ainda dá um probleminha, repare que quando mandei ele ler pela quantidade de caracteres (lblScript.Caption = ts.Read(c + 50)) coloquei c + 50. Fiz isso porque, não sei porque, ele não estava exibindo a quantidade correta, cortava algumas últimas palavras. Ai coloquei + 50, só que isso é meio vago, pq não sei se sempre 50 vai resolver, pode ser que as vezes entre palavras do próximo produto e as vezes pode ser que nem chegue (eu acho).

 

Sem falar que tiver que fechar a conexão com o arquivo e abri-la novamente, ficou horrível. Então se ainda conseguir pensar em alguma outra coisa, estarei aceitando sugestões.

 

Obrigado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

achei uma forma de fazer exatamente isso que você quer e segue o codigo....

 

Private Sub Form_Load()'depois é só alterar a origem o arquivo de texto'o text1 deve estar com multiline ativoText1.Text = AbreArquivo("C:\Texto.TXT")End SubFunction AbreArquivo(sArquivo As String) As String  Dim iARQ As Integer  Dim sLinha As String  Dim sResult As String  iARQ = FreeFile  Open sArquivo For Input As iARQ  Do While Not EOF(iARQ)	'Pega o conteúdo da linha	Line Input #iARQ, sLinha	'Quebra a linha e concatena (soma) o resultado	sResult = sResult + Chr(13) & Chr(10) + sLinha  Loop  AbreArquivo = sResult  'Fecha o arquivo  Close iARQEnd Function

flw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dim iARQ As IntegerDim sLinha As StringDim sResult As StringDim achou As DoubleiARQ = FreeFileOpen sArquivo For Input As iARQDo While Not EOF(iARQ) 'Pega o conteúdo da linha Line Input #iARQ, sLinha If InStr(UCase(Mid(sLinha, 1, Len(cboVenda.Text))), UCase(cboVenda.Text)) >= 1 Then 'achou o seu item achou = TrueEnd IfIf achou Then If InStr(sLinha, "FIM") >= 1 Then achou = False Exit Do End IfEnd IfIf achou Then 'Quebra a linha e concatena (soma) o resultado sResult = sResult + Chr(13) & Chr(10) + sLinhaEnd IfLoopAbreArquivo = sResult'Fecha o arquivoClose iARQFernando, agora foi... Muuuuuuito obrigado mesmo, fiz um mix das funções que você me passou e deu tudo certo agora.Me ajudou muito mesmo, que Deus te abençoe...Abraços...

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.