elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: [1] 2 3 4
1  Programación / .NET (C#, VB.NET, ASP) / Re: Leer archivo txt y validar estructura en: 25 Febrero 2016, 14:52 pm
Epale Elektro;

Gracias por la información amigo.

El año pasado me diste una enorme ayuda con un utilitario que me ayudaste a desarrollar cuyo objetivo es el de tomar unos txt y empaquetarlos; ahora tengo que incluir en este una función para verificar cada txt; pero ocurre que pueden haber dos grupos de txt a verificar, dependiendo de la opción que indique el usuaior.

Te paso el paquete a ver donde me sugieres que deba colocar la verificarción del archivo antes de hacer todo el trabajo de fusión y empaquetado de los archivos.

Te adjunto el paquete:
https://www.dropbox.com/s/f06pdzxxov2bp3w/WindowsApplication6.rar?dl=0
2  Programación / .NET (C#, VB.NET, ASP) / Leer archivo txt y validar estructura en: 24 Febrero 2016, 22:46 pm
Saludos amigos,

Tiempo sin andar por acá.

En esta oportunidad vengo a hacerles una consulta; necesito hacer tres cosas:
1.- Leer la estructura de un archivo txt cuyos campos están separados por punto y coma.
2.- Leer cada campo del registro y validar si el campo tiene datos o está vacio, si tiene valores numericos cuando debe ser alfanumericos.
3.- Si encuentra errores en los registros ir guardandolos en otro txt y al fina dar un resumen, es decir, se procesaron X registros los cuales Y tienen errores e indicar cada registro con su error al lado

Alguien podría darme una mano con esto?

Gracias mil desde ya.

3  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 19 Noviembre 2015, 16:42 pm
RESUELTO...!!!!  :laugh: ;-) :silbar: ::)

Encontré la solución...

Explicación:

El problema era que en la definición de la variable directories; el primer parametro que el metodo SelectDirectories recibe es el sourcedir (directorio origen) y yo le estaba pasando dateDir (directorio destino) entonces pues se generaba un conflicto y el metodo no generaba la lista de los días y se generaba la variable vacía.

La solución fue utilizar el valor del SelectedPath y voilà caso resuelto.
La definición quedaría de la siguiente manera:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(Me.fdg.SelectedPath, Me.year, monthNumber, DateUtil.DirNameFormat)

Sigo trabajando....

Gracias mil...!
4  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 16 Noviembre 2015, 14:58 pm
Saludos amigo,

Gracias mil por la acotación creo que mezcle peras con manzanas.

Voy a dividir las dudas en función de la manera como se puede llamar al método MoveDateDirectories
1.- Mensual:
La definición o declaración de la variable sería:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(dateDir, Me.year, monthNumber, DateUtil.DirNameFormat)
El llamado al metodo sería:
Código
  1. MoveDirectories(directories, dateDir)
  2.  

Pero al hacer debuging y evaluar los resultados, el metodo no está moviendo las carpetas, revisando mas a fondo encuentro que al evaluar la variable directories esta emite un mensaje que reza: Empty = "La enumeración no produjo ningún resultado".


2.- Semanal:
La definición o declaración de la variable sería:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(InitialDate.Day, differenceInDays), DateUtil.DirNameFormat)
El llamado al metodo sería el mismo que el mensual:
Código
  1. MoveDirectories(directories, dateDir)

Preguntas:
a.- Porque la variable directories tiene ese mensaje de error?

b.- Donde y para qué se colocaría la declaración de:
Código
  1. Public Shared targetDirInfo As DirectoryInfo
  2. Public Shared dirInfo As DirectoryInfo
  3.  

Desde ya mil gracias brother. :laugh:

Un abrazo y el mejor de los días para todos....

5  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 12 Noviembre 2015, 17:28 pm
Saludos,

Me puse a estudiar el metodo Enumerable.Range y me día cuenta que lo que decía antes era un soberano disparate pues el range utiliza el valor del día de la fecha inicial (para mi caso especíifico) y el segundo valor es la cantida de días; es decir; que si la fecha de inicio es 01-11-2015 y la fecha fin es 12-11-2015; entonces el primero valor será el 1 y el segundo valor será el 11.

Esto significa que debo sacar una operación matematica pra calcular la diferencia.

Código
  1. Dim InitialDate As Date = DTPSince.Value
  2. Dim FinalDate As Date = DTPUntil.Value
  3. Dim tspan As TimeSpan
  4. Dim differenceInDays As Integer
  5. tspan = InitialDate - FinalDate
  6. differenceInDays = tspan.Days
  7.  

Una vez obtenido esto la definición de la variable directories sería:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(InitialDate.Day, differenceInDays))
  2.  

Pero me sigue dando error de IEnumerable (Of Integer) to String.

Que estoy haciendo mal? :-\
6  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 9 Noviembre 2015, 22:53 pm
Saludos;

1.-  
Código
  1. Enumerable.Range(inicio, fin)

Donde inicio y fin son el valor del DateTmePiker que seleccionó el usuario.

Sería algo como:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(Me.DTPSince.Value, Me.DTPUntil.Value))
  2.  

Pero dado que el valor que espera el método Enumerable es un entero y el valor que tiene el objeto DTPSince es un string hay que hacer la conversión, que inicialmente sería con esto:

Código
  1. Convert.ToInt32(DTPUntil.Value.ToString("yyyyMMdd"))

Es esto correcto?

Así quedaría la definición de la variable:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(Convert.ToInt32(DTPSince.Value.ToString("yyyyMMdd")), Convert.ToInt32(DTPUntil.Value.ToString("yyyyMMdd"))))
  2.  

2.- La definición de la variable sería entonces asi:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(dateDir, Me.year, monthNumber, DateUtil.DirNameFormat)


Como quedaría el llamado al metodo?

Pues he intentado con la variable targetDirInfo y dirInfo pero  me está dando error de no declarado o inaccesible.

Gracias!
7  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 9 Noviembre 2015, 21:48 pm
Lo has entendido todo a la perfección y lo has sabido adaptar al código sin aydua :).

Solo que, aquí, no se si lo has entendido del todo, yo creo que deberías averiguar el día/semana que haya seleccionado en tu control DateTimePicker, y usarlo en el rango, por que esta función lo que hace es devolver un rango de valores desde X hasta Y: Enumerable.Range(desde_primer_dia_X, hasta_último_dia_Y):

Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(1, semana))



Aunque bueno, eso es como tú lo quieras hacer.

Saludos!

Gracias, gracias, gracias jejejejeje

No entendí lo ultimo, acerca de la función de los días; la idea es que el usuario coloque al menos 2 días, es decir, desde el 01 al 02, pero no va a poder seleccionar varios días salteado por ejemplo, 01, 03, 05 y 09. En este caso sería como seleccionar entre el 01 y el 09.

So, siempre habrá un rango que será igual o mayor a dos días y menor al ultimo día del mes. La fecha desde no puede ser posterior a la fecha hasta y la fecha hasta no puede ser inferior a la fecha desde, estas son reglas que se colocarán en la validación del campo con el evento onChange.

En este caso te pregunto como sería la función Enumerable.Range ?

Otra cosa:
Al función SelectDirectories espera 4 parámetros y en el llamaddo yo le estoy colocando solo 3, me falta el dateFormat, de donde lo saco?

Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(dateDir, Me.year, monthNumber, ME FALTA ESTE PARÁMETRO)
  2.  

De nuevo gracias mil.
8  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 9 Noviembre 2015, 21:13 pm
No xD, para nada, todo lo contrario, solo que el código estaba un poco ""feo"" y yo soy muy "tiquismiquis" para ciertas cosas.

Sobre lo demás, te comentaré en privado.

Saludos!

Limpiando el código como me comentas, tenemos entonces:
Código
  1.       Public Sub MoveDateDirectories(ByVal year As Integer,
  2.                                       ByVal month As Integer,
  3.                                       ByVal dateFormat As String,
  4.                                       ByVal sourceDir As String,
  5.                                       ByVal targetDir As String)
  6.            If (CStr(year).Length <> 4I) Then
  7.                Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.")
  8.            Else
  9.                Dim sourceDirInfo As New DirectoryInfo(sourceDir)
  10.                Dim targetDirInfo As New DirectoryInfo(targetDir)
  11.                Dim dateDirNames As IEnumerable(Of String) =
  12.                    From day As Integer In Enumerable.Range(1, DateTime.DaysInMonth(year, month))
  13.                    Select dateFormat.Replace("yyyy", CStr(year)).
  14.                                                  Replace("MM", CStr(month).PadLeft(2, "0"c)).
  15.                                                  Replace("dd", CStr(day).PadLeft(2, "0"c))
  16.                Dim directories As IEnumerable(Of DirectoryInfo) =
  17.                    From dirInfo As DirectoryInfo In sourceDirInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)
  18.                    Where dateDirNames.Contains(dirInfo.Name)
  19.                If (Not directories.Any) Then
  20.                    Dim msg As String = String.Format("No ha sido encontrado ningún directorio en '{0}' que cumpla las condiciones de formato de fecha.", sourceDirInfo.FullName)
  21.                    MessageBox.Show(msg, " ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  22.                Else
  23.                    For Each dirInfo As DirectoryInfo In directories
  24.                        Debug.WriteLine(String.Format("Moviendo: {0}", dirInfo.FullName))
  25.                        Try
  26.                            dirInfo.MoveTo(Path.Combine(targetDirInfo.FullName, dirInfo.Name))
  27.                        Catch ex As Exception
  28.                            Throw
  29.                            MessageBox.Show(ex.Message & Environment.NewLine & ex.StackTrace, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Error)
  30.                        End Try
  31.                    Next dirInfo
  32.                    MessageBox.Show("Operación finalizada.", "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Information)
  33.                End If
  34.            End If
  35.        End Sub

Esta es la que en la actualizadad hace el movimiento de los directorios; ahora bien en mi evento Click del botón aceptar tengo:

Código
  1.    Private Sub BtAccept_Click(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles BtAccept.Click
  3.        Dim monthNumber As Integer = Me.DTPMonth.Value.Month
  4.        Dim dateDir As String = DateUtil.GetDateDirPath("es-ES", Me.fdg.SelectedPath, Me.year, monthNumber)
  5.        ' Creo el directorio con fecha (si no existe).
  6.        DateUtil.CreateDirectory(dateDir)
  7.        If RBMonth.Checked Then
  8.            DateUtil.MoveDateDirectories(Me.year, monthNumber, DateUtil.DirNameFormat, Me.fdg.SelectedPath, dateDir)
  9.        Else [b]
  10. 'El usuario a seleccionado empaquetar solo una semana en particular aqui iria el codigo que corresponde al movimiento de las carpetas que esten dentro del rango de las indicadas por el usuario.[/b]
  11.        End If
  12.        ' Merge text files.
  13.        DateUtil.FindAndMergeFiles(Me.fdg.SelectedPath, Me.CMBComp)
  14.    End Sub
  15.  

De acuerdo a lo que me estas indicando yo debería:
1.- Quitar la función MoveDateDirectories
2.- Copiar y pegar las funciones que haz desarrollado
3.- En el If si el usuario ha solicitado hacerlo mensual colocar:
 
Código
  1.    Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber)
  2. MoveDirectories(directories, Path.Combine(targetDirInfo.FullName, dirInfo.Name))
  3.  
En caso de haber seleccionado una semana sería:
Código
  1. Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber,Enumerable.Range(1, 15))
  2. MoveDirectories(directories, Path.Combine(targetDirInfo.FullName, dirInfo.Name))
  3.  

Es así como lo entiendo.

Desde ya gracias....!
9  Programación / .NET (C#, VB.NET, ASP) / Re: Leer nombre de carpetas en: 9 Noviembre 2015, 17:17 pm
Hola Elektro buen día;

Gracias mil por el apoyo, tendré muy presente tus recomendaciones.

Te envié por MP el avance que he adelantado con respecto a esto, con el fin de que (dentro de tus posibilidades) le direas un vistazo y me orientaras al respecto.

Estoy totalmente de acuerdo contigo, no se puede hacer un solo método que haga multiples funciones lo ideal es uno por mes y otro por semana.

Quiero tambien disculparme si he cometido alguna falta al mencionar que la función la habias hecho tu, pero me pareció poco etico y profesional que yo me atribuyera algo que no me pertenece, sería un plagio.

Desde ya mil gracias por tu constante y valioso apoyo....

Seguiremos en contacto.

10  Programación / .NET (C#, VB.NET, ASP) / Leer nombre de carpetas en: 9 Noviembre 2015, 14:50 pm
Saludos amigos,

Tengo una función que lee el nombre de carpetas tomando en cuenta la selección de un mes, y las mueve a una carpeta principal.

Esta función fue desarrollada por Elektro y aquí se las comparto.

Código
  1.        Public Sub MoveDateDirectories(ByVal year As Integer,
  2.                                       ByVal month As Integer,
  3.                                       ByVal dateFormat As String,
  4.                                       ByVal sourceDir As String,
  5.                                       ByVal targetDir As String)
  6.            If (CStr(year).Length <> 4I) Then
  7.                Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.")
  8.                'ElseIf (month < 1I) OrElse (month > 12I) Then
  9.                '    Throw New ArgumentOutOfRangeException(paramName:="month", message:="A value from range '1' to '12' is required.")
  10.                'ElseIf (dateFormat.Replace("y", "").Replace("M", "").Replace("d", "").Length <> 0) Then
  11.                '    Throw New NotImplementedException(message:="Specified date format is not implemented, only 'yyyy', 'MM' and 'dd' are interchangeable.")
  12.                'ElseIf Not Directory.Exists(sourceDir) Then
  13.                '    Throw New DirectoryNotFoundException(message:=String.Format("Source directory not found: '{0}'", targetDir))
  14.                'ElseIf Not Directory.Exists(targetDir) Then
  15.                '    Throw New DirectoryNotFoundException(message:=String.Format("Target directory not found: '{0}'", targetDir))
  16.            Else
  17.                Dim sourceDirInfo As New DirectoryInfo(sourceDir)
  18.                Dim targetDirInfo As New DirectoryInfo(targetDir)
  19.                ' Obtengo una colección con los nombres de directorio con el formato de fecha especificado. (ej. de Octubre 2015:  20151001 ... 20151031)
  20.                Dim dateDirNames As IEnumerable(Of String) =
  21.                    From day As Integer In Enumerable.Range(1, DateTime.DaysInMonth(year, month))
  22.                    Select dateFormat.Replace("yyyy", CStr(year)).
  23.                                                  Replace("MM", CStr(month).PadLeft(2, "0"c)).
  24.                                                  Replace("dd", CStr(day).PadLeft(2, "0"c))
  25.                ' Obtengo una colección con las rutas absolutas de los directorios que cumplen los requisitos.
  26.                Dim directories As IEnumerable(Of DirectoryInfo) =
  27.                    From dirInfo As DirectoryInfo In sourceDirInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly)
  28.                    Where dateDirNames.Contains(dirInfo.Name)
  29.                ' Un simple mensaje de información o aviso cuando no se encuentra ningún directorio el cual mover.
  30.                If (Not directories.Any) Then
  31.                    Dim msg As String = String.Format("No ha sido encontrado ningún directorio en '{0}' que cumpla las condiciones de formato de fecha.", sourceDirInfo.FullName)
  32.                    MessageBox.Show(msg, " ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  33.                Else
  34.                    ' Por último, muevo los directorios que cumplieron las condiciones de formato de fecha.
  35.                    For Each dirInfo As DirectoryInfo In directories
  36.                        Debug.WriteLine(String.Format("Moviendo: {0}", dirInfo.FullName))
  37.                        Try
  38.                            dirInfo.MoveTo(Path.Combine(targetDirInfo.FullName, dirInfo.Name))
  39.                        Catch ex As Exception
  40. #If DEBUG Then
  41.                            Throw
  42. #Else
  43.                        MessageBox.Show(ex.Message & Environment.NewLine & ex.StackTrace, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Error)
  44. #End If
  45.                        End Try
  46.                    Next dirInfo
  47.                    '                MessageBox.Show("Operación finalizada.", "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Information)
  48.                End If ' Not directories.Any
  49.            End If ' dateFormat...
  50.        End Sub
  51.  


Esta trabaja perfecto sin problemas; salvo que ahora necesito adecuarla de manera que sea posible mover días, es decir, si el usuario selecciona desde el 01-12-2015 hasta el 15-12-2015 (ambos inclusive); el proceso solo mueva esos días.

Alguien podría orientarme de como adecuar esta función para que haga lo que necesito?

Desde ya mil gracias...
Páginas: [1] 2 3 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines