Remplazar la linea entera...

Iniciado por Cascuda, 25 Abril 2015, 21:06 PM

0 Miembros y 1 Visitante están viendo este tema.

Cascuda

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 (ini,7,8) [Seleccionar]
BDI.inet.com =
  (DESCRIPTION =
 (ADDRESS_LIST =
(ADDRESS =
  (COMMUNITY = tcp.inet.com)
  (PROTOCOL = TCP)
  (Host = Cascuda.com) pepito.com)
  (Port = 8888) 1234)
)
 )
 (CONNECT_DATA =
(SID = BDI)
(GLOBAL_NAME = BDI.inet.com)
 )
  )


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 (vb) [Seleccionar]

Const ForReading = 1
Const ForWriting = 2

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile("C:\Temp\ADD\tnsnames_prueba.ora", ForReading)

strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, "BDI.inet.com =", "BDI.inet.com =")
strNewText1 = Replace(strNewText, "(Host =", "(Host = Cascuda.com)")
strNewText2 = Replace(strNewText1, "(Port =", "(Port = 8888)")

Set objFile = objFSO.OpenTextFile("C:\Temp\ADD\tnsnames_prueba.ora", ForWriting)
objFile.WriteLine strNewText2

objFile.Close





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

Eleкtro

#1
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 (vb) [Seleccionar]
Set FSO = CreateObject("Scripting.FileSystemObject")
Set sourceFile = FSO.OpenTextFile("source file.txt", 1)
Set targetFile = FSO.OpenTextFile("target file.txt", 2, True)

Set hostRegex = New RegExp : hostRegex.Pattern = "\(Host\s+=\s+.+\)"
Set portRegex = New RegExp : portRegex.Pattern = "\(Port\s+=\s+\d+\)"

host = "foro.elhacker.net"
port = "80"

text = sourceFile.ReadAll
text = hostRegex.Replace(text, "(Host = " & host & ")")
text = portRegex.Replace(text, "(Port = " & port & ")")

targetFile.Write text

sourceFile.Close
targetFile.Close

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








Cascuda

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...