Buenos días, soy novato en esto de los scripts y necesitaría vuestra ayuda.
Os cuento, tengo un txt similar a este:
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:
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:
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.
Solo puede ser un comando?
Cita de: Almapa en 9 Noviembre 2013, 12:17 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.
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
#!/bin/bash
sed.exe -e "s/Friday/Viernes/" TIEMPO.txt >TIEMPOSCAS.txt
Cita de: mad_soft 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
#!/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.
Esto en batch funciona, mira a ver si te sirve:
@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
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.
#!/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.
#!/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
....
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 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 (http://www.ubuntu-es.org/node/159621#.Un4yesPsHtc)
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.
No sabría que decirte, ¿dejándolo en utf el script de sed funciona bien?
Si es así el problema viene cuando le pasas el conversor. También puede ser que como recuerdo los acentos pertenecen al ansi extendido (igual me equivoco) y a lo mejor tu conversor está convirtiendo a un ansi normal de 127 caracteres.
Acabo de probar el script antes de hacer la conversión, el txt original me lo pasan en UTF-8 sin BOM y no funciona, me sigue haciendo lo mismo.
Traduce correctamente todas los días salvo el Miércoles y Sábado que llevan tilde.
Así que yo creo que el problema viene del propio sed.
Gracias!
Es suficiente con obtener la representación correcta.
Para la é de Miércoles:
sed.exe -e "s/Miércoles/Dimecres/" "File.txt" > "Output.txt"
Para la á de Sábado:
sed.exe -e "s/Sábado/Disabte/" "File.txt" > "Output.txt"
Para futuras necesidades:
iconv -f latin1 -t utf-8 "File.txt" | sed "s/Sábado/Disabte/" | iconv -f utf-8 -t latin1
-> iconv (http://sourceforge.net/projects/gnuwin32/files/libiconv/1.9.2-1/libiconv-1.9.2-1-bin.zip/download?use_mirror=surfnet&download=)
Saludos
Muchas gracias por la respuesta Elektro, pero me sigue ocurrido los mismo, lo he probado antes y después de hacer la conversión y no me hace caso ni con la codificación Ansi ni con UTF
He probado también el código del iconv que me pusiste y ese ni siquiera me modifica la fecha del txt, aparentemente no hace nada.
Gracias, un saludo!
Hola chicos, perdonar por el doble post.
He conseguido solucionar mi problema con las tildes ;-) .
He conseguido que me pasaran el archivo de origen con los días de la semana en ingles, y ese idioma al no tener tildes pues no he tenido ningún problema al traducirlo a otro que tampoco las lleva.
Muchísimas gracias a todos por toda vuestra ayuda, que si no llega a ser por vosotros todavía estaría intentando reemplazar una palabra xD
Un saludo!!