|
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...!!!! 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: 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 MoveDateDirectories1.- Mensual:La definición o declaración de la variable sería: Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(dateDir, Me.year, monthNumber, DateUtil.DirNameFormat)
El llamado al metodo sería: MoveDirectories(directories, dateDir)
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: 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: 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: Public Shared targetDirInfo As DirectoryInfo Public Shared dirInfo As DirectoryInfo
Desde ya mil gracias brother. 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. Dim InitialDate As Date = DTPSince.Value Dim FinalDate As Date = DTPUntil.Value Dim tspan As TimeSpan Dim differenceInDays As Integer tspan = InitialDate - FinalDate differenceInDays = tspan.Days
Una vez obtenido esto la definición de la variable directories sería: Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(InitialDate.Day, differenceInDays))
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.- Enumerable.Range(inicio, fin)
Donde inicio y fin son el valor del DateTmePiker que seleccionó el usuario. Sería algo como: Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber, Enumerable.Range(Me.DTPSince.Value, Me.DTPUntil.Value))
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: Convert.ToInt32(DTPUntil.Value.ToString("yyyyMMdd"))
Es esto correcto? Así quedaría la definición de la variable: 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.- La definición de la variable sería entonces asi: 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): 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? Dim directories As IEnumerable(Of DirectoryInfo) = DateUtil.SelectDirectories(dateDir, Me.year, monthNumber, ME FALTA ESTE PARÁMETRO)
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: Public Sub MoveDateDirectories(ByVal year As Integer, ByVal month As Integer, ByVal dateFormat As String, ByVal sourceDir As String, ByVal targetDir As String) If (CStr(year).Length <> 4I) Then Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.") Else Dim sourceDirInfo As New DirectoryInfo(sourceDir) Dim targetDirInfo As New DirectoryInfo(targetDir) Dim dateDirNames As IEnumerable(Of String) = From day As Integer In Enumerable.Range(1, DateTime.DaysInMonth(year, month)) Select dateFormat.Replace("yyyy", CStr(year)). Replace("MM", CStr(month).PadLeft(2, "0"c)). Replace("dd", CStr(day).PadLeft(2, "0"c)) Dim directories As IEnumerable(Of DirectoryInfo) = From dirInfo As DirectoryInfo In sourceDirInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) Where dateDirNames.Contains(dirInfo.Name) If (Not directories.Any) Then 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) MessageBox.Show(msg, " ", MessageBoxButtons.OK, MessageBoxIcon.Information) Else For Each dirInfo As DirectoryInfo In directories Debug. WriteLine(String. Format("Moviendo: {0}", dirInfo. FullName)) Try dirInfo.MoveTo(Path.Combine(targetDirInfo.FullName, dirInfo.Name)) Catch ex As Exception Throw MessageBox.Show(ex.Message & Environment.NewLine & ex.StackTrace, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Error) End Try Next dirInfo MessageBox.Show("Operación finalizada.", "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Information) End If End If 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: Private Sub BtAccept_Click(ByVal sender As Object, ByVal e As EventArgs) _ Handles BtAccept.Click Dim monthNumber As Integer = Me.DTPMonth.Value.Month Dim dateDir As String = DateUtil.GetDateDirPath("es-ES", Me.fdg.SelectedPath, Me.year, monthNumber) ' Creo el directorio con fecha (si no existe). DateUtil.CreateDirectory(dateDir) If RBMonth.Checked Then DateUtil.MoveDateDirectories(Me.year, monthNumber, DateUtil.DirNameFormat, Me.fdg.SelectedPath, dateDir) Else [b] '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] End If ' Merge text files. DateUtil.FindAndMergeFiles(Me.fdg.SelectedPath, Me.CMBComp) End Sub
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: Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber) MoveDirectories(directories, Path.Combine(targetDirInfo.FullName, dirInfo.Name))
En caso de haber seleccionado una semana sería: Dim directories As IEnumerable(Of DirectoryInfo) = SelectDirectories(dateDir, Me.year, monthNumber,Enumerable.Range(1, 15)) MoveDirectories(directories, Path.Combine(targetDirInfo.FullName, dirInfo.Name))
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. Public Sub MoveDateDirectories(ByVal year As Integer, ByVal month As Integer, ByVal dateFormat As String, ByVal sourceDir As String, ByVal targetDir As String) If (CStr(year).Length <> 4I) Then Throw New ArgumentOutOfRangeException(paramName:="year", message:="A value of 4 digits' is required.") 'ElseIf (month < 1I) OrElse (month > 12I) Then ' Throw New ArgumentOutOfRangeException(paramName:="month", message:="A value from range '1' to '12' is required.") 'ElseIf (dateFormat.Replace("y", "").Replace("M", "").Replace("d", "").Length <> 0) Then ' Throw New NotImplementedException(message:="Specified date format is not implemented, only 'yyyy', 'MM' and 'dd' are interchangeable.") 'ElseIf Not Directory.Exists(sourceDir) Then ' Throw New DirectoryNotFoundException(message:=String.Format("Source directory not found: '{0}'", targetDir)) 'ElseIf Not Directory.Exists(targetDir) Then ' Throw New DirectoryNotFoundException(message:=String.Format("Target directory not found: '{0}'", targetDir)) Else Dim sourceDirInfo As New DirectoryInfo(sourceDir) Dim targetDirInfo As New DirectoryInfo(targetDir) ' Obtengo una colección con los nombres de directorio con el formato de fecha especificado. (ej. de Octubre 2015: 20151001 ... 20151031) Dim dateDirNames As IEnumerable(Of String) = From day As Integer In Enumerable.Range(1, DateTime.DaysInMonth(year, month)) Select dateFormat.Replace("yyyy", CStr(year)). Replace("MM", CStr(month).PadLeft(2, "0"c)). Replace("dd", CStr(day).PadLeft(2, "0"c)) ' Obtengo una colección con las rutas absolutas de los directorios que cumplen los requisitos. Dim directories As IEnumerable(Of DirectoryInfo) = From dirInfo As DirectoryInfo In sourceDirInfo.EnumerateDirectories("*", SearchOption.TopDirectoryOnly) Where dateDirNames.Contains(dirInfo.Name) ' Un simple mensaje de información o aviso cuando no se encuentra ningún directorio el cual mover. If (Not directories.Any) Then 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) MessageBox.Show(msg, " ", MessageBoxButtons.OK, MessageBoxIcon.Information) Else ' Por último, muevo los directorios que cumplieron las condiciones de formato de fecha. For Each dirInfo As DirectoryInfo In directories Debug. WriteLine(String. Format("Moviendo: {0}", dirInfo. FullName)) Try dirInfo.MoveTo(Path.Combine(targetDirInfo.FullName, dirInfo.Name)) Catch ex As Exception Throw #Else MessageBox.Show(ex.Message & Environment.NewLine & ex.StackTrace, "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Error) #End If End Try Next dirInfo ' MessageBox.Show("Operación finalizada.", "By Elektro", MessageBoxButtons.OK, MessageBoxIcon.Information) End If ' Not directories.Any End If ' dateFormat... End Sub
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...
|
|
|
|
|
|
|