Copiar contenido de un txt a otro

Tengo un inconveniente con un proyecto en el cual debo programar una macro de excel 2010, desde la cual pueda modificar líneas de un archivo de texto. La consulta en específico es que debo buscar una frase en un archivo *. Trd (el cual se comporta como un *.txt), en este caso la frase es "ASSINGN C:\Documentos\Proyecto 32" y debe ser reemplazada por el contenido de un archivo *.txt. Esa línea debe ser cambiada por aproximadamente 250 líneas.

No tengo mucho conocimiento en programación y agradecería si alguin me puede ayudar con un código ejemplo o sugerirme la herramienta con la cual pueda efectuar lo que necesito.

1 respuesta

Respuesta
1

Mi conocimiento de Excel no me permite, en principio, ayudarte si necesitas que esa sustitución se haga desde una macro de Excel. Pero sí que podría ayudarte a generar un BAT que hiciera la sustitución, bien desde una consola de MSDOS/CMD/Símbolo del sistema, o bien invocando al BAT desde la macro de Excel (si sabes como hacerlo).

El BAT que podría hacer lo que dices sería:

@echo off
set texto=%3
set texto=%texto:"=%
if "%texto%" == "" goto :ayuda
del temp.txt
del kkkk.txt
Echo.> kkkk.txt
for /f "skip=2 tokens=1*" %%x in ('fc /LB1000 /n kkkk.txt "%1" ^| findstr -v "*****"') do (
if "%%y" == "" echo.>> temp.txt
if not "%%y" == "" (
if not "%%y" == "%texto%" echo %%y>>temp.txt
if "%%y" == "%texto%" call :tratar %2
)
)
copy /y temp.txt %1
goto :fin
:tratar
for /f "skip=2 tokens=1*" %%a in ('fc /LB1000 /n kkkk.txt "%1" ^| findstr -v "*****"') do (
if "%%b" == "" echo.>> temp.txt
if not "%%b" == "" echo %%b>> temp.txt
)
goto :EOF
:Fin

A este BAT se le pasarían tres parámetros: el nombre del archivo de origen (el TRD del que hablas), el nombre del archivo a insertar en lugar de la línea buscada (el *.txt) y el texto completo de la línea buscada (en tu caso "ASSINGN C:\Documentos\Proyecto 32" aunque, ¿no le sobra una N?). Si ni el TRD ni el TXT tienen líneas en blanco se podría simplificar algo más.

Ya me dirás si te sirve.

Cordial saludo

Muchas gracias por la respuesta gggirald, el archivo *.bat me sirve, ya que puedo ejecutarlo desde la macro de excel y modificar los archivos de texto.

Mi conocimiento en programación es bajo y me permito pedir explicación de algunas cosas del código que no me son claras. Quisiera confirmar si kkkk.txt es el archivo desde el cual voy a copiar; "*****" es la frase que voy a buscar en el *.trd (efectivamente sobra una N). No se donde colocar la ubicación y el nombre del *.trd.

De nuevo muchas gracias por la ayuda.

El archivo kkkk.txt es un archivo auxiliar, en el que se escribe una simple línea en blanco (comando "echo.>kkkk.txt", por cierto que me acabo de dar cuenta de que no es necesario su borrado previo) que se necesita para "detectar" las líneas en blanco, tanto del archivo principal (el TRD), como del archivo secundario (el TXT a insertar en la posición donde se detecte el texto a buscar). Como te decía, si alguno de los dos archivos se sabe que no tiene líneas en blanco, o no importa que se eliminen, se puede simplificar el código y una de las simplificaciones sería su eliminación. El nombre y ubicación del TRD serían el primer parámetro a enviar al BAT, el nombre y ubicación del TXT serían el segundo parámetro y el texto a buscar serían el tercero (en este caso entre comillas si contiene algún espacio). Si los nombres o paths de los dos primeros archivos contienen espacios habría que entrecomillarlos también y sería necesario retocar un poco el BAT.

(Me acabo de dar cuenta de que la cuarta línea, que invoca una "ayuda", también sobra. Había preparado un BAT autónomo, a utilizar desde una ventana MSDOS, que controlaba la presencia de los parámetros, pero que no tenía mucho sentido si se le llama desde Excel y al "aligerar" el código se me escapó esa línea).

Puedes preguntarme lo que quieras hasta que consigamos ajustar el BAT a tus necesidades.

Me acabo de dar cuenta de que tal vez no sepas como se pasan los parámetros a un bat. Supongamos que al BAT le llamas CambTxt.bat, lo has guardado en c:\cosas\bat, el trd es c:\trd\prueba.trd, el archivo a cambiar por el texto es c:\varios\sustit.txt y el texto a buscar es "ASSIGN C:\Documentos\Proyecto 32", la forma de invocarlo sería:

c:\cosas\bat\cambtxt c:\trd\prueba.trd c:\varios\sustit.txt "ASSIGN C:\Documentos\Proyecto 32" 

Cordial saludo

Muchas gracias por la ayuda gggirald, hoy revise los mensajes y según lo que entendí las primeras líneas de código quedarían así:

@echo off
D:\Documentos\Programa de prueba 2\batprueba.bat D:\Documentos\Programa de prueba 2\Trnsys\Begin1234.trd D:\Documentos\Programa de prueba 2\Climas\listado.txt"ASSIGN "D:\Documentos\Programa deprueba 2\Climas\AO-Dundo-661520.tm2" 39"
set texto=%3
set texto=%texto:"=%
if "%texto%" == "" goto :ayuda
del temp.txt
del kkkk.txt
echo.> kkkk.txt
for /f "skip=2 tokens=1*" %%x in ('fc /LB1000 /n kkkk.txt "%1" ^| findstr -v "*****"') do (
if "%%y" == "" echo.>> temp.txt

.

.

.

De esa forma lo ejecute desde la macro y no obtuve resultados, el MSDOS se ejecuta pero el archivo queda intacto. No se si este llamando mal los archivos (es lo más probable). Adicionalmente quería comentar que los archivos con los que trabajo no tiene líneas en blanco, pero si tiene líneas que inician con (*) y muchas de ellas tienen (""), referencio esto porque en la parte inicial del programa desde excel me dieron problemas estos caracteres.

Nuevamente agradezco la ayuda.

Perdona que haya tardado tanto en contestarte pero es que de tu respuesta deduzco que el texto a buscar incluye en sí mismo el carácter "comillas" y eso complica el asunto hasta el punto de que, de momento, no le he encontrado solución.

Lo que sí te comentaré es que el bat en tu caso sería algo como:

@echo off
del temp.txt
for /f "tokens=*" %%x in ('type %1') do (
if "%%x" == %3 call :tratar %2
if not "%%x" == %3 echo %%x>>temp.txt
)
copy /y temp.txt %1
goto :fin
:tratar
for /f "tokens=*" %%a in ('type %1') do (echo %%a>> temp.txt)
goto :EOF
:Fin

Una vez simplificado en el sentido de no tener que tratar líneas en blanco.

La invocación sería algo como (siguiendo tu ejemplo):

"D:\Documentos\Programa de prueba 2\batprueba.bat" "D:\Documentos\Programa de prueba 2\Trnsys\Begin1234.trd" "D:\Documentos\Programa de prueba 2\Climas\listado.txt" "ASSIGN ""D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2"" 39"

Duplicando las comillas que formen parte del texto a buscar. Pero de momento no funciona correctamente. Quería decirte algo para que sepas que estoy estudiando el asunto, aunque todavía no lo tenga resuelto.

Toda la mañana pensando en el asunto y en cuanto me decido a decir algo confesando que no encuentra la solución parece que la he encontrado. El bat sería:

@echo off
Setlocal EnableDelayedExpansion
del temp.txt
for /f "tokens=*" %%x in ('type %1') do (
set leido=%%x
set leido=!leido:"=""!
if "!leido!" == %3 call :tratar %2
if not "!leido!" == %3 echo %%x>>temp.txt
)
copy /y temp.txt %1
goto :fin
:tratar
for /f "tokens=*" %%a in ('type %1') do (echo %%a>> temp.txt)
goto :EOF
:Fin

Te sugiero que antes de invocarlo desde Excel lo pruebes desde MSDOS (abriendo una ventana CMD; si no sabes cómo dime con que sistema operativo trabajas y te lo cuento). También podría ser buena idea "comentar" (precediendo de "rem" la línea correspondiente) el comando copy para que no reescriba el archivo original.

Ya me dirás.

GGG

Cordial saludo

Ya probé el código que me dejaste al final y no me funciono (lo ejecute directamente desde MSDOS, queda la ventana CMD limpia y no se si lo estoy ejecutando mal).

La verdad es que no se casi nada de programación, pero tal vez mi idea pueda tener algo de relevancia. El archivo que estoy trabajando tiene otra línea que inicia por ASSIGN pero referencia otra ubicación que no debe ser modificada (esto lo digo porque anteriormente quise buscar solo esa palabra y no fue posible), lo que he pensado es que el ASSIGN que estamos modificando esta precedido varias líneas antes por la expresión "*$LAYER Weather - Data Files #" entonces no se si sea posible delimitar la búsqueda a una zona en específico del archivo para evitar las dobles comillas y los errores de programación.

El bloque del que hablo seria el siguiente:

*$LAYER Weather - Data Files #
PARAMETERS 9
6 ! 1 File Type
39 ! 2 Logical unit
TILTEDSU ! 3 Tilted Surface Radiation Mode
GROUNDRE ! 4 Ground reflectance - no snow
GROUNDRE1 ! 5 Ground reflectance - snow cover
NUMBEROF1 ! 6 Number of surfaces
TRACKING ! 7 Tracking mode
SLOPEOFS ! 8 Slope of surface
AZIMUTHO ! 9 Azimuth of surface
*** External files
ASSIGN "D:\Documentos\Programa deprueba 2\Climas\AO-Dundo-661520.tm2" 39
*|? Which file contains the Meteonorm weather data? |1000

Gracias por toda la ayuda

El archivo de texto que aparece como listado.txt contiene la siguiente información:

ASSIGN "D:\Documentos\Programa deprueba 2\Climas\AO-Dundo-661520.tm2" 1002
ASSIGN "D:\Documentos\Programa deprueba 2\Climas\AO-Nova-Lisboa-669910.tm2" 1003
ASSIGN "D:\Documentos\Programa deprueba 2\Climas\AO-Serpa-Pinto-669930.tm2" 1004

El otro ASSIGN que te comente anteriormente también debe ser modificado, pero este contiene las rutas de otro tipo de archivos. Creo que solucionando un problema podría utilizar un código similar.

Gracias

No es necesario controlar el entorno previo a la línea a buscar siempre y cuando solo exista una con ese texto exacto.

Para hacer unas pruebas "reducidas" te sugiero que "fabriques" unos archivos de prueba (tanto del TRD como del TXT) con un número de líneas más pequeño, digamos 30 cada uno, por ejemplo, pero de forma que el TRD contenga la línea que se quiere sustituir. Supongamos que a esos archivos les llamas PbaTRD. Trd y PbaList.txt. Una vez hecho esto haz lo siguiente:

1 - Abre una ventana CMD y sitúate en la carpeta de pruebas (donde deben estar el TRD, el TXT y el BAT).

2 - Obtén un directorio de la carpeta de pruebas que permita ver la información del PbaTRD. Trd (DIR PbaTRD.*)

3 - Fuerza el listado en la ventana CMD del archivo TRD mediante el comando TYPE PbaTRD. Trd

4 - Ejecuta el bat mediente el comando (ojo a las dobles comillas)

batprueba PbaTRD.trd PbaList.txt "ASSIGN ""D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2"" 39"

La ejecución no debe dar ningún error ni sacar ningún mensaje

5 - Repite los puntos 2 y 3 y comprueba si la fecha/hora del PbaTRD. Trd ha cambiado y si la línea a cambiar ha sido cambiada.

6 - Si la cosa no parece haber funcionado, fuerza el listado (con el comando TYPE) del BAT, copia el texto de toda la ventana CMD y ponlo aquí. Supongo que sabes que para copiar el texto de una ventana CMD tienes que pulsar en el icono con el "C:\" de la parte superior izquierda da la misma con el botón derecho del ratón, seleccionar Editar/Marcar y marcar la zona a copiar. Una vez hecho esto das "Intro" y ya lo tienes copiado. Luego lo pegas donde convenga.

Espero tus noticias. Tiene que funcionar.

Cordial saludo

Realice todos los pasos que me dijiste y todo funciono bien, realizo el cambio de líneas ejecutando los archivos desde la ventana CMD, lo único malo que sucedió fue que después de ejecutarlo me elimino los signos de exclamación (!) de varias líneas, como por ejemplo:

(línea original) 39 ! 2 Logical unit

(línea nueva) 39 2 Logical unit

Y la perdida de estos signos daña el código del programa.

Adicionalmente ejecute el*.bat desde la macro y no funciono, no se si lo que se hizo anteriormente solo era una prueba para comprobar el *.bat y deba realizar algún cambio adicional

De nuevo reitero el agradecimiento por la ayuda y la paciencia

Efectivamente, el proceso elimina los caracteres ! Y ^. Estoy investigando la razón pero todavía no puedo decirte más.

Respecto a la invocación desde Excel debería funcionar si se le pasan correctamente los tres parámetros que espera. ¿Sabes si llega a ejecutarse el BAT lanzado desde Excel? Si no sabes cómo comprobarlo introduce al comienzo del BAT el comando

Echo Ha entrado al bat &pause>nul
Y si entra a l BAT te saldrá el mensaje "Ha entrado al bat" y esperará a que pulses cualquier tecla antes de seguir. Pero, lógicamente, si no resolvemos el problema de los caracteres eliminados no te servirá de mucho.

Si averiguo algo te lo contaré.

Después de muchas vueltas y de encontrarme con alguna peculiaridad del comportamiento del MSDOS y los BAT con respecto a algunos caracteres "especiales" y su paso a las variables internas, la única solución que he encontrado es que en los archivos origen en lugar del carácter "!" aparezca la combinación "^!". El BAT quitaría el "^" y en la salida ya estaría solo el "!". Pero no sé si eso es operativo en tu caso porque obliga a editar los archivos origen previamente a este paso y no acabo de verle utilidad.

Si encontrase otra solución ya te la contaría.

He encontrado la causa del "mal tratamiento" del carácter "!". El problema es que tiene que ver con el uso del comando "Setlocal EnableDelayedExpansion" que es muy útil cuando se quiere hacer un tratamiento especial para las variables locales que se usan en los bucles FOR. Esto obliga a hacer los tratamientos en base a llamadas a rutinas mediante CALL que, a su vez, puede dar problemas de otro tipo.

He preparado una versión del BAT que podría servir a tus necesidades pero temo que puedan aparecer nuevos problemas. Si te parece puedes probarlo y me cuentas. Es este:

@echo off
set texto=%3
set archlist=%2
del temp.txt
for /f "usebackq tokens=*" %%x in (%1) do (call :tratar %%x)
rem copy /y temp.txt %1
goto :fin
:tratar
echo entra
set leido=%*
set leido=%leido:"=""%
if "%leido%" == %texto% call :insertar %archlist%
if not "%leido%" == %texto% echo %*>>temp.txt
echo sale
goto :eof
:insertar
for /f "usebackq tokens=*" %%a in (%1) do (echo %%a>> temp.txt)
goto :EOF
:Fin

El formato de invocación sería el que ya vimos, con la misma necesidad de duplicar las comillas que figurasen en el texto a buscar.

Si te parece pruébalo y me dices si vale o si aparecen otros problemas en tu caso.

Perdón. Me olvidé de quitar comandos "de depuración". Prueba con éste:

@echo off
set texto=%3
set archlist=%2
del temp.txt
for /f "usebackq tokens=*" %%x in (%1) do (call :tratar %%x)
rem copy /y temp.txt %1
goto :fin
:tratar
set leido=%*
set leido=%leido:"=""%
if "%leido%" == %texto% call :insertar %archlist%
if not "%leido%" == %texto% echo %*>>temp.txt
goto :eof
:insertar
for /f "usebackq tokens=*" %%a in (%1) do (echo %%a>> temp.txt)
goto :EOF
:Fin

Cordial saludo

He estado trabajando en otra parte del programa y por eso mi demora en la respuesta. Corrí el nuevo código y no hace el cambio, se que se ejecuta porque al correrlo desde el excel queda la ventana cmd abierta pero el documento no se modifica. Trate de ejecutarlo desde la ventana cmd (como me explicaste anteriormente) y no cambia las líneas. Los caracteres (!) quedan intactos.

Gracias por la ayuda

No caí en la cuenta de que el BAT que te pasé no hace el último paso (sustituir el archivo original por la copia temporal TEMP.TXT). Se me pasó advertirte de ello. Puedes ver si el TEMP.TXT tiene las cosas como las necesitas o también puedes sustituir la línea sexta:

rem copy /y temp.txt %1

Por

copy /y temp.txt %1

(El "REM" la convierte en un comentario e impide que se ejecute).

No entiendo bien que al ejecutarlo desde Excel se quede abierta la ventana CMD (a no ser que hayas añadido un comando de PAUSE debería cerrarse sola). En todo caso creo que sería más prudente probar el BAT desde CMD hasta depurarlo completamente.

Ya me dirás.

Cordial saludo

Ya hice la modificación pero ahora me presenta el error que elimina los (*) al inicio de las líneas y son caracteres importantes para el programa (como los !).

Me permito dejar algunas líneas del *.trd y *.txt para trabajar de una forma mas consistente.

De nuevo agradezco la ayuda y la paciencia 

Begin1234.trd

VERSION 17
*TRNSED
*------------------------------------------------------------------------------
*
* Model "Type15-6" (Type 15)
*
*
*|*
*|* *** Model Type15-6 (Type 15, Unit 10)
*|*
CONSTANTS 7
*|*PARAMETERS VALUES UNITS
TILTEDSU=3
*|Tilted Surface Radiation Mode |-|-|0|1|1|5.000|1000
GROUNDRE=.2
*|Ground reflectance - no snow |-|-|0|1|0.|1.000|1000
GROUNDRE1=.7
*|Ground reflectance - snow cover |-|-|0|1|0.|1.000|1000
NUMBEROF1=1
*|Number of surfaces |-|-|0|1|1|99.000|1000
TRACKING=1
*|Tracking mode |-|-|0|1|1|4.000|1000
SLOPEOFS=45
*|Slope of surface |degrees|degrees|0|1|-360|360.000|1000
AZIMUTHO=0
*|Azimuth of surface |degrees|degrees|0|1|-360|360.000|1000
*
UNIT 10 TYPE 15 Type15-6
*$UNIT_NAME Type15-6
*$MODEL .\Weather Data Reading and Processing\Standard Format\Meteonorm Files (TM2)\Type15-6.tmf
*$POSITION 120 104
*$LAYER Weather - Data Files #
PARAMETERS 9
6 ! 1 File Type
39 ! 2 Logical unit
TILTEDSU ! 3 Tilted Surface Radiation Mode
GROUNDRE ! 4 Ground reflectance - no snow
GROUNDRE1 ! 5 Ground reflectance - snow cover
NUMBEROF1 ! 6 Number of surfaces
TRACKING ! 7 Tracking mode
SLOPEOFS ! 8 Slope of surface
AZIMUTHO ! 9 Azimuth of surface
*** External files
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2" 39
*|? Which file contains the Meteonorm weather data? |1000
*------------------------------------------------------------------------------
*
END

Listado.txt

ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2" 1002
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Nova-Lisboa-669910.tm2" 1003
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Serpa-Pinto-669930.tm2" 1004
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AR-Bariloche-877650.tm2" 1005
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AT-Klagenfurt-112310.tm2" 1006
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AU-Adelaide-946720.tm2" 1007
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AU-Georgetown-942750.tm2" 1008
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AU-Learmonth-Airp-943020.tm2" 1009
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\CA-BC-Nanaimo-Airp-718900.tm2" 1010
ASSIGN "D:\Documentos\Programa de prueba 2\Climas\CA-SK-Swift-Current-7140280600.tm2" 1011

Efectivamente, con este enfoque aparecen otros problemas. En mis pruebas no son las líneas que empiezan con "*" las afectadas sino las que contienen "|" y ya no es que desaparezca el carácter "|", es que desaparece ¡Toda la línea!, de modo que parece "peor el remedio que la enfermedad". Me temo que por el camino del BAT ya no se me ocurre como abordar esto. Pero estoy empezando a utilizar PowerShell, una shell que incorporan por defecto las últimas versiones de Windows (7 y 8 y, espero, 10). Esta shell, orientada a objetos, es muy potente. Me he permitido intentar resolver este problema en esa shell y parece que funcionaría correctamente con los ejemplos que me has pasado. De forma similar a la shell CMD/MSDOS (ahora que en el entorno Windows ya parece haber más de una shell habrá que empezar a utilizar también en Windows ese concepto) hay dos formas de invocar los scripts: una, abriendo una ventana de comando de la shell (muy similar en apariencia a la de MSDOS) para la cual basta utilizar la herramienta "Ejecutar" y teclear "powershell" (creo que también hay accesos directos en "Accesorios") y lanzando el script con sus parámetros y otra desde entornos no shell, en cuyo caso creo que hay que preceder de "powershell" a la invocación del script.

Si te interesa esta solución podemos seguir hablando de ella. El script sería:

Param (
 [string]$archorig = $(throw "se necesita parámetro -archorig"),
 [string]$archlist = $(throw "se necesita parámetro -archlist"),
 [string]$texto = $(throw "se necesita parámetro -texto")
)
Remove-Item temp.txt
Get-Content $archorig | ForEach-Object -Process {
if ($_.equals($texto)) {Get-Content $archlist | Out-File -FilePath temp.txt -Append}
if (!$_.equals($texto)) {$_ | Out-File -FilePath temp.txt -Append}
}
Copy-Item temp.txt $archorig

Cordial saludo

Gracias por la ayuda gggirald, creo que el error fue mio al no dejar el ejemplo desde el principio, tal vez la solución se hubiera generado mas rápidamente. 

Me interesa el sheel, pero quisiera saber si las rutas de los archivos se insertan de la misma forma que con el DOS.

De nuevo muchas gracias

Los scripts (guiones) de powershell tienen extensión PS1 (en lugar de BAT). Los parámetros no son "posicionales" como en BAT ($1, $2, $3, etc. en los BAT) sino que son "nominales". En el ejemplo concreto de nuestro caso, y con el guión que te ponía en mi anterior mensaje, suponiendo que el guión lo hubiéramos salvado como prueba. Ps1 y lo hubiéramos guardado en la carpeta "D:\Documentos\Programas de prueba 2", que el archivo a tratar se llama Begin1234. Trd y está en esa misma carpeta, que el archivo a insertar, si se encuentra el texto, se llama listado.txt y también está en esa carpeta y, por último, que el texto a buscar fuera 'ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2" 39' (este lo pongo ahora entre comillas simples), la invocación, desde una ventana PowerShell sería:

&"D:\Documentos\Programas de prueba 2\prueba" -archorig "D:\Documentos\Programas de prueba 2\Begin1234.trd" -archlist "\Documentos\Programas de prueba 2\listado.txt" -texto 'ASSIGN "D:\Documentos\Programa de prueba 2\Climas\AO-Dundo-661520.tm2" 39'

El parámetro "-texto" se puede englobar en comillas simples (si no las tiene dentro) o en comillas dobles, duplicando las comillas internas del texto a buscar, si las hubiera, como en este caso.

La invocación desde Excel creo que habría que precederla de "powershell". En este enlace hablan de eso:

http://blogs.technet.com/b/heyscriptingguy/archive/2012/07/18/how-to-use-vbscript-to-run-a-powershell-script.aspx 

Pero eso no lo tengo muy claro.

Otra cosa. Para poder ejecutar guiones (scripts) de powershell hay que asignarse el adecuado nivel de permisos. El mínimo para ello es el RemoteSigned. Para hacerlo basta entrar en PowerShell como administrador y ejecutar:

Set-ExecutionPolicy RemoteSigned

Si necesitas más información o sigue sin funcionar como esperas dímelo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas