Visual Basic.NET - Convertir array del 1 al 30 en dias de la semana

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

Convertir array del 1 al 30 en dias de la semana

Publicado por jose (33 intervenciones) el 09/05/2020 21:38:21
Buenas tardes,

Estoy haciendo una subrrutina que guarda en un archivo dos valores, uno un valor de un NumericUpDown.Value que lo guardará en la linea correspondiente al día del més. Ejemplo el día 10 lo escribirá el día 10.

El problema viene en que en otra subrrutina lee el archivo que guarda los valores de las líneas en un array y luego hace una suma, si está vació da error dado que el array es de tipo integer.

Estoy buscando la forma de que en un bucle rellene todos los fines de semana a 0. Lo he intentado con algo parecido a esto:

1
2
3
4
5
6
If Today.DayOfWeek = DayOfWeek.Saturday Or DayOfWeek.Saturday Then
    FicheroAEscribir.WriteLine(festivo)
Else
    LineaLeida = FicheroALeer.ReadLine  ' Lectura para nada hacer
    FicheroAEscribir.WriteLine(NumericUpDown.Value) ' Escribir la linea nueva
End If

Sin embargo en el bucle donde esta empieza en 1 y acaba en el día en el que estamos. Superando los días del 0 al 6, cuando el bucle llega a 7 el día de la semana empieza en 0.

Este es el código que tengo es el siguiente:

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
Private Sub rellenarlog()
    Dim dia As String = Now.Day
    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 LineaLeida As String = Nothing
    Dim NumeroLineaACambiar As Integer = 40
    Dim festivo As Integer = 0
    Dim contadorDias As Integer = 1
 
    Dim FicheroALeer As System.IO.StreamReader
    Dim FicheroAEscribir As System.IO.StreamWriter
 
    FicheroALeer = New System.IO.StreamReader(StrFileInformes, System.Text.Encoding.Default)
 
    FicheroAEscribir = New System.IO.StreamWriter(StrFileInformes & "TMP", False, System.Text.Encoding.Default)
 
 
    ' Escribe en la ultima linea vacia correspondiente al día del mes el 1 al 31
 
    For L As Integer = 1 To dia - 1
 
        LineaLeida = FicheroALeer.ReadLine
        FicheroAEscribir.WriteLine(LineaLeida)
        '### AÑADIR O A TODOS LOS DÍAS SABADOS Y DOMINGOS ENTRE EL DÍA 1 AL DÍA DE HOY
                    'If days = DayOfWeek.Saturday Or DayOfWeek.Sunday Then
                            'FicheroAEscribir.WriteLine(festivo)
                    'End If
        '#######
        'If diasSemanas.DayOfWeek = DayOfWeek.Saturday OrElse diasSemanas.DayOfWeek = DayOfWeek.Sunday Then
 
        contadorDias += 1
    Next
    ' Cuando sea Sábado o Domingo escribirá 0
    If Today.DayOfWeek = DayOfWeek.Saturday Or DayOfWeek.Saturday Then
        FicheroAEscribir.WriteLine(festivo)
    Else
        LineaLeida = FicheroALeer.ReadLine  ' Lectura para nada hacer
        FicheroAEscribir.WriteLine(NumericUpDown.Value) ' Escribir la linea nueva
    End If
    'Poner suma total
    contadorDias = contadorDias + 1
 
 
 
    For L As Integer = 1 To NumeroLineaACambiar - contadorDias '7 el numero leido
 
        LineaLeida = FicheroALeer.ReadLine
        FicheroAEscribir.WriteLine(LineaLeida)
 
 
    Next
    LineaLeida = FicheroALeer.ReadLine  ' Lectura para nada hacer
    Dim ValorActualMes As Integer = NumericUpDown.Value + valorMes
    FicheroAEscribir.WriteLine(ValorActualMes)
 
 
    ' Copiar el resto de las lineas del fichero temporal al nuevo archivo log
    Do Until FicheroALeer.Peek = -1
        LineaLeida = FicheroALeer.ReadLine
        FicheroAEscribir.WriteLine(LineaLeida)
    Loop
 
    'Close the file.
    FicheroAEscribir.Close()
    FicheroAEscribir.Dispose()
    FicheroALeer.Close()
    FicheroALeer.Dispose()
    valorMes = ValorActualMes
    ' Eliminar el fichero incial
    System.IO.File.Delete(StrFileInformes)
    ' Renombrar el fichero nuevo
    System.IO.File.Move(StrFileInformes & "TMP", StrFileInformes)
 
 
End Sub

Gracias,
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
Imágen de perfil de melqui
Val: 643
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Convertir array del 1 al 30 en dias de la semana

Publicado por melqui (242 intervenciones) el 09/05/2020 21:51:22
use o try para tratar el error, otra cosa, si quieres que comienze a contabilizar de 0 tienes que contadorDias estar =0
no apliques solamente la declaracion de tus variavels sin tratar tus errores en la fuente.
use el try
que te va ayudar mucho
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: 3.353
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Convertir array del 1 al 30 en dias de la semana

Publicado por Phil Rob (1554 intervenciones) el 10/05/2020 08:55:52
Hola,

No tengo tiempo ahora para estudiar tu programa pero veo un error a la primera linea :

1
2
3
4
5
6
If Today.DayOfWeek = DayOfWeek.Saturday Or DayOfWeek.Saturday Then
    FicheroAEscribir.WriteLine(festivo)
Else
    LineaLeida = FicheroALeer.ReadLine  ' Lectura para nada hacer
    FicheroAEscribir.WriteLine(NumericUpDown.Value) ' Escribir la linea nueva
End If

Para escribir este código correctamente, tienes que escribir :

1
2
3
4
5
6
If Today.DayOfWeek = DayOfWeek.Sunday Or Today.DayOfWeek = DayOfWeek.Saturday Then
        FicheroAEscribir.WriteLine(festivo)
Else
        LineaLeida = FicheroALeer.ReadLine  ' Lectura para nada hacer
        FicheroAEscribir.WriteLine(NumericUpDown.Value) ' Escribir la linea nueva
End If

También veo que utilizas ToDay que es la fecha del día pero trabajas con informaciones que están en fichero ... es normal ?

Que tenga un buen día
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: 42
Ha aumentado su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Convertir array del 1 al 30 en dias de la semana

Publicado por jose (33 intervenciones) el 10/05/2020 12:02:36
Hola Phil,

Si es normal, viene a decir que si el día de hoy es sábado o domingo, Caso que se abra la aplicación en fin de semana, se guarde como 0.

Pero preferiría que fuese más automático en un bucle. Así de esa forma elimino esa parte del código If Today.DayOfWeek = DayOfWeek.Sunday Or.....
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