Jump to content

[Resolvido] ler linhas especificas em txt.


Drak_PT
 Share

Recommended Posts

Boas andava em busca de algo que eu possa usar para ler uma determinada palavra (valor) em arquivo de txt, achei este topico aqui: Clica Aqui

For Each arquivo As [string] In OpenFileDialog1.FileNames
			 For Each linha As String In File.ReadAllLines(arquivo)
				 ' Caso o conteúdo da linha inicie por N3
				 If linha.StartsWith("N3") Then
					 Dim nomeFicheiro As String = Mid(linha, 3, 50).Trim()
Dim hashFicheiro As String = Mid(linha, 53, 85)
					 ' Inserir na BD

Com ele leio o primeiro valor corretamente.

Mas como faço para procurar mais uma palavra para alem do N3?

Comprimentos Drak_PT

Edited by Drak_PT
Link to comment
Share on other sites

Obrigado mas ainda nao consegui fazer apresentar o valor do N4 em textbox2 😞

O N3 apresenta bem no textbox1 porem o segundo valor nao sei como fazer para apresentar no textbox2.

Link to comment
Share on other sites

Exemplo:

Para o primeiro textbox quero apresentar o valor que se encontra a vermelho.

BSSID : xx:xx:xx:xx:xx:xx

No textbox2 quero apresentar este.

ssid [0/1] admin state [down] oper state [down] ap pin [xxxxxxxx] wsc state [configured] pairing [idle] ap lock [off]

Pode haver outras formas de fazer isto mas ate agora nao encontrei nada 😞

Link to comment
Share on other sites

lol, tu tás a usar o método "StartsWith", o que pelo nome indica, só retornará true se a linha começar com "N3" e/ou "N4", se queres procurar se contêm na lnha toda usa o .Contains em vez disso.

  • Vote 1
Link to comment
Share on other sites

Sou mesmo noob nesta area 🙂

Mesmo assim so e apresentado o valor na primeira textbox1 ficando o textbox2 em branco.

o code que tenho atualmente é.

  For Each linha As String In File.ReadAllLines("user.ini")
		If linha.Contains("BSSID") OrElse linha.Contains("pin") Then

			Dim mac As String = Mid(linha, 27, 44)
			TextBox3.Text = mac

			Dim pin As String = Mid(linha, 57, 61)
			TextBox8.Text = pin
		End If
	Next
Edited by Drak_PT
Link to comment
Share on other sites

O pin fica situado em 3 linhas.

Os parametros que estou a passar para o MID estou a colocar onde começa o primeiro digito do pin ate ao ultimo. vejo isso usando o notepad++

ssid [0/0] admin state [up] oper state [up] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]
ap lock time [0s]
ssid [0/1] admin state [down] oper state [down] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]
ap lock time [0s]
ssid [0/2] admin state [down] oper state [down] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]

O ficheiro completo e este.

Username : *******
sumeo
Password : *******
********
------------------------------------------------------------------------
						 ______ Technicolor TG784n v3
					 ___/_____/\
				 /		 /\\ 10.2.1.L
			 _____/__	 / \\
		 _/	 /\_____/___ \ Copyright (c) 1999-2014, Technicolor
		 //	 / \	 /\ \
 _______//_______/ \	 / _\/______
 /	 / \	 \ / / /	 /\
__/	 / \	 \ / / /	 / _\__
/ /	 /	 \_______\/ / /	 / / /\
/_/______/___________________/ /________/ /___/ \
\ \	 \ ___________ \ \	 \ \ \ /
\_\	 \ /		 /\ \ \	 \ \___\/
 \	 \/		 / \ \ \	 \ /
 \_____/		 / \ \ \________\/
	 /__________/	 \ \ /
	 \ _____ \	 /_____\/
	 \ / /\ \ /___\/
		 /____/ \ \ /
		 \ \ /___\/
		 \____\/
------------------------------------------------------------------------
{sumeo}=>wireless wps config
wireless wps config
ssid [0/0] admin state [up] oper state [up] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]
ap lock time [0s]
ssid [0/1] admin state [down] oper state [down] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]
ap lock time [0s]
ssid [0/2] admin state [down] oper state [down] ap pin [12345678] wsc state [configured] pairing [idle] ap lock [off]
ap lock time [0s]
{sumeo}=>wireless ifconfig
wireless ifconfig
Admin State			 : enabled
Oper State			 : enabled
Network name (SSID)	 : Home
Public network (any) : enabled
Band				 : 2.4GHz
Channelwidth		 : 20 MHz
Channel				 : 6 [manual]
RTS Threshold		 : 2347
Short Retry Limit	 : 7
Long Retry Limit	 : 4
Beacon Period		 : 100
Rate				 : 19.5 Mbps
Interoperability	 : 802.11b/g/n
Frame Aggregation	 : ampdu
Protection			 : auto
Protection Mode		 : ctstoself
Protection Trigger	 : local&overlap
Shortslot			 : auto
Framebursting		 : enabled
Regulatory Domain	 : Europe
Rate Set			 : 1(b) 2(b) 5.5(b) 6 9 11(b) 12 18 24 36 48 54
Dtim interval		 : 3 (every 300 msec)
BSSID				 : xx:xx:xx:xx:xx:xx
Interference Mode	 : auto
Interference ChannelList: 1 2 3 4 5 6 7 8 9 10 11 12 13
Short Guard Time	 : disabled
Cyclic Delay Diversity : disabled
Space Time Block Coding : disabled
Restrict N Rates in WEP/TKIP mode : enabled
{sumeo}=>
Edited by Drak_PT
Link to comment
Share on other sites

Dim words() = {"BSSID", "pin"}

 For Each str As String In File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "teste.txt"))
	 Dim bssidInt As Integer = str.IndexOf(words(0), StringComparison.Ordinal) 'returns above 0 if string exists

	 If bssidInt <> -1 Then 'Checks if string was found, if it returns -1 it's not found
		 str = str.Remove(bssidInt, words(0).Length) 'Removes the bssid string from the line
		 Debug.WriteLine(str.Trim.Remove(0, 2)) 'Trims the spaces and removes the remaining ": " on the string
	 End If

	 Dim pinInt As Integer
	 pinInt = str.IndexOf(words(1), StringComparison.Ordinal) 'returns above 0 if string exists

	 If pinInt <> -1 Then 'Checks if string was found, if it returns -1 it's not found
		 pinInt += words(1).Length + 2 '+2 because of the space and the bracket you got.
		 Debug.WriteLine(str.Substring(pinInt, 8)) 'gets a string from the line starting when 'pin' string ended +2 as explained above and retrieving 8 characters from there.
	 End If
 Next

Comentei-te o melhor possível na minha opinião, isto encontra-me isto:

9RJbbKj.png

Que acho que é o que pretendes.

Edit: Desculpa a demora!

Edited by He B Te My
Link to comment
Share on other sites

Sim funciona na perfeição.

Agora só tenho de conseguir entender todo este código para que futuramente venha a precisar de usar algo semelhante saber como usar estas funções.

Obrigado por todo o teu trabalho.

Edite: So uma duvida para o caso de ser preciso colocar também o valor de cor vermelha como deveria fazer?

Network name (SSID) : Home

Por exemplo este tem 4 letras mas outros podem conter ate 10 ou mais letras.

Edited by Drak_PT
Link to comment
Share on other sites

Se tiveres alguma dúvida em específico podes perguntar.

Duvida e mesmo so o que coloquei no edite anterior.

Edite: So uma duvida para o caso de ser preciso colocar também o valor de cor vermelha como deveria fazer?

Network name (SSID) : Home

Por exemplo este tem 4 letras mas outros podem conter ate 10 ou mais letras.

Link to comment
Share on other sites

Se for numa textbox não é possível, vais ter de usar uma richtextbox

http://stackoverflow.com/a/10587766/2990244 tens aqui exemplo em c#, para vb basta retirares os ";" no fim de cada linha nesse caso.

Resolvido:

Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
       Dim words() = {"BSSID", "pin", "(SSID)"}

       For Each str As String In File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "user.ini"))
           Dim bssidInt As Integer = str.IndexOf(words(0), StringComparison.Ordinal) 

           If bssidInt <> -1 Then 
               str = str.Remove(bssidInt, words(0).Length) 
               TextBox3.Text = (str.Trim.Remove(0, 2)) 
           End If

           Dim pinInt As Integer
           pinInt = str.IndexOf(words(1), StringComparison.Ordinal) 

           If pinInt <> -1 Then 
               pinInt += words(1).Length + 2 
               TextBox8.Text = (str.Substring(pinInt, 8)) 
           End If

           Dim SSIDInt As Integer
           SSIDInt = str.IndexOf(words(2), StringComparison.Ordinal) 

           If SSIDInt <> -1 Then 
               str = str.Remove(SSIDInt, words(2).Length) 
               TextBox2.Text = (str.Trim.Remove(0, 20))
           End If

       Next

Mesmo que tenho 4 ou 10 letras vai apresentar o valor correcto 🙂

Mais uma vez obrigado.

Edited by Drak_PT
Link to comment
Share on other sites

No último caso devias simplificar visto que queres remover a palavra antes do SSID, ou seja, ou procuras por "Network name (SSID)" e apenas substituis em cima, ou substituis nesta linha:

str = str.Remove(0, words(2).Length) '0 porque queres remover tudo antes de SSID
Textbox2.Text = str.Trim.Remove(0,2) 'Trims the spaces and removes the remaining ": " on the string

Já agora, os comentários são para ajudar no código, se fizeres alterações, convêm que alteres os comentários ou não os copies de todo, a parte que tu escreves-te têm os comentários que não ajudam ao código na parte de '+2' pelo menos porque fui eu que os escrevi para cada caso no exemplo acima.

São coisas que não são prioridade mas eu gosto de fazer as coisas em condições... só um conselho.

Desculpa ter escrito os comentários em inglês caso não percebas, mas eu estou habituado e nem reparei no fórum que estava XD

Edit: Este post ficou bugado n sei porquê, já está direito.

Edited by He B Te My
Link to comment
Share on other sites

Alterei os comentário em cima para português para ver se tu percebes melhor (também não sou Ás em explicar mas...)

Dim words() = {"BSSID", "pin"}

	 For Each str As String In File.ReadAllLines(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "teste.txt"))
			 Dim bssidInt As Integer = str.IndexOf(words(0), StringComparison.Ordinal) 'retorna acima de 0 se a string existir em 'str'

			 If bssidInt <> -1 Then 'Verifica o retorno acima feito, se for -1 não foi encontrado
					 str = str.Remove(bssidInt, words(0).Length) 'Remove a bssid string de 'str'
					 Debug.WriteLine(str.Trim.Remove(0, 2)) 'apara/remove os espaços iniciais e finais da string e remove depois a string ": " que falta
			 End If

			 Dim pinInt As Integer
			 pinInt = str.IndexOf(words(1), StringComparison.Ordinal) 'retorna acima de 0 se a string existir em 'str'

			 If pinInt <> -1 Then 'Verifica o retorno acima feito, se for -1 não foi encontrado
					 pinInt += words(1).Length + 2 '+2 por causa do espaço e parenteses recto que tu tens dentro da string (no teu ficheiro)
					 Debug.WriteLine(str.Substring(pinInt, 8)) 'obtêm uma string dentro de str começando onde a string 'pin' acabou (linha acima) +2 e acabando em 8 caractéres apartir daí, ou seja, desde o indíce 'pinInt' + 7 caractéres
			 End If

Já agora, vê o Edit no meu post anterior, por alguma razão ele ficou desformatado antes...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.