Visual Basic.NET - Escribir en archivo txt en una línea específica

 
Vista:
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 03/05/2020 11:14:22
Buenos días,

Estoy intentando hacer un código en el que cuando cierre la aplicación me escriba en un archivo txt en la línea 40 la suma de todo el contenido de las lineas 1 a 30. Un ejemplo:
linea 1 - 2
linea 2 - 4
linea 3 - 6


Linea 40 - 12

Tengo el código para escribir pero no para elegir la línea donde escribir. En este ejemplo sólo escribe en la linea 1 y 2

Necesitaría crear un bucle que lea las líneas hasta llegar a la línea 40 y ahí escribir lo que quiero.

Cree estas las dos líneas de abajo con el propósito de crear un bucle pero no puedo cuando coloco objReader.close() me da un fallo de que el archvo está siendo utilizado.

1
2
'Dim objReader As New StreamReader(StrFileInformes)
Dim sLine As Integer = ""

Este el código que tengo de momento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Private Sub rellenarLog()
    Dim mes As String = Now.Month
    Dim Año As String = Now.Year
    Dim strInforme As String = "%AppData%\Ascii\Informes\" & Año & "\"
    Dim strInformeENV As String = Environment.ExpandEnvironmentVariables(strInforme)
    Dim StrFileInformes As String = strInformeENV & mes & ".log"
 
    'Pass the file path and the file name to the StreamWriter constructor.
    Dim objStreamWriter As New StreamWriter(StrFileInformes)
    'Dim objReader As New StreamReader(StrFileInformes)
    Dim sLine As Integer = ""
 
    objStreamWriter.WriteLine("test1")
 
    objStreamWriter.WriteLine("test2")
 
 
 
    'Close the file.
    objStreamWriter.Close()
 
End Sub

Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Escribir en archivo txt en una línea específica

Publicado por Nacho (56 intervenciones) el 03/05/2020 13:46:00
Cuando cierras un archivo marca como el final de ese archivo donde esté en ese momento el puntero. Si escribes en la línea 40, todo lo que haya después lo borrará, si no mueves el puntero. Lo más fácil es cargar el archivo entero en un TexBox multiline, por ejemplo, escribes lo que quieras donde quieras, y grabas TextBox entero.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 03/05/2020 14:55:24
Hola Nacho no entiendo muy bien lo que me dices. La ultima línea del archivo será siempre la 40. Necesito recoger ese dato para hacer una media y realizar sumas. Esa línea ira modificándose cada día conforme al resultado de la suma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 03/05/2020 15:37:56
Creo que lo estoy consiguiendo. Pero estoy teniendo un problema con el array que no se porque se salta una linea

El archivo dice

1
2
3
4
5

El contador dice
1
2
3
4
5

el array guara

en la fila 0 - 1
en la fila 1 - 3
en la fila 2 - 5

Saltandose siempre un fila.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Dim mes As String = Now.Month
    Dim Año As String = Now.Year
    Dim strInforme As String = "%AppData%\Ascii\Informes\" & Año & "\"
    Dim strInformeENV As String = Environment.ExpandEnvironmentVariables(strInforme)
    Dim StrFileInformes As String = strInformeENV & mes & ".log"
    Dim contador As Integer
    Dim ParaMedia(31) As String
    Dim ParaTotal(41) As String
    Dim singleMedia As Integer
 
    Dim Sumatorio, Media, lineacontenido As Single
 
    ' Sacar media
    Dim myFileToRead As New System.IO.StreamReader(StrFileInformes, False)
    For contador = 1 To 31
 
        '[Lectura de datos desde archivo]
        ParaMedia(contador) = myFileToRead.ReadLine()
        If Not myFileToRead.ReadLine() Is Nothing Then
            singleMedia = Val(ParaMedia(contador))
        End If
        Sumatorio = Sumatorio + singleMedia
 
 
    Next contador
 
 
    myFileToRead.Close()
    LblCasos.Text = lineacontenido
    Media = Sumatorio / 5
    Lblmedia.Text = Media
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por Phil Rob (843 intervenciones) el 03/05/2020 15:41:36
Hola Jose,

No es posible de reemplazar un linea seleccionada en un fichero TXT. Este es posible con los ficheros Binary y los ficheros "relacionales".

Para arribar a este resultado con un fichero TXT, tienes que Copiar-Escribir-Copiar el TXT en un fichero temporal, y entonces, eliminar el fichero TXT y renombrar el temporal con el nombre del TXT.

Ejemplo, para reemplazar la linea 5 de un fichero llamado Carpeta.TXT :

Abrir (para escribir) un nuevo fichero llamado Carpeta.TMP
Abrir (para leer) el fichero Carpeta.TXT

Para cada linea de 1 hasta 4 :
Leer 1 linea en Carpeta.TXT
Escribir esta linea en Carpeta.TMP

Leer linea 5 en Carpeta.TXT (para nada hacer con)
Escribir la nueva linea 5 en Carpeta.TMP

Hasta el final de fichero Carpeta.TXT
Leer 1 linea en Carpeta.TXT
Escribir esta linea en Carpeta.TMP

Cerrar fichero Carpeta.TMP
Cerrar fichero Carpeta.TXT

Eliminar fichero Carpeta.TXT

Renombrar fichero Carpeta.TMP con Carpeta.TXT

Entonces, tienes el fichero Carpeta.TXT con la nueva linea 5.

...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 03/05/2020 16:11:22
Hola Phil,

La idea es buena. No me importa es cuestion de automatizar. Quise utilizar en vez un fichero txt o log, un archivo excel el problema es que hay que tener instalado un office.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por Phil Rob (843 intervenciones) el 03/05/2020 16:51:08
El fichero TXT es bien según el cantidad de "byte".
Con un fichero de algunas centenas lineas de 80 o 100 caracteres, este es rápido de copiar el fichero para reemplazar una linea.
Estos ficheros están fácil a programar y pueden ser leídos (y modificados) con NotePad.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 03/05/2020 19:04:17
He conseguido la lectura del fichero sin problemas, pero tengo el problema de la escritura.

Me da el siguiente error

Excepción no controlada del tipo 'System.IO.IOException' en mscorlib.dll

Información adicional: El proceso no puede obtener acceso al archivo 'C:\Users\joserodriguezan\AppData\Roaming\Ascii\Informes\2020\5.log' porque está siendo utilizado en otro proceso.

Creo se el porque pero no puedo conseguir solucionarlo.

Dado que lo que necesito es que el código lea el archivo para saber cual es la primera línea vacía en un rango de lineas. Y escribir en la siguiente.

No se si es posible hacer que lea y escriba en el mismo código.
Haber si alguien me puede hechar una mano.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Private Sub rellenarlog()
    Dim mes As String = Now.Month
    Dim Año As String = Now.Year
    Dim strInforme As String = "%AppData%\Ascii\Informes\" & Año & "\"
    Dim strInformeENV As String = Environment.ExpandEnvironmentVariables(strInforme)
    Dim StrFileInformes As String = strInformeENV & mes & ".log"
    Dim contador As Integer
    Dim lineas As Integer = 40
    Dim ParaMedia(lineas) As String
    Dim SumarLineas As Single = 0
 
 
    Dim objStreamWriter As New StreamWriter(StrFileInformes)
    Dim myFileToRead As New System.IO.StreamReader(StrFileInformes, False)
    Dim parar As Integer
 
    For contador = 1 To lineas
        ParaMedia(contador) = myFileToRead.ReadLine()
        If contador < 32 Then
            If ParaMedia(contador) > 0 Then
                parar = contador + 1
            End If
            If contador = parar Then
                objStreamWriter.WriteLine(NumericUpDown.Value)
            End If
        End If
        If contador = 40 Then
            valorMes = Val(ParaMedia(contador))
            valorMes = valorMes + NumericUpDown.Value
            objStreamWriter.WriteLine(valorMes)
        End If
 
    Next contador
    'myFileToRead.Close()
 
    'Close the file.
    objStreamWriter.Close()
 
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por Phil Rob (843 intervenciones) el 03/05/2020 19:20:47
No es posible de leer y escribir el mismo fichero.
Mas tarde en la noche, escribiré un ejemplo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por Phil Rob (843 intervenciones) el 03/05/2020 22:44:19
Hola,

Pienso que tu problema es de abrir el mismo fichero para leer y escribir.
En el algoritmo de mi mensaje anterior, he dicho de escribir un fichero temporal para eliminar esta dificultad.

He hecho un programa y lo adjunto para que puedes probar.

Miras la vidéo : https://www.dropbox.com/s/lhy3se3lzd7b21a/ModificarTXT.mp4?dl=0

Espero que este te ayudará
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Phil Rob
Val: 2.985
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por Phil Rob (843 intervenciones) el 03/05/2020 23:26:04
Atención, mis comentarios en el código no siempre bien escritos ...

Me he divertido un poco con este programa.

Mires la vidéo : https://www.dropbox.com/s/be9tjcae683s1dc/InsertarEnTxt.mp4?dl=0

Adjunto este proyecto, este puede te servir.

Buenas noches

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 05/05/2020 18:55:08
Hola Phil,

Muchas gracias por el esfuerzo. Aún no me ha dado tiempo a verlo. El trabajo prima por desgracia.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jose
Val: 56
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Escribir en archivo txt en una línea específica

Publicado por jose (33 intervenciones) el 09/05/2020 20:14:31
Muchas gracias Phil, ha funcionado correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar