elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  (SOLUCIONADO) Ayuda para reemplazar palabras en un .txt con batch usando Sed
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: (SOLUCIONADO) Ayuda para reemplazar palabras en un .txt con batch usando Sed  (Leído 11,087 veces)
miguel088

Desconectado Desconectado

Mensajes: 8


Ver Perfil
(SOLUCIONADO) Ayuda para reemplazar palabras en un .txt con batch usando Sed
« en: 8 Noviembre 2013, 15:13 pm »

Buenos días, soy novato en esto de los scripts y necesitaría vuestra ayuda.

Os cuento, tengo un txt similar a este:

Código:
location,day name,high,low,degrees unit,icon.png,windspeed,windspeed unit,wind_dir
LEMD,Friday,17,5,C,4.png,5,Kph,W
LEMD,Saturday,14,6,C,4.png,4,Kph,NW
LEMD,Sunday,16,7,C,2.png,4,Kph,NNW
LEMD,Monday,21,9,C,1.png,4,Kph,N
LEMD,Tuesday,21,8,C,1.png,4,Kph,N
LEMD,Wednesday,18,5,C,1.png,5,Kph,NNE
LEMD,Thursday,18,7,C,1.png,3,Kph,NE


Lo que necesitaría es que a través de un batch traducir los días de la semana a castellano y quede como esto, pero en otro txt diferente:

Código:
location,day name,high,low,degrees unit,icon.png,windspeed,windspeed unit,wind_dir
LEMD,Viernes,17,5,C,4.png,5,Kph,W
LEMD,Sábado,14,6,C,4.png,4,Kph,NW
LEMD,Domingo,16,7,C,2.png,4,Kph,NNW
LEMD,Lunes,21,9,C,1.png,4,Kph,N
LEMD,Martes,21,8,C,1.png,4,Kph,N
LEMD,Miércoles,18,5,C,1.png,5,Kph,NNE
LEMD,Jueves,18,7,C,1.png,3,Kph,NE

He probado con este codigo:

Código:
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt

Y funciona, instalando la aplicación Sed en mi pc según he leído en algún hilo antiguo del foro. El problema es, que no he conseguido encontrar la solución, que me sustituya en un solo comando todas los días de la semana de todas las lineas y no solo uno como en el ejemplo.

He probado distintas cosas, separar los datos con dobles comillas o con tuberias...pero ninguno me ha funcionado. Estoy seguro que es alguna tontería y alguien mas capacitado que yo seguramente los sepa, por eso recurro a vosotros.

Espero que alguien me pueda ayudar.

Muchas gracias de antemano y un saludo.


« Última modificación: 11 Noviembre 2013, 15:43 pm por miguel088 » En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #1 en: 9 Noviembre 2013, 12:17 pm »

Solo puede ser un comando?


En línea

miguel088

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #2 en: 9 Noviembre 2013, 12:23 pm »

Solo puede ser un comando?

O en varios, me explique mal, me referia a hacerlo en una sola acción. Pero se puede utilizar todos los comandos que hagan falta.
En línea

mad_soft

Desconectado Desconectado

Mensajes: 16



Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #3 en: 9 Noviembre 2013, 12:53 pm »

Ya lo habrás pensado y no será lo que pidas, pero
¿Porque no creas un script que lo haga?
pega tantas lineas como días quieras remplazar y luego ejecutas el script
Código:
#!/bin/bash
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt
En línea


SuSE 13.2 + Kernel 3.16
miguel088

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #4 en: 9 Noviembre 2013, 12:59 pm »

Ya lo habrás pensado y no será lo que pidas, pero
¿Porque no creas un script que lo haga?
pega tantas lineas como días quieras remplazar y luego ejecutas el script
Código:
#!/bin/bash
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt

Lo pensé y lo probé, pero el problema es que me traducia solo la ultima linea, ya que se va ejecutando el comando sobre el txt original y en el txt resultante solo salia traducida la última linea.

Imagino que habrá alguna forma (que desconozco) es que dentro de ese comando sed se puedan meter todas las traducciones.
En línea

Almapa

Desconectado Desconectado

Mensajes: 111


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #5 en: 9 Noviembre 2013, 13:04 pm »

Esto en batch funciona, mira a ver si te sirve:

Código:
@echo off
cls
Setlocal EnableDelayedExpansion
set /p archivo="Arrastra el archivo a modificar: "
for /f "tokens=*" %%a in ('type %archivo%') do (call :cambiar %%a)
:cambiar
set var=%*
if %2==Monday (echo %var:Monday=Lunes%>>nuevo.txt) else (if %2==Tuesday (echo %var:Tuesday=Martes%>>nuevo.txt) else (if %2==Wednesday (echo
%var:Wednesday=Miércoles%>>nuevo.txt) else (if %2==Thursday (echo %var:Thursday=Jueves%>>nuevo.txt) else (if %2==Friday (echo %var:Friday=Viernes%>>nuevo.txt) else (if %2==Saturday (echo %var:Saturday=Sábado%>>nuevo.txt) else (if %2==Sunday (echo %var:Sunday=Domingo%>>nuevo.txt) else (echo %var%>nuevo.txt)))))))
GOTO :eof


Un saludo
« Última modificación: 9 Noviembre 2013, 14:52 pm por Almapa » En línea

mad_soft

Desconectado Desconectado

Mensajes: 16



Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #6 en: 9 Noviembre 2013, 13:13 pm »

claro, porque el resultado del cambio se guarda en tiemposcas.txt y en la siguiente linea vuelves a comprobar tiempo.txt con lo que el cambio anterior no está hecho. Haz una copia del archivo en cada instruccion sed, o juega con dos ficheros.
Código:
#!/bin/bash
sed.exe -e "s/Monday/Lunes/" TIEMPO.txt >TIEMPOSCAS.txt
cp TIEMPOSCAS.txt TIEMPO.txt
sed.exe -e "s/Thuesday/Martes/" TIEMPO.txt >TIEMPOSCAS.txt
...
o bien cambiando los 2 archivos.
Código:
#!/bin/bash
sed.exe -e "s/Monday/Lunes/" TIEMPO.txt >TIEMPOSCAS.txt
sed.exe -e "s/Thuesday/Martes/" TIEMPOSCAS.txt >TIEMPO.txt
sed.exe -e "s/Wednesday/Miercoles/" TIEMPO.txt >TIEMPOSCAS.txt
....
En línea


SuSE 13.2 + Kernel 3.16
miguel088

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #7 en: 9 Noviembre 2013, 13:58 pm »

Muchísimas gracias a los dos, parece que funciona casi bien  ;-)

Solo me queda una ultima cuestión, en el caso de que quiera traducir al contrario o a otro idioma desde el castellano, como el Miércoles y el Sábado tienen tildes no me coge el cambio:

Ejemplo:

sed.exe -e "s/Miércoles/mercredi/" TIEMPOCAS.txt >TIEMPOFRANCES.txt

En este caso, me cambia el resto de días, pero los que llevan tilde no me los reemplaza, sabéis por que puede ocurrir?

Muchísimas gracias a todos de verdad.

Un saludo!
En línea

mad_soft

Desconectado Desconectado

Mensajes: 16



Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #8 en: 9 Noviembre 2013, 14:06 pm »

En este foro dicen que no es problema del sed, sino de que las locales de tu sistema son unas y el archivo esta creado en otro locale....
http://www.ubuntu-es.org/node/159621#.Un4yesPsHtc
En línea


SuSE 13.2 + Kernel 3.16
miguel088

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Re: Ayuda para reemplazar palabras en un .txt con batch usando Sed
« Respuesta #9 en: 9 Noviembre 2013, 14:20 pm »

Efectivamente, lo datos de origen que me pasan por FTP están formato UTF y para el software final necesita que los datos este en formato ANSI y antes de llegar a la traducción tengo otro bat creado que transforma todos los txt de utf a ansi.

El problema es que el txt a traducir esta si o si en ansi.

No se podría realizar la traducción de las tildes con el formato ANSI?

Perdonar por mi ignorancia, que en estos campos me pierdo bastante..

Gracias de antemano!

Un saludo.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines