Autor
|
Tema: Ayuda en código vbscript (Leído 3,682 veces)
|
eddergui
Desconectado
Mensajes: 7
|
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: Dim counter as integer Dim objfso, archivotexto, s, writefile Dim file_Name as string counter = 1 Do until counter =5 set objfso = createobject("scripting.filesystemobject") Set archivotexto = objfso.opentextfile(".\Edificio2DA.dat",1) s = archivotexto.readline file_Name=".\"&counter&".dat" set writefile = objfso.CreateTextFilefile_Name, True) writefile.Write("s") writefile.Close set objfso=nothing counter=counter+1 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
Mensajes: 123
|
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. Option Explicit Dim counter, fso, File Set fso = CreateObject("Scripting.FileSystemObject") Set File = fso.GetFile(".\Edificio2DA.dat") For counter = 1 to 5 File.Copy (".\"&counter&".dat") Next
|
|
« Última modificación: 22 Enero 2016, 09:43 am por Eleкtro »
|
En línea
|
|
|
|
eddergui
Desconectado
Mensajes: 7
|
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. arreglo = Array(Null, 0.03125, 0.0625, 0.09375, 0.125, 0.15625) counter=0 Set FSO = CreateObject("Scripting.FileSystemObject") Set Files = FSO.GetFolder(".\").Files For Each File in Files Set Tfile=FSO.getfile(File) counter=counter+1 s=arreglo(counter) nreemplazo=reemplazo(Tfile, s) Set NewFile =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True) NewFile.Write nreemplazo NewFile.Close Next function reemplazo(TextFile, num) TextContent = CreateObject("Scripting.FileSystemObject"). _ OpenTextFile(TextFile, 1, False).ReadAll Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Global = True objRegEx.Pattern = "0.03125" Reemplazo = objRegEx.Replace(TextContent, num) 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
Mensajes: 123
|
A lo que me refería con lo de SET es no definir varias veces algo como: 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. Set NewFile =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True)
|
|
|
En línea
|
|
|
|
eddergui
Desconectado
Mensajes: 7
|
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
Mensajes: 7
|
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: arreglo = Array(Null, "0.03125", "0.0625", "0.09375", "0.125", "0.15625") counter=0 Set FSO = CreateObject("Scripting.FileSystemObject") Set Files = FSO.GetFolder(".\").Files For Each File in Files Set TFile = FSO.GetFile(".\"&File.name) 'Da el path del archivo File, ejm:C:\CarpetaP\CarpetaS\archivo.dat if Lcase(FSO.GetExtensionName(File))=Lcase("dat") then ' Condicional solo para hacer la búsqueda de archivos con extensión.dat counter=counter+1 'contador aumenta cada vez que lee un archivo File s=arreglo(counter)'toma el string correspondiente a la posición "counter" del "arreglo". 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". Set NewFile =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True) 'crea un archivo nuevo con el mismo nombre del archivo "File" NewFile.Write nreemplazo 'Sobreescribe el resultado de la función de reemplazo en el nuevo File creado en el paso anterior. NewFile.Close end if Next function reemplazo(TextFile, num) TextContent = CreateObject("Scripting.FileSystemObject"). _ OpenTextFile(TextFile, 1, False).ReadAll Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Global = True objRegEx.Pattern = "0.03125" Reemplazo = objRegEx.Replace(TextContent, num) end function
Como siempre les agradezco sus comenterios y sugerencias, saludos!
|
|
|
En línea
|
|
|
|
eddergui
Desconectado
Mensajes: 7
|
Buenas tardes estimados: Logré solucionar el problema con este código: arreglo = Array(Null, "0.03125", "0.0625", "0.09375", "0.125", "0.15625") arreglotxt = Array(Null, ".\Edificio2DA1.dat", ".\Edificio2DA2.dat", ".\Edificio2DA3.dat", ".\Edificio2DA4.dat", ".\Edificio2DA5.dat") counter=0 Set FSO = CreateObject("Scripting.FileSystemObject") Set Files = FSO.GetFolder(".\").Files For counter=1 to 5 TFile=arreglotxt(counter) s=arreglo(counter)'toma el string correspondiente a la posición "counter" del "arreglo". 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". Set NewFile =FSO.CreateTextFile(".\"&"Edificio2DA"&counter&".dat", True) 'crea un archivo nuevo con el mismo nombre del archivo "File" NewFile.Write nreemplazo 'Sobreescribe el resultado de la función de reemplazo en el nuevo File creado en el paso anterior. NewFile.Close Next function reemplazo(TextFile, num) TextContent = CreateObject("Scripting.FileSystemObject"). _ OpenTextFile(TextFile, 1, False).ReadAll Set objRegEx = CreateObject("VBScript.RegExp") objRegEx.Global = True objRegEx.Pattern = "0.03125" Reemplazo = objRegEx.Replace(TextContent, num) end function
Si alguien puede optimizarlo mejor, sería genial, Saludos!
|
|
|
En línea
|
|
|
|
|
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,344
|
4 Marzo 2013, 23:34 pm
por dato000
|
|
|
Ayuda vbscript
Scripting
|
.:: KsV ::.
|
3
|
2,680
|
22 Enero 2015, 08:50 am
por .:: KsV ::.
|
|
|
Ayuda Vbscript
Scripting
|
.:: KsV ::.
|
3
|
2,586
|
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,439
|
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,237
|
10 Diciembre 2016, 15:43 pm
por okik
|
|