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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 2 [3] 4
21  Programación / .NET (C#, VB.NET, ASP) / Re: Cambiar palabras de un archivo TXT en: 23 Octubre 2015, 21:42 pm
Chamo de pana que tu comes .net....

Q arrech.... Tu codigo....

Tengo varias preguntas:
1.- Al momento de crear el módulo me da error con las variables RegexOptions y Regex; el compilador me indica que no están definidas.

2.- Como lo acoplo esa función en el script que hemos venido trabajando?
Aqui hago el llamado al merge de los archivos:
Código
  1. ' Merge text files.
  2.        DateUtil.FindAndMergeFiles(Me.fdg.SelectedPath)
  3.  

Luego de hacer l merge pregunto por el valor del combobox
Código
  1. 'El usuario selecciono la opcion para cambiar texto
  2. If ComboBox1.SelectedIndex = 0 Then
  3.          ReplaceText("GL.txt","TXT01","TXT1")
  4.          ReplaceText("GL.txt","TXT02","TXT1")
  5.          ReplaceText("IMP6000.txt","TXT01","TXT1")
  6.          ReplaceText("IMP6000.txt","TXT02","TXT1")
  7. Else          
  8.         return
  9. End If
  10.  

3.- La función ReplaceText (ya la puse en ingles jejejejejeje)
Código
  1.    Private Sub ReplaceText(ByVal txtfile As String,
  2.                               ByVal txtfind As String, ByVal txtreplace As String,
  3.                               ByVal comparisonType As StringComparison)
  4.         If Not File.Exists(txtfile) Then
  5.            Throw New FileNotFoundException(message:="File not found", fileName:=txtfile)
  6.         Else
  7.            Dim txt As String = File.ReadAllText(txtfile, Encoding.Default).
  8.                                     Replace(txtfind, txtreplace, comparisonType)
  9.             File.WriteAllText(txtfile, txt, Encoding.Default)
  10.         End If
  11.     End Sub
  12.  
iria dentro del formulario; correcto?

Mil gracias de nuevo pana.
22  Programación / .NET (C#, VB.NET, ASP) / Cambiar palabras de un archivo TXT en: 23 Octubre 2015, 17:24 pm
Saludos a todos;

El siguiente script hace un merge de archivos TXT:
Código
  1.   Public Sub FindAndMergeFiles(ByVal sourceDir As String)
  2.        Dim fileNames As String() =
  3.        {
  4.            "CM.txt", "GL.txt",
  5.            "IMP6000.txt", "IMP6001.txt", "IMP6002.txt", "IMP6003.txt"
  6.        }
  7.        Dim curFilename As String = String.Empty
  8.        For Each topDir As DirectoryInfo In New DirectoryInfo(sourceDir).GetDirectories("*", SearchOption.TopDirectoryOnly)
  9.            ' Elimino los archivos principales ("...\topDir\CM.txt", "...\topDir\GL.txt", etc...) de sesiones anteriores.
  10.            For Each txtfile As FileInfo In topDir.GetFiles("*.txt", SearchOption.TopDirectoryOnly)
  11.                If fileNames.Contains(txtfile.Name, StringComparer.OrdinalIgnoreCase) Then
  12.                    txtfile.Delete()
  13.                End If
  14.            Next txtfile
  15.            For Each subDir As DirectoryInfo In topDir.GetDirectories("*", SearchOption.AllDirectories)
  16.                For Each txtfile As FileInfo In subDir.GetFiles("*.txt", SearchOption.AllDirectories)
  17.                    If fileNames.Contains(txtfile.Name, StringComparer.OrdinalIgnoreCase) Then
  18.                        curFilename = fileNames.First(Function(filename) filename.Equals(txtfile.Name, StringComparison.OrdinalIgnoreCase))
  19.                        Using sr As StreamReader = txtfile.OpenText
  20.                            Using sw As New StreamWriter(Path.Combine(topDir.FullName, curFilename), append:=True, encoding:=Encoding.Default, bufferSize:=128)
  21.                                sw.WriteLine(sr.ReadToEnd)
  22.                            End Using ' sw
  23.                        End Using ' sr
  24.                    End If
  25.                Next txtfile
  26.            Next subDir
  27.        Next topDir
  28.  

Ahora bien en el formulario que usa ese script hay un selector que indica dos opciones A y B; donde si la opción B es la que ha sido seleccionada es nesario buscar en dos archivos particulares una palabra y cambiarla por otra, entiendo que la funcion sería mas o menos así:

Código
  1. Private Sub ReemplazaTexto(ByVal Fichero As String, ByVal Texto_Busca As String, ByVal Texto_Reemplaza As String)
  2.    Dim Reader As New StreamReader(Fichero)
  3.    Dim Content As String = Reader.ReadToEnd()
  4.    Reader.Close()
  5.    Content = Regex.Replace(Content, Texto_Busca, Texto_Reemplaza)
  6.    Dim Writer As New StreamWriter(FicheroNuevo)
  7.    Writer.Write(Content)
  8.    writer.Close()
  9. End Sub
  10.  

Ahora lo que quedaría es que despues que ejecuto el merge es preguntar que opción del combobox está seleccionada, que sería así:
Código
  1. 'El usuario selecciono la opcion para cambiar texto
  2. If ComboBox1.SelectedIndex = 0 Then
  3.          reemplazatexto("AR.txt","TXTB1","TXTN")
  4.          reemplazatexto("AR.txt","TXTB2","TXTN")
  5.          reemplazatexto("BR.txt","TXTB1","TXTN")
  6.          reemplazatexto("BR.txt","TXTB2","TXTN")
  7. Else          
  8.         return
  9. End If
  10.  

Creo que así sería; pero si alguien tiene uuna mejor idea será bien recibida.

Desde ya mil gracias.
23  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 23 Octubre 2015, 14:54 pm
Liiiisto...!

Hermano eres un duro en .net te felicito....

Mil gracias; ahora me toca ir a otra fase de este proyecto esto es apenas el comienzo, espero poder seguir con tu apoyo.

Dale creare los hilos en el foro que corresponde.

Gracias mil de nuevo mi pana.

Un abrazo y feliz fín de semana.

24  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 21 Octubre 2015, 14:09 pm
Saludos mi pana,

Estoy testeando la función y al principio me estaba dando error pues no hacía el merge de los archivos, entraba en cada carpeta, leia los archivos pero no entraba aqui:
Código:
 If Not String.IsNullOrEmpty(curFilename) Then

                        Debug.WriteLine(topDir.FullName)
                        Debug.WriteLine(subDir.FullName)
                        Debug.WriteLine(txtfile.FullName)
                        Debug.WriteLine(Path.Combine(topDir.FullName, curFilename))

                        Using sr As StreamReader = txtfile.OpenText
                            File.AppendAllText(Path.Combine(topDir.FullName, curFilename), sr.ReadToEnd, Encoding.Default)
                        End Using

                    End If

El problema era que cuando hacía la comparación de los nombres de los archivos con las constantes:
Código:
If txtfile.Name.Equals(NameCM, StringComparison.OrdinalIgnoreCase) Then
                        curFilename = NameCM

La comparación no se daba pues el nombre del archivo es CM.TXT y no CM como estaba definido en las contantes; así que modifiqué esa porción del codigo y voilà funcona la función reune todos los archivos en uno solo.

Así quedó la porción final
Código:
        Const NameCM As String = "CM.TXT"
        Const NameGL As String = "GL.TXT"
        Const NameImp60 As String = "IMP6000.TXT"
        Const NameImp61 As String = "IMP6001.TXT"
        Const NameImp62 As String = "IMP6002.TXT"
        Const NameImp63 As String = "IMP6003.TXT"

Pero ahora me está dando este error:
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\liderapp\Documents\Scripts\Octubre2015\CM.TXT' because it is being used by another process.
Eso sucede justo aqui:
Código:
 File.AppendAllText(Path.Combine(topDir.FullName, curFilename), sr.ReadToEnd, Encoding.Default)

Cuando ya ha hecho el barrido de todas las carpetas.

Se debe a que el archivo ya está abierto y entonces al intentar abrirlo de nuevo da el error?

Gracias mil por el apoyo mi pana.

Investigando un poco en la nube; me sugieren que use este comando:

Código:
                Using loFileStream As System.IO.FileStream = New FileStream(lcFile, FileMode.Create)
                    loStreamWriter = New StreamWriter(loFileStream, cEncoding)
                    loStreamWriter.Write(cString)
                    loStreamWriter.Close()
                End Using

Q opinas al respecto?
Como lo adapto a nuestro script?

Sin mas,

Tu pana agradecido... jejejejejeje
25  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 19 Octubre 2015, 16:33 pm
Saludos mi pana,

Estoy testeando la función y al principio me estaba dando error pues no hacía el merge de los archivos, entraba en cada carpeta, leia los archivos pero no entraba aqui:
Código:
 If Not String.IsNullOrEmpty(curFilename) Then

                        Debug.WriteLine(topDir.FullName)
                        Debug.WriteLine(subDir.FullName)
                        Debug.WriteLine(txtfile.FullName)
                        Debug.WriteLine(Path.Combine(topDir.FullName, curFilename))

                        Using sr As StreamReader = txtfile.OpenText
                            File.AppendAllText(Path.Combine(topDir.FullName, curFilename), sr.ReadToEnd, Encoding.Default)
                        End Using

                    End If

El problema era que cuando hacía la comparación de los nombres de los archivos con las constantes:
Código:
If txtfile.Name.Equals(NameCM, StringComparison.OrdinalIgnoreCase) Then
                        curFilename = NameCM

La comparación no se daba pues el nombre del archivo es CM.TXT y no CM como estaba definido en las contantes; así que modifiqué esa porción del codigo y voilà funcona la función reune todos los archivos en uno solo.

Así quedó la porción final
Código:
        Const NameCM As String = "CM.TXT"
        Const NameGL As String = "GL.TXT"
        Const NameImp60 As String = "IMP6000.TXT"
        Const NameImp61 As String = "IMP6001.TXT"
        Const NameImp62 As String = "IMP6002.TXT"
        Const NameImp63 As String = "IMP6003.TXT"

Pero ahora me está dando este error:
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\liderapp\Documents\Scripts\Octubre2015\CM.TXT' because it is being used by another process.
Eso sucede justo aqui:
Código:
 File.AppendAllText(Path.Combine(topDir.FullName, curFilename), sr.ReadToEnd, Encoding.Default)

Cuando ya ha hecho el barrido de todas las carpetas.

Se debe a que el archivo ya está abierto y entonces al intentar abrirlo de nuevo da el error?

Gracias mil por el apoyo mi pana.
26  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 19 Octubre 2015, 15:13 pm
Dale mi pana.

Gracias mil de nuevo....

27  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 14 Octubre 2015, 17:30 pm
Eso lo puedes solucionar realizando una copia en modo binario:

De todas formas, permíteme una pregunta... si puedes manejarte con VB.Net o con VBS, ¿por qué utilizas Batch?, al menos para merger o fusionar archivos, con lo fácil y "limpio" que es en los lenguajes mencionados no tendrias problemas de ese tipo.

Saludos!

Estoy investigando de como leer las carpetas que se movieron y luego copiar su contenido.
Inicialmente tendría que entrar en carpeta por carpeta para copiar los archivos, claro como el número de carpetas puede variar entonces tendría que manejarlo con un for y luego que entre en cada carpeta hacer el copy la función sería mas o menos así:

Código
  1. Private Sub UnirTxt()
  2.        ' Declaro las variables de los archivos TXT
  3.        Dim CM As String() = Directory.GetFiles(dateDir, "CM.txt")
  4.        Dim GL As String() = Directory.GetFiles(dateDir, "GL.txt")
  5.        Dim IMP60 As String() = Directory.GetFiles(dateDir, "IMP6000.txt")
  6.        Dim IMP61 As String() = Directory.GetFiles(dateDir, "IMP6001.txt")
  7.        Dim IMP62 As String() = Directory.GetFiles(dateDir, "IMP6002.txt")
  8.        Dim IMP63 As String() = Directory.GetFiles(dateDir, "IMP6003.txt")
  9.  
  10.        ' Declaro las carpetas que estan dentro de la carpeta creada
  11.        Dim Folders As New DirectoryInfo(dateDir)
  12.  
  13.        'Verifico si existen los archivos, en caso de existir los elimino.
  14.        If File.Exists(CM(0)) Then File.Delete(CM(0))
  15.        If File.Exists(GL(0)) Then File.Delete(GL(0))
  16.        If File.Exists(IMP61(0)) Then File.Delete(IMP61(0))
  17.        If File.Exists(IMP62(0)) Then File.Delete(IMP62(0))
  18.        If File.Exists(IMP63(0)) Then File.Delete(IMP63(0))
  19.  
  20.        Dim swcm As New StreamWriter(CM(0))
  21.        Dim swgl As New StreamWriter(GL(0))
  22.        Dim swi60 As New StreamWriter(IMP60(0))
  23.        Dim swi61 As New StreamWriter(IMP61(0))
  24.        Dim swi62 As New StreamWriter(IMP62(0))
  25.        Dim swi63 As New StreamWriter(IMP63(0))
  26.  
  27.        'Entro en cada carpeta día
  28.        For Each Folder As DirectoryInfo In Folders.GetDirectories
  29.            ' Tomo el nombre del archivo y hago la copia
  30.            For Each txtfile As FileInfo In Folder.GetFiles
  31.                If Mid(txtfile.Name, 1, 2) = "CM" Then
  32.                    swcm.Write(File.ReadAllText(txtfile.FullName))
  33.                End If
  34.                If Mid(txtfile.Name, 1, 2) = "GL" Then
  35.                    swgl.Write(File.ReadAllText(txtfile.FullName))
  36.                End If
  37.                If Mid(txtfile.Name, 6, 7) = "01" Then
  38.                    swi60.Write(File.ReadAllText(txtfile.FullName))
  39.                End If
  40.                If Mid(txtfile.Name, 6, 7) = "02" Then
  41.                    swi62.Write(File.ReadAllText(txtfile.FullName))
  42.                End If
  43.                If Mid(txtfile.Name, 6, 7) = "03" Then
  44.                    swi63.Write(File.ReadAllText(txtfile.FullName))
  45.                End If
  46.            Next
  47.        Next
  48.        swcm.Close()
  49.        swgl.Close()
  50.        swi60.Close()
  51.        swi61.Close()
  52.        swi62.Close()
  53.        swi63.Close()
  54. End Sub
  55.  

Que opinas?

Como lo integro con tu código?

Gracias mil de nuevo.
28  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 14 Octubre 2015, 00:03 am
Eso lo puedes solucionar realizando una copia en modo binario:

De todas formas, permíteme una pregunta... si puedes manejarte con VB.Net o con VBS, ¿por qué utilizas Batch?, al menos para merger o fusionar archivos, con lo fácil y "limpio" que es en los lenguajes mencionados no tendrias problemas de ese tipo.

Saludos!


Saludos Alektro;

Gracias oir tu tiempo.

Yo manejo .bath pues cuando comencé con el proceso de integración, uno de los pasos era el usar este script el cual tenía que editar cada vez que hubiesen mas días por agregar, es por ello que vez en el script como se repite el mismo comando y solo cambia el día, claro cada vez que agregas un día el comando copy se repite 6 veces.

De nuevo quiero expresarte mi agradecimiento por el apoyo.

Ya estoy bajando el Visual Studio Express para ver y estudiar el código.

Sin mas,

elqueteconte
29  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 13 Octubre 2015, 21:46 pm
Saludos chicos de nuevo gracias por el apoyo y mil disculpas por la joda;

Les explico paso a paso:
1.- El usuario indica (en numeros) el mes. Es decir que hay que validar que solo coloque dos caracteres y que sean numeros entre 01 y 12.
2.- Verificar si la carpeta mes con el año está creada. Ejemplo: Si el usuario indica 09 entonces la carpeta sería Septiembre2015.
3.- Si la carpeta no existe;se crea la carpeta con el mes y el año, ejemplo Septiembre2015
4.- Buscar en el directorio donde se está ejecutando el bath todas las carpetas cuya estructura sea año, mes, dia corresponda al mes de la carpeta que acabo de crear y mover esas carpetas a la que acabo de crear. Ejemplo
Si cree la carpeta miruta/Septiembre2015 y en miruta/ hay carpetas 20150901, 20150902 ... hasta 20150930 y moverla a  miruta/Septiembre2015
YA TODO ESTO ESTA
5.- Luego de haber movido las carpetas al direcotorio el script entra en la carpeta del día 1 y copia la información sobre otro archivo y sí susesivamente hasta el ultimo día. Esto hará que al final el archivo resultante tendra la información de todos los días.
Yo supongo que el script entra en un for desde el primer día hasta el ultimo y dentro del for estaría la sentencia de comiando.
Sería algo así:
Para dia=1 hasta dia=31
 copiar en archivoA plantilla la información del archivoA
 copiar en archivoB plantilla la información del archivoB
Fin para

6.- Buscar caracter especial en los archivos CM.txt; GL.txt; IMP6000.txt;IMP6001.txt; IMP6002.txt y IMP6003.txt y eliminarlo.

7.- Cerrar archivos.

Me da pena con ustedes mi pana; pero la programación no es mi fuerte; trabajo en el área de tecgonologia a nivel de administración de recursos pero he adquirido una nueva responsabilidad y pues me toca tirar codigo, pero este script es urgente que lo haga.

Sin mas;

elqueteconte
30  Programación / Scripting / Re: Crear directorio del mes actual en BAT en: 13 Octubre 2015, 16:53 pm
 ;-) ;-) ;-) ;-) ;-)

Son lo maximo chicos....

Mil gracias, yo tengo un libro de VB.Net me voy a poner a aprender pues este proceso no terminar aquí; hasta ahora han trabajado en el entorno lo que viene es la fusión de los archivos txt que están en cada carpeta.

Miren este archivo .bat

copy /y blancos\*.TXT .

copy CM.txt + C:\carp1\Emp1\20150908\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150908\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150908\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150908\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150908\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150908\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150909\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150909\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150909\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150909\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150909\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150909\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150910\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150910\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150910\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150910\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150910\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150910\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150911\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150911\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150911\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150911\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150911\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150911\IMP6003.txt IMP6003.txt

copy CM.txt + C:\carp1\Emp1\20150912\CM.txt CM.txt
copy GL.txt + C:\carp1\Emp1\20150912\GL.txt GL.txt
copy IMP6000.txt + C:\carp1\Emp1\20150912\IMP6000.txt IMP6000.txt
copy IMP6001.txt + C:\carp1\Emp1\20150912\IMP6001.txt IMP6001.txt
copy IMP6002.txt + C:\carp1\Emp1\20150912\IMP6002.txt IMP6002.txt
copy IMP6003.txt + C:\carp1\Emp1\20150912\IMP6003.txt IMP6003.txt

Fijense que el .bat hace un recorrido por cada carpeta y copia los archivos que estén en esta dentro de otr archivo con el mismo nombre que se encuentra en el nivel superior, es decir, si la carpeta ppal se llama Octubre2015 el proceso hace un recorrido por las carpetas desde la 20151001 hasta 2015610N (donde N es el último día del mes) y crea los archivos a fusionados.

El proceso de fusión de los archivos hace que los mismos contengan dentro un caracter especial que indica el fin de cada archivo, este caracter es como una fecla apuntando a la izquierda; la idea es que despues que el proceso de merge esté completado hay que entrar en cada archivo y limpiarlos.

Sería mucho pedir esto?

De pana que muchisimas gracias chicos, son lo maximo.
Páginas: 1 2 [3] 4
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines