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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ayuda en código vbscript
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda en código vbscript  (Leído 3,719 veces)
eddergui

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Ayuda en código vbscript
« en: 22 Enero 2016, 00:11 am »

Buenas noches estimados;

El propósito de mi código es que genere 5 copias de un archivo .dat indexados del 1 al 5, el cual les muestro a continuación:

Código
  1. Dim counter as integer
  2. Dim objfso, archivotexto, s, writefile
  3. Dim file_Name as string
  4.  
  5. counter = 1
  6.  
  7. Do until counter =5
  8.  
  9. set objfso = createobject("scripting.filesystemobject")
  10. Set archivotexto = objfso.opentextfile(".\Edificio2DA.dat",1)
  11. s = archivotexto.readline
  12.  
  13. file_Name=".\"&counter&".dat"
  14. set writefile = objfso.CreateTextFilefile_Name, True)
  15. writefile.Write("s")
  16. writefile.Close
  17.  
  18. set objfso=nothing
  19. counter=counter+1
  20.  
  21. Loop


El problema es que al ejecutar me sale un error de compilación, les agradezco sus comentarios y sugerencias.

, saludos


En línea

_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #1 en: 22 Enero 2016, 02:11 am »

Primero, si vas a hacer una iteracion una cantidad de veces determinada -en este caso 5- usa FOR, porque while y until se usan cuando na sabes cuantas veces debes iterar, por ejemplo mientras se cumple algo intentar de nuevo.

No uses lo de copiar el contenido de un archivo a otro nuevo y menos en el caso de que no sean archivos de texto ya que se puede dañar el contenido por un error de codificacion.

Y por ultimo no uses SET dentro de una iteracion si ya lo tienes definido.

Código
  1. Option Explicit
  2. Dim counter, fso, File
  3.  
  4. Set fso = CreateObject("Scripting.FileSystemObject")
  5. Set File = fso.GetFile(".\Edificio2DA.dat")
  6.  
  7. For counter = 1 to 5
  8. File.Copy (".\"&counter&".dat")
  9. Next


« Última modificación: 22 Enero 2016, 09:43 am por Eleкtro » En línea

eddergui

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #2 en: 22 Enero 2016, 16:44 pm »

Muchas gracias _TTFH_3500, me queda la duda en que no se pueda utilizar el "set" dentro de una iteración, por ejemplo si quiero sobreescribir cada archivo.dat de una carpeta reemplazando su contenido cada vez que pasa a leer el siguiente archivo.dat, estaría forzado a usar "For Each File in Files end" y la declaración "set", por ejemplo si quiero salvar el resultado de la función "nreemplazo=reemplazo(file,string)" necesito declarar "set NewFile =FSO.CreateTextFile("./ archivo.dat", true)" y luego "NewFile.Write nreemplazo" para poder sobreescribir en el "archivo.dat".

Estuve intentando hacer esto pero no me funciona, donde he declarado un array que contenga los números objetivos que van a reemplazar "0.03125" cada vez que lo encuentre dentro de los archivos.dat  y este resultado se sobrescriba en el mismo archivo.dat.

Código
  1. arreglo = Array(Null, 0.03125, 0.0625, 0.09375, 0.125, 0.15625)
  2. counter=0
  3.  
  4. Set FSO   = CreateObject("Scripting.FileSystemObject")
  5. Set Files = FSO.GetFolder(".\").Files
  6.  
  7. For Each File in Files
  8. Set Tfile=FSO.getfile(File)
  9.  
  10. counter=counter+1
  11. s=arreglo(counter)
  12.  
  13. nreemplazo=reemplazo(Tfile, s)
  14.  
  15. Set NewFile  =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True)
  16. NewFile.Write nreemplazo
  17. NewFile.Close
  18. Next
  19.  
  20. function reemplazo(TextFile, num)
  21.  
  22. TextContent = CreateObject("Scripting.FileSystemObject"). _
  23.  OpenTextFile(TextFile, 1, False).ReadAll
  24.  
  25. Set objRegEx = CreateObject("VBScript.RegExp")
  26. objRegEx.Global  = True
  27. objRegEx.Pattern  = "0.03125"  
  28. Reemplazo = objRegEx.Replace(TextContent, num)
  29.  
  30. end function

Gracias de antemano por sus comentarios y sugerencias
, saludos!
« Última modificación: 22 Enero 2016, 16:58 pm por eddergui » En línea

_TTFH_3500

Desconectado Desconectado

Mensajes: 123



Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #3 en: 22 Enero 2016, 17:12 pm »

A lo que me refería con lo de SET es no definir varias veces algo como:
Código
  1. Set FSO  = CreateObject("Scripting.FileSystemObject")
o similar y ponerlo fuera de la iteración, pero si usas SET para modificar el valor de una variable por uno distinto esta bien.

Código
  1. Set NewFile  =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True)
En línea

eddergui

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #4 en: 22 Enero 2016, 17:54 pm »


Gracias _TTFH_3500, me quedó claro.

Les agradecería me puedan sugerir que podría hacer para resolver el problema que plantee en:

, saludos!

En línea

eddergui

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #5 en: 22 Enero 2016, 20:35 pm »

Buenas tardes:

He estado intentando resolver el problema de reemplazar el string="0.03125" dentro de cada "archivo.dat" con cada contenido del arreglo=Array(Null, "0.03125", "0.0625", "0.09375", "0.125", "0.15625"). Por ejemplo:

1.- En el archivo: Edificio2DA1 buscar dentro de este un string="0.03125" y reemplazar por "0.03125".
2.- En el archivo: Edificio2DA2 buscar dentro de este un string="0.03125" y reemplazar por "0.0625"
3.- En el archivo: Edificio2DA3 buscar dentro de este un string="0.03125" y reemplazar por "0.09375"
4.- En el archivo: Edificio2DA4 buscar dentro de este un string="0.03125" y reemplazar por "0.125"
5.- En el archivo: Edificio2DA5 buscar dentro de este un string="0.03125" y reemplazar por "0.15625"

Me ha funcionado solo para un archivo, pero luego cuando hice las modificaciones como por ejemplo agregarle el bucle, me arroja el error: Ruta de acceso no encontrada, al momento de ejecutar.

El código que trabajé es el siguiente, le agregué comentarios:

Código
  1. arreglo = Array(Null, "0.03125", "0.0625", "0.09375", "0.125", "0.15625")
  2. counter=0
  3.  
  4. Set FSO   = CreateObject("Scripting.FileSystemObject")
  5. Set Files = FSO.GetFolder(".\").Files
  6.  
  7. For Each File in Files
  8.  
  9. Set TFile = FSO.GetFile(".\"&File.name) 'Da el path del archivo File, ejm:C:\CarpetaP\CarpetaS\archivo.dat
  10.  
  11. if Lcase(FSO.GetExtensionName(File))=Lcase("dat") then ' Condicional solo para  hacer la búsqueda de archivos con extensión.dat
  12.  
  13. counter=counter+1 'contador aumenta cada vez que lee un archivo File
  14. s=arreglo(counter)'toma el string correspondiente a la posición "counter" del "arreglo".
  15.  
  16. nreemplazo=reemplazo(TFile, s) 'resultado de la función de reemplazo, donde si encuentra un "string=0.03125" hace el correspondiente cambio con el "string=s".
  17. Set NewFile  =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True) 'crea un archivo nuevo con el mismo nombre del archivo "File"
  18. NewFile.Write nreemplazo 'Sobreescribe el resultado de la función de reemplazo en el nuevo File creado en el paso anterior.
  19. NewFile.Close
  20.  
  21. end if
  22. Next
  23.  
  24. function reemplazo(TextFile, num)
  25.  
  26. TextContent = CreateObject("Scripting.FileSystemObject"). _
  27.  OpenTextFile(TextFile, 1, False).ReadAll
  28.  
  29. Set objRegEx = CreateObject("VBScript.RegExp")
  30. objRegEx.Global  = True
  31. objRegEx.Pattern  = "0.03125"  
  32. Reemplazo = objRegEx.Replace(TextContent, num)
  33.  
  34. end function

Como siempre les agradezco sus comenterios y sugerencias,

saludos!
En línea

eddergui

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Ayuda en código vbscript
« Respuesta #6 en: 22 Enero 2016, 22:37 pm »

Buenas tardes estimados:

Logré solucionar el problema con este código:

Código
  1. arreglo = Array(Null, "0.03125", "0.0625", "0.09375", "0.125", "0.15625")
  2. arreglotxt = Array(Null, ".\Edificio2DA1.dat", ".\Edificio2DA2.dat", ".\Edificio2DA3.dat", ".\Edificio2DA4.dat", ".\Edificio2DA5.dat")
  3. counter=0
  4.  
  5. Set FSO   = CreateObject("Scripting.FileSystemObject")
  6. Set Files = FSO.GetFolder(".\").Files
  7.  
  8. For counter=1 to 5
  9.  
  10. TFile=arreglotxt(counter)
  11. s=arreglo(counter)'toma el string correspondiente a la posición "counter" del "arreglo".
  12.  
  13. nreemplazo=reemplazo(TFile, s) 'resultado de la función de reemplazo, donde si encuentra un "string=0.03125" hace el correspondiente cambio con el "string=s".
  14. Set NewFile  =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True) 'crea un archivo nuevo con el mismo nombre del archivo "File"
  15. NewFile.Write nreemplazo 'Sobreescribe el resultado de la función de reemplazo en el nuevo File creado en el paso anterior.
  16. NewFile.Close
  17.  
  18. Next
  19.  
  20. function reemplazo(TextFile, num)
  21.  
  22. TextContent = CreateObject("Scripting.FileSystemObject"). _
  23.  OpenTextFile(TextFile, 1, False).ReadAll
  24.  
  25. Set objRegEx = CreateObject("VBScript.RegExp")
  26. objRegEx.Global  = True
  27. objRegEx.Pattern  = "0.03125"  
  28. Reemplazo = objRegEx.Replace(TextContent, num)
  29.  
  30. end function

Si alguien puede optimizarlo mejor, sería genial,

Saludos!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
VBScript: Angry Birds Pong in VBScript [HTA + VBS] (100% Notepad) by JohnConnor
Scripting
JohnConnor 1 5,407 Último mensaje 4 Marzo 2013, 23:34 pm
por dato000
Ayuda vbscript
Scripting
.:: KsV ::. 3 2,753 Último mensaje 22 Enero 2015, 08:50 am
por .:: KsV ::.
Ayuda Vbscript
Scripting
.:: KsV ::. 3 2,619 Último mensaje 27 Enero 2015, 15:41 pm
por .:: KsV ::.
Codigo De Ransomware en VBScript por Flamer
Análisis y Diseño de Malware
Flamer 8 7,475 Último mensaje 9 Enero 2017, 12:27 pm
por XKC
Código simple para hacer La Quiniela (VBScript,VB, VB.Net, C#)
Programación General
okik 0 5,286 Último mensaje 10 Diciembre 2016, 15:43 pm
por okik
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines