Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Cascuda en 25 Abril 2015, 21:06 pm



Título: Remplazar la linea entera...
Publicado por: Cascuda en 25 Abril 2015, 21:06 pm
Hola gente, he estado buscando en el foro pero sin encontrar solución alguna... Puede ser por que no he buscado bien, o no supe buscar correctamente lo que quería hacer.

Os voy a explicar mi problema: Quiero modificar un archivo, que es donde se define las conexiones del Oracle. Llego a hacerlo... me modifica la conexión, pero me desplaza el texto que tengo después de Host y Port

Ejemplo de como queda el archivo modificado: "Os dejo la parte del código donde modifica, ya que tiene definido mas conexiones Oracle"
Código
  1. BDI.inet.com =
  2.   (DESCRIPTION =
  3.  (ADDRESS_LIST =
  4. (ADDRESS =
  5.   (COMMUNITY = tcp.inet.com)
  6.   (PROTOCOL = TCP)
  7.   (Host = Cascuda.com) pepito.com)
  8.   (Port = 8888) 1234)
  9. )
  10.  )
  11.  (CONNECT_DATA =
  12. (SID = BDI)
  13. (GLOBAL_NAME = BDI.inet.com)
  14.  )
  15.   )

Como veis, me pone correctamente (Host = Cascuda.com) pero, me deja el nombre que tenia el antiguo Host desplazado hacia la derecha y lo mismo que me pasa, con el dato del puerto.

Y este es el código VBS que estoy utilizando... creo que me falta algo por definir. Pero no me doy cuenta de que podrá ser.


Código
  1. Const ForReading = 1
  2. Const ForWriting = 2
  3.  
  4. Set objFSO = CreateObject("Scripting.FileSystemObject")
  5. Set objFile = objFSO.OpenTextFile("C:\Temp\ADD\tnsnames_prueba.ora", ForReading)
  6.  
  7. strText = objFile.ReadAll
  8. objFile.Close
  9. strNewText = Replace(strText, "BDI.inet.com =", "BDI.inet.com =")
  10. strNewText1 = Replace(strNewText, "(Host =", "(Host = Cascuda.com)")
  11. strNewText2 = Replace(strNewText1, "(Port =", "(Port = 8888)")
  12.  
  13. Set objFile = objFSO.OpenTextFile("C:\Temp\ADD\tnsnames_prueba.ora", ForWriting)
  14. objFile.WriteLine strNewText2
  15.  
  16. objFile.Close



[MOD]: Utiliza las etiquetas GeShi para insertar código.


Título: Re: Remplazar la linea entera...
Publicado por: Eleкtro en 25 Abril 2015, 22:01 pm
Con la función Replace nada vas a conseguir ya que le indicas el texto exacto a reemplazar, si quieres reemplazar una cadena de texto desconocida entonces puedes hacerla coindicir utilizando expresiones regulares:

Código
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Set sourceFile = FSO.OpenTextFile("source file.txt", 1)
  3. Set targetFile = FSO.OpenTextFile("target file.txt", 2, True)
  4.  
  5. Set hostRegex = New RegExp : hostRegex.Pattern = "\(Host\s+=\s+.+\)"
  6. Set portRegex = New RegExp : portRegex.Pattern = "\(Port\s+=\s+\d+\)"
  7.  
  8. host = "foro.elhacker.net"
  9. port = "80"
  10.  
  11. text = sourceFile.ReadAll
  12. text = hostRegex.Replace(text, "(Host = " & host & ")")
  13. text = portRegex.Replace(text, "(Port = " & port & ")")
  14.  
  15. targetFile.Write text
  16.  
  17. sourceFile.Close
  18. targetFile.Close
  19.  
  20. wScript.Quit(0)

Si quieres algo un poco más elaborado puedes asignar agrupaciones en las expresiones y luego utilizarlas en el objeto RegExp.

Saludos


Título: Re: Remplazar la linea entera...
Publicado por: Cascuda en 25 Abril 2015, 22:25 pm
Muchas gracias Elektro, me has abierto los ojos despues de días atascado con este problema. He probado el código y me fallo el cambio del Port, pero ya voy a buscar ahora mismo lo que pasa...