Tengo un problema, necesito que mi programa lea un fichero y muestre solo una linea
El fichero que necesito leer tiene una estructura parecida a un archivo xml, pero tiene una extension distinta, por ejemplo:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<paramsfo add_hidden="false">
<param key="ACCOUNT_ID" fmt="utf8" max_len="16">e64a7aea5442c4a</param>
<param key="ATTRIBUTE" fmt="int32" max_len="4">0</param>
<param key="CATEGORY" fmt="utf8" max_len="4">SD</param>
Necesito que lea solo la linea "CATEGORY" y que me devuelva en este caso "SD"
Solo consigo que lea el fichero entero pero no una linea expecifica.
Se puede buscar esa linea por un string o por numero de linea, tengo comprobado que siempre es el mismo numero de linea.
Gracias de ante mano
Yo no se mucho sobre la estructura xml, xmnls, y esas variantes que existen, pero si no me equivoco al fin y al cabo todos son XML y se pueden leer las propiedades/atributos/nodos de la misma manera, repito, en caso de que no me esté equivocando, y en ese caso te puedes servir de las Classes de .NET para leer archivos XML.
De todas formas, por si las moscas, te enseño el modo de obtener el valor usando expresiones regulares:
Sub Main()
Dim str = <a><![CDATA[<param key="CATEGORY" fmt="utf8" max_len="4">SD</param>]]></a>.Value
Dim Value As String = _
System.Text.RegularExpressions.Regex.Match(str, "CATEGORY.+>(.*)<") _
.Groups(1).Value
Console.WriteLine(Value)
End Sub
saludos!
Cita de: EleKtro H@cker en 19 Octubre 2013, 15:52 PM
Yo no se mucho sobre la estructura xml, xmnls, y esas variantes que existen, pero si no me equivoco al fin y al cabo todos son XML y se pueden leer las propiedades/atributos/nodos de la misma manera, repito, en caso de que no me esté equivocando, y en ese caso te puedes servir de las Classes de .NET para leer archivos XML.
De todas formas, por si las moscas, te enseño el modo de obtener el valor usando expresiones regulares:
Sub Main()
Dim str = <a><![CDATA[<param key="CATEGORY" fmt="utf8" max_len="4">SD</param>]]></a>.Value
Dim Value As String = _
System.Text.RegularExpressions.Regex.Match(str, "CATEGORY.+>(.*)<") _
.Groups(1).Value
Console.WriteLine(Value)
End Sub
saludos!
No es exactamente lo que busco pero también me sirve, con eso solo extraigo el texto que hay entre los "> <", que es una parte de lo que necesito.
La otra parte es extraer solo una linea, el archivo completo tiene 14 lineas, que no son siempre iguales y yo necesito extraer una linea sin saber su contenido completo, se que siempre es la linea nº 13 y que contiene "key='TITLE'", pero no conozco el resto de la linea.
Lo primero seria extraer solo esa linea y después mostrar en contenido gracias al código que has mostrado antes.
El programa debe abrir el archivo buscar en el la linea que contenga "key='TITLE'" y mostrar su contenido
Gracias.
Para obtener la linea número 13 puedes usar este snippet de una función genérica que hice hace tiempo:
#Region " Read TextFile Line Function "
' [ Read TextFile Line Function ]
'
' Examples :
'
' MsgBox(Read_TextFile_Line("C:\File.txt", 1))
' Dim str As String = Read_TextFile_Line("C:\File.txt", 3)
Private Function Read_TextFile_Line(ByVal File As String, ByVal Line_Number As Long) As String
Dim Lines() As String = {String.Empty}
Dim Line_Length As Long = 0
Try
Lines = IO.File.ReadAllLines(File)
Line_Length = Lines.LongLength - 1
Return Lines(Line_Number - 1)
Catch ex As IO.FileNotFoundException
MessageBox.Show(String.Format("File not found: ""{0}""", _
File), _
Nothing, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Catch ex As IndexOutOfRangeException
MessageBox.Show(String.Format("Attempted to read line {0}, but ""{1}"" has {2} lines.", _
Line_Number, _
File, _
Line_Length + 1), _
Nothing, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Catch ex As Exception
Throw New Exception(String.Format("{0}: {1}", _
ex.Message, _
ex.StackTrace))
Finally
Lines = Nothing
Line_Length = Nothing
End Try
Return Nothing
End Function
#End Region
Saludos!
Cita de: EleKtro H@cker en 19 Octubre 2013, 16:06 PM
Para obtener la linea número 13 puedes usar este snippet de una función genérica que hice hace tiempo:
#Region " Read TextFile Line Function "
' [ Read TextFile Line Function ]
'
' Examples :
'
' MsgBox(Read_TextFile_Line("C:\File.txt", 1))
' Dim str As String = Read_TextFile_Line("C:\File.txt", 3)
Private Function Read_TextFile_Line(ByVal File As String, ByVal Line_Number As Long) As String
Dim Lines() As String = {String.Empty}
Dim Line_Length As Long = 0
Try
Lines = IO.File.ReadAllLines(File)
Line_Length = Lines.LongLength - 1
Return Lines(Line_Number - 1)
Catch ex As IO.FileNotFoundException
MessageBox.Show(String.Format("File not found: ""{0}""", _
File), _
Nothing, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Catch ex As IndexOutOfRangeException
MessageBox.Show(String.Format("Attempted to read line {0}, but ""{1}"" has {2} lines.", _
Line_Number, _
File, _
Line_Length + 1), _
Nothing, _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
Catch ex As Exception
Throw New Exception(String.Format("{0}: {1}", _
ex.Message, _
ex.StackTrace))
Finally
Lines = Nothing
Line_Length = Nothing
End Try
Return Nothing
End Function
#End Region
Saludos!
Perfecto!
era justo lo que necesitaba.
Muchas gracias