Usuário com melhor resposta
Como pegar caracteres de acordo com linha ?

Pergunta
-
Boa tarde pessoal, estou criando um programa pra processar arquivos mas ele não obedece a um padrão de tabulação.
17:19:04 [CGS LIDJ408C3AF] Pedido de controle Fechar - LIDJ4-08 Cmd Abrir/Fechar [2] 17:19:05 [CGS LIDJ408C3AF] Sucesso resultado do controle supervisorio - LIDJ4-08 Cmd Abrir/Fechar [3 ADV]
Antes eu fazia assim:
descricao = linha.Substring(78, 12) descricao = descricao.TrimStart() descricao = descricao.TrimEnd()
Fazia com que eu pegava de uma determinada posição até certo tamanho, mas agora não obedecem a isso e a lista de arquivos é grande. Como faço para pegar por exemplo:
Se a linha tiver "Cmd", aí armarzena na variável de "Cmd" até "Fechar" ficando assim armazenado na variável só "Cmd Abrir/Fechar" e fazer o mesmo com "-" a partir do "-" armazenar até antes de "C" ou alguma variável q aparece. Fazendo os cortes com trimstart e trimend pra ficar só "LIDJ4-08" ?
Quem puder ajudar, desde já, agradeço!
Respostas
-
Realmente Filipe, acabei invertendo um sinal de - por +. Segue agora, acabei de testar:
Dim info1 As String = linha.Substring(linha.IndexOf("-")+1, linha.IndexOf("Cmd") - linha.IndexOf("-")-1).Trim() Dim info2 As String = linha.Substring(linha.IndexOf("Cmd"), linha.LastIndexOf("[") - linha.IndexOf("Cmd")).Trim()
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:33
- Não Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:33
- Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:38
-
Sim, explico.
Pra ficar mais simples, o meu código faz quase a mesma coisa que o seu fazia lá na sua pergunta, porém ao invés de eu fixar qual é o início e o tamanho da substring que eu quero, eu faço isso de forma dinâmica. O método IndexOf pega qual é a posição de determinado caractere dentro da string e essa função retorna um numero inteiro.
Por exemplo:
Dim nome As String = "Filipe" Dim posicao As Integer = nome.IndexOf("p")
Esse código, pega a posição da letra p dentro da string "Filipe". Nesse caso ele irá retornar o número 4 que é a posição (lembrando que começa a contar do 0)
Portanto tudo o que fiz no código foi operações para encontrar as posições dos caracteres que delimitavam o que você queria para poder ter a posição numérica deles e retornar apenas a parte que desejava.
Ficou mais claro?
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Marcado como Resposta Filipe Lobato quinta-feira, 24 de novembro de 2016 14:51
Todas as Respostas
-
Olá Filipe,
Realmente, trabalhar com arquivos não padronizados é bem ruim, tenta ver se assim te ajuda:
string info1 = linha.Substring(linha.IndexOf('-'), linha.IndexOf("Cmd") - linha.IndexOf('-')).Replace("-","").Trim(); string info2 = linha.Substring(linha.IndexOf("Cmd"), linha.LastIndexOf("[") - linha.IndexOf("Cmd")).Trim();
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Olá Filipe,
Realmente, trabalhar com arquivos não padronizados é bem ruim, tenta ver se assim te ajuda:
string info1 = linha.Substring(linha.IndexOf('-'), linha.IndexOf("Cmd") - linha.IndexOf('-')).Replace("-","").Trim(); string info2 = linha.Substring(linha.IndexOf("Cmd"), linha.LastIndexOf("[") - linha.IndexOf("Cmd")).Trim();
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_seccoObrigado pela dica, passei aqui para VB.NET ficou assim :
Dim linha As String = "17:36:52 [CGS LIDJ401C3AF] Pedido de controle Fechar - LIDJ4-01 Cmd Abrir/Fechar " Dim resultado, resultado2 As String resultado = linha.Substring(linha.IndexOf("-"), linha.IndexOf("Cmd") - linha.IndexOf("-")).Replace("-", "").Trim()
Imprimiu
LIDJ401
Só que é pra imprimir "LIDJ4-01" o único "-" a ser tirado é o antes do "L" basicamente tem que ser um código que sirva para as duas linhas. Pra ficar assim o valor das variáveis no final, por exemplo na 1ª linha:
variavel1 = "17:36:52" variavel2 = "[CGS LIDJ401C3AF]" variavel3 = "Pedido de controle Fechar" variavel4 = "LIDJ4-01" variavel5 = "Cmd Abrir/Fechar"
- Editado Filipe Lobato quarta-feira, 23 de novembro de 2016 19:59
-
Estava em C#, nem reparei que era VB, agora está em VB:
Dim info1 As String = linha.Substring(linha.IndexOf("-")+1, linha.IndexOf("Cmd") - linha.IndexOf("-")+1).Trim() Dim info2 As String = linha.Substring(linha.IndexOf("Cmd"), linha.LastIndexOf("[") - linha.IndexOf("Cmd")).Trim()
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco
- Editado André SeccoMVP quarta-feira, 23 de novembro de 2016 20:10
-
Atualizei, dá uma olhada agora na resposta acima
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco -
Vi aqui, está imprimindo:
LIDJ4-08 Cm
Tem que imprimir:
LIDJ4-08
Deixa eu te esclarecer também, o mesmo código que serve para a 1ª linha tem que servir para a 2ª. Não tem nenhuma propriedade que corte por exemplo:
De determinada posição do caractere até onde tiver o primeiro "-" ?
17:19:04 [CGS LIDJ408C3AF] Pedido de controle Fechar - LIDJ4-08 Cmd Abrir/Fechar [2]
-
Realmente Filipe, acabei invertendo um sinal de - por +. Segue agora, acabei de testar:
Dim info1 As String = linha.Substring(linha.IndexOf("-")+1, linha.IndexOf("Cmd") - linha.IndexOf("-")-1).Trim() Dim info2 As String = linha.Substring(linha.IndexOf("Cmd"), linha.LastIndexOf("[") - linha.IndexOf("Cmd")).Trim()
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:33
- Não Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:33
- Marcado como Resposta Filipe Lobato quarta-feira, 23 de novembro de 2016 22:38
-
Produziu o resultado que eu esperava ! haha Valeu
Senão for pedir demais, poderia me explicar a lógica desse código? Assim irei conseguir aplicar a outras exceções do arquivo. Não entendi como ele limita a string. Ou algum link, obrigado !
- Editado Filipe Lobato quarta-feira, 23 de novembro de 2016 22:53
-
Sim, explico.
Pra ficar mais simples, o meu código faz quase a mesma coisa que o seu fazia lá na sua pergunta, porém ao invés de eu fixar qual é o início e o tamanho da substring que eu quero, eu faço isso de forma dinâmica. O método IndexOf pega qual é a posição de determinado caractere dentro da string e essa função retorna um numero inteiro.
Por exemplo:
Dim nome As String = "Filipe" Dim posicao As Integer = nome.IndexOf("p")
Esse código, pega a posição da letra p dentro da string "Filipe". Nesse caso ele irá retornar o número 4 que é a posição (lembrando que começa a contar do 0)
Portanto tudo o que fiz no código foi operações para encontrar as posições dos caracteres que delimitavam o que você queria para poder ter a posição numérica deles e retornar apenas a parte que desejava.
Ficou mais claro?
Valeu!
Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!
André Secco
Microsoft MSP & MSDN Tech Advisor
Blog: http://andresecco.com.br
GitHub: http://github.com/andreluizsecco
Twitter: @andre_secco- Marcado como Resposta Filipe Lobato quinta-feira, 24 de novembro de 2016 14:51
-