Hola, lo que quiero hacer prácticamente ya está hecho, sólo me falta hacer la tarea algo más inteligente al detectar si un nomobre ya existe para evitar que por ejemplo si quiero cambiar "Luis" por "José Luis" provoque "José José Luis".
La base es tirar de un txt, donde habrá un listado por líneas, en cada cual habrá un par de palabras, indicando la palabra a cambiar y la nueva palabra: Luis-José Luis.
Código:
El problema con value = InStr(strContenidoNuevo, strNombreNuevo) es que al detecta que existe ya no interpreta ninguna otra más con el nombre StrNombreNuevo. Si quito la parte en rojo, cada vez que ejecute los nombres compuesto iran ganando el primer nombre reitativamente.
Pensé en hacer un bucle tal que:
Sin embargo, el resultado no es el esperado. Imagino que será una trivialidad pero ahora mismo estoy ofuscado ^^'. Gracias.
La base es tirar de un txt, donde habrá un listado por líneas, en cada cual habrá un par de palabras, indicando la palabra a cambiar y la nueva palabra: Luis-José Luis.
Código:
Código (vb) [Seleccionar]
Option Explicit
Dim fso, fso2, strNombreAnterior, StrNombreNuevo, RutaNombres, RutaArchivo, ListaArchivos, Archivo, strContenidoAnterior, strContenidoNuevo, NombresFila, FilaPartida,objFile,value, word
Set fso=CreateObject("Scripting.FileSystemObject")
Set fso2=CreateObject("Scripting.FileSystemObject")
Const Lectura = 1
Const Escritura = 2
RutaNombres="C:\Users\Isra\Desktop\lista.txt"
RutaArchivo="C:\Users\Isra\Desktop\Prueba.txt"
'Establecemos los objetos
Set ListaArchivos = fso.OpenTextFile(RutaNombres,Lectura)
Set Archivo=fso2.OpenTextFile(RutaArchivo,Lectura)
'Leemos el archivo a modificar
strContenidoNuevo=Archivo.ReadAll
Archivo.close
Set objFile = fso.OpenTextFile(RutaArchivo, Escritura)
'Lee línea por línea para saber los valores a modificar en un archivo de texto
Do Until ListaArchivos.AtEndOfStream
'Lee la línea entera
NombresFila = ListaArchivos.ReadLine
'Partimos la línea asignando cada valor a un array
FilaPartida=split(NombresFila ,"-")
'Asignamos a cada variable su valor del array por línea
strNombreAnterior=Trim(cstr(FilaPartida(0)))
strNombreNuevo=Trim(cstr(FilaPartida(1)))
'Comprobamos valores
'wscript.echo strNombreAnterior
'wscript.echo strNombreNuevo
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
Loop
'wscript.echo strContenidoNuevo
ListaArchivos.close
objFile.WriteLine strContenidoNuevo
objFile.Close
El problema con value = InStr(strContenidoNuevo, strNombreNuevo) es que al detecta que existe ya no interpreta ninguna otra más con el nombre StrNombreNuevo. Si quito la parte en rojo, cada vez que ejecute los nombres compuesto iran ganando el primer nombre reitativamente.
Pensé en hacer un bucle tal que:
Código (vb) [Seleccionar]
for each word in split(strContenidoNuevo, "")
value = InStr(strContenidoNuevo, strNombreNuevo)
'wscript.echo value
[color=red]if value <> 1 then [/color]
strContenidoNuevo=Replace(strContenidoNuevo, strNombreAnterior, strNombreNuevo,1,-1,0)
[color=red]end if [/color]
next
Sin embargo, el resultado no es el esperado. Imagino que será una trivialidad pero ahora mismo estoy ofuscado ^^'. Gracias.