Saludos a todos, soy nuevo en este foro, espero me puedan ayudar con el siguiente problema:
Estoy trabajando en Visual Basic 2010 express, haciendo una aplicación con interfaz gráfica que lea los archivos comtrade (.cfg) y además los .dat, seleccionándolos desde un botón y abre el cuadro de diálogo de selección. El .cfg tiene el sig. formato:
FID=SEL-734-R202-V0-Z102102-D20100519,0,1999
400,8A,392D
1,IA(A),,,A,0.00000224,-1.12000000,0,0,999900,320.00,1,S
2,IB(A),,,A,0.00000242,-1.21000004,0,0,999900,320.00,1,S
3,IC(A),,,A,0.00000230,-1.14999998,0,0,999900,320.00,1,S
4,IN(A),,,A,0.00000010,-0.05000000,0,0,999900,320.00,1,S
5,VA(V),,,V,0.00022728,-113.63999939,0,0,999900,120.00,1,S
6,VB(V),,,V,0.00023149,-115.73999786,0,0,999900,120.00,1,S
7,VC(V),,,V,0.00022872,-114.34999847,0,0,999900,120.00,1,S
8,FREQ(Hz),,,Hz,0.00006002,0.00000000,0,0,999900,1 .00,1,S
1,FALARM,,,0
2,HARM02,,,0
3,HARM03,,,0
...
...
392,T07_LED,,,0
60
1
960,240
06/03/2012,12:44:49.958333
06/03/2012,12:44:50.025000
ASCII
1
Lo que hago es cuando me topo con varias comas (,,,) los reemplazo por ceros (por ahora), el caso es que mi código lee la primera línea, en la segunda guarda los 3 valores en un arreglo: de 400,8A,392D a 400,8,392, ya que el 8 será el número de filas de mi matriz, y las 392 serán las filas restantes el cual no usaré sino lo que le sigue:
60
1
960,240
06/03/2012,12:44:49.958333
06/03/2012,12:44:50.025000
ASCI
Mi código es el siguiente (pongo todo lo que tengo para que se entienda mejor):
'Option Explicit On
'Option Strict On
Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.IO
Public Class Form1
'Dim arreglo(500) As String
Dim arreglo2(500) As String
'CFG config
Dim array_2(2) As String
Dim analog_channel_inf(1, 12) As String
Dim filas_a_c As Integer = 0
Dim count_cfg As Integer
Dim count_dat As Integer
Dim split_cfg As String()
Dim split_dat As String()
Dim s As String = ""
Dim s_r As String = ""
Dim cuenta_com As Integer = 0
Dim cadena As String = ""
Dim n As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.txtFicheroCFG.Text = "C:\Documents and Settings\msanchez.L05621\Mis documentos\IIE\SEL\SEL-734 T3 52030 S.E. ALAMOS Mar 06 2012 12 44 50 25 37159.cfg"
Me.txtFicheroDAT.Text = "C:\Documents and Settings\msanchez.L05621\Mis documentos\IIE\SEL\SEL-734 T3 52030 S.E. ALAMOS Mar 06 2012 12 44 50 25 37159.dat"
End Sub
Private Sub btnExaminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExaminarCFG.Click
Dim oFD As New OpenFileDialog
With oFD
.Title = "Seleccionar fichero"
.Filter = "Ficheros de texto (*.txt;*.cfg)|*.txt;*.cfg" & _
"|Todos los ficheros (*.*)|*.*"
.FileName = Me.txtFicheroCFG.Text
If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
Me.txtFicheroCFG.Text = .FileName
End If
End With
End Sub
Private Sub BtnLeer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLeerCFG.Click
If System.IO.File.Exists(Me.txtFicheroCFG.Text) = False Then
MessageBox.Show("Debes indicar un fichero que exista", _
"Leer fichero", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
Me.listBoxCFG.Items.Clear()
Me.ListBoxResultCFG.Items.Clear()
Dim sr As New System.IO.StreamReader(Me.txtFicheroCFG.Text, System.Text.Encoding.Default, True)
count_cfg = 0
While sr.Peek() <> -1
s = sr.ReadLine()
's_r = Replace(s, ",,,", ",0,0,")
s_r = s
cuenta_com = cuenta_com + 1
If cuenta_com = 2 Then 'Si llega a la segunda linea
For n = 0 To Len(s_r) - 1 'Cuenta los caracteres de la segunda linea
split_cfg = s_r.Split(New [Char]() {","c}) 'Divide la linea por comas
For Each Me.s_r In split_cfg
If count_cfg = 3 Then
Exit For
ElseIf s_r.Trim() <> "" Then
If count_cfg = 0 Then
array_2(count_cfg) = s_r
Me.ListBoxResultCFG.Items.Add(array_2(count_cfg))
count_cfg = count_cfg + 1 'Contador incrementa a 1
ElseIf count_cfg = 1 Then
array_2(count_cfg) = s_r.Substring(0, 1)
Me.ListBoxResultCFG.Items.Add(array_2(count_cfg))
ReDim analog_channel_inf(CInt(array_2(1)) - 1, 12) 'Guarda el segundo valor de la segunda línea
count_cfg = count_cfg + 1 'Contador incrementa a 1
ElseIf count_cfg = 2 Then
array_2(count_cfg) = s_r.Substring(0, 3)
Me.ListBoxResultCFG.Items.Add(array_2(count_cfg))
count_cfg = count_cfg + 1 'Contador incrementa a 1
End If
End If
Next
Next n
End If
count_cfg = 0 'Cuenta columnas
If cuenta_com >= 3 And cuenta_com <= 2 + CInt(array_2(1)) Then 'A partir de la tercera línea hasta la última línea de la información de canales analógicos
For n = 0 To Len(s_r) - 1 'Cuenta los caracteres de la linea
split_cfg = s_r.Split(New [Char]() {","c}) 'Divide la linea por comas
For Each Me.s_r In split_cfg
If s_r.Trim() <> "" Then
If count_cfg <= 12 Then
analog_channel_inf(filas_a_c, count_cfg) = s_r 'Guarda en matriz el valor
Me.ListBoxResultCFG.Items.Add(analog_channel_inf(f ilas_a_c, count_cfg))
count_cfg = count_cfg + 1 'Contador incrementa a 1
End If
End If
Next
Next n
filas_a_c += 1
End If
If cuenta_com > CInt(array_2(0)) + 2 Then 'Si supera el número total de canales, mostrará la información restante del .cfg
Me.ListBoxResultCFG.Items.Add(s_r.Trim())
End If
Filas.Text = array_2(1)
Me.listBoxCFG.Items.Add(s)
End While
sr.Close()
'cuenta_com = 0
'filas_a_c = 0
'count_cfg = 0
's = ""
's_r = ""
End Sub
Private Sub btnExaminarDAT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExaminarDAT.Click
Dim oFD As New OpenFileDialog
With oFD
.Title = "Seleccionar fichero"
.Filter = "Ficheros de texto (*.txt;*.dat)|*.txt;*.dat" & _
"|Todos los ficheros (*.*)|*.*"
.FileName = Me.txtFicheroDAT.Text
If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
Me.txtFicheroDAT.Text = .FileName
End If
End With
End Sub
Private Sub BtnLeerDAT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnLeerDAT.Click
' Comprobar que existe
If System.IO.File.Exists(Me.txtFicheroDAT.Text) = False Then
MessageBox.Show("Debes indicar un fichero que exista", _
"Leer fichero", _
MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Exit Sub
End If
' Borrar el contenido previo de los controles
Me.ListBoxDAT.Items.Clear()
Me.ListBoxResultDat.Items.Clear()
Dim sr As New System.IO.StreamReader(Me.txtFicheroDAT.Text, System.Text.Encoding.Default, True)
' Leer el contenido mientras no se llegue al final
While sr.Peek() <> -1
' Leer una líena del fichero
s = sr.ReadLine()
s_r = Replace(s, ", ", ",")
cadena = s
For n = 0 To Len(cadena) - 1
If cadena.Chars(n) = "," Then
cuenta_com = cuenta_com + 1
Else
Continue For
End If
Next n
Me.ListBoxDAT.Items.Add(s)
split_dat = s_r.Split(New [Char]() {","c})
For Each Me.s_r In split_dat
If s_r.Trim() <> "" Then
ReDim arreglo2(0 To count_dat)
arreglo2(count_dat) = Trim(s_r)
'Me.ListBoxResultDat.Items.Add(count & ": " & arreglo2(count - 1))
Me.ListBoxResultDat.Items.Add(arreglo2(count_dat))
count_dat = count_dat + 1
End If
Next
CamposDAT.Text = "Campos: " & CStr(arreglo2.Length)
End While
sr.Close()
cuenta_com = 0
s = ""
s_r = ""
End Sub
End Class
Quiero que a partir de la tercera línea guarde las siguientes 8 filas en una matriz (el 8 puede cambiar) y para apoyarme muestro mis resultados en un listbox, sin embargo no queda.
Y después de que haya quedado eso, quiero guardar los valores que están al final de la línea: 392,T07_LED,,,0 en distintas variables. Pero ya me perdí.
Les agradecería su ayuda.