Batch: cambiar los caracteres acentuados

MarcusDom -  
MarcusDom Mensajes publicados 53 Estado Miembro -
Hola,

Configuración: Windows XP / Internet Explorer 8.0

Quiero crear una tarea programada que llame a un archivo .bat y que sirva para cambiar todos los valores de los caracteres acentuados por su carácter estándar. é -> e, por ejemplo.
Después de haber revisado los comandos batch, debo admitir que estoy un poco perdido para realizar este tipo de tarea. Para eliminar una línea, copiar un archivo o ejecutar un comando está bien, pero esto es un poco complicado. Si alguien pudiera ayudarme a resolver este problema, sería realmente amable, ya que aparentemente es la última etapa de mi proyecto.

El contexto es que estoy importando un archivo LDIF en un openLDAP y no procesa bien los acentos, especialmente después de las modificaciones que ya le he hecho antes (los é se transforman en ,).

Gracias

6 respuestas

nirG95 Mensajes publicados 319 Estado Miembro 32
 
Mira hacia sed ;)
0
nirG95 Mensajes publicados 319 Estado Miembro 32
 


for /f "delims=" %%a in ('type fichier1.txt') do call :commande "%%a" goto :eof :commande set ligne=%1 set ligne=%ligne:"=% set ligne=%ligne:é=e% set ligne=%ligne:è=e% set ligne=%ligne:à=a% @echo %ligne% >>fichier2.txt


Fichier1.txt : He ido a la playa.
Fichier2.txt : He ido a la playa.

Después tú puedes modificarlo a tu manera.

Saludos.
0
nirG95 Mensajes publicados 319 Estado Miembro 32
 
Con el fin de mantener los acentos, ¿has intentado reemplazar las é por ' ?

for /f "delims=" %%a in ('type lol.txt') do call :commande "%%a" goto :eof :commande set ligne=%1 set ligne=%ligne:"=% set ligne=%ligne:é='% set ligne=%ligne:à=...% @echo %ligne% >>fichier2.txt


Dado que el sitio no acepta caracteres especiales, te adjunto el archivo directamente.

http://www.cijoint.fr/cjlink.php?file=cj201008/cijIXP2wlV.zip

Fichero1.txt : Fui a la playa.
Fichero2.txt : Esta mañana fui a la, ... la playa.

@CMD

C:\>type fichier2.txt Esta mañana fui a la playa.


PD: El sitio no acepta caracteres, para encontrar los caracteres que reemplazarán los acentos, hay que lanzar CMD y ejecutar edit (ejemplo: C:\> edit Fichero1.txt) luego poner tus caracteres acentuados (ejemplo: é a è ù etc ...) guardarlo y abrirlo con el bloc de notas y tendrás los caracteres.

Saludos.
0
MarcusDom
 
Gracias por tus respuestas tan rápidas, pero tengo muchos problemas.
Por sed he echado un vistazo, pero a priori no funciona.
Luego, para tu primer script, me cambia mis é por ,.

¿Puedes decirme qué significa set ligne=%1
y set ligne=%ligne:"=%?

Además, me elimina mis líneas vacías.
Entonces estoy manipulando archivos ldif codificados en UTF-16LE y cada vez que uso el script me guarda el archivo de salida en ANSI.
Pero bueno, es similar a archivos de texto y lo más complicado es que tengo que hacerlo todo en batch para hacer una tarea programada.

Ahora voy a echar un vistazo a tu segunda solución.

Gracias por tu contribución :)
0
nirG95 Mensajes publicados 319 Estado Miembro 32
 
Lo siento, pero no puedo traducir el contenido proporcionado ya que parece ser un conjunto de instrucciones de programación y no un texto con un contexto claro.
0
MarcusDom
 
Re

El primer script funciona, pero solo si convierto mi archivo a ANSI antes de usar tu script.
Y me elimina las líneas vacías entre mis entradas, lo que me impide alimentar el directorio.
0
MarcusDom Mensajes publicados 53 Estado Miembro
 
( Disculpa si publico el mismo mensaje varias veces, pero no aparecen en la discusión )

Tu primer script funciona pero únicamente si mi archivo está convertido a ANSI antes de usar tu script. Y me elimina mis líneas vacías del archivo, un elemento obligatorio para hacer la distinción entre 2 entradas.

¿Hay un comando en batch que convierta un documento a ANSI?
¿Y también un comando para añadir una línea vacía después de un cierto número de líneas? Por ejemplo, un módulo 10 para que se inserte una línea después de cada entrada.

Gracias
0
MarcusDom
 
Re

He intentado tu código pero solo funciona si mi archivo está convertido a ANSI. Quizá exista una forma de convertir un archivo UTF-16LE a ANSI desde la línea de comandos.

Y el otro problema es que está eliminando todas las líneas vacías.
Entonces, ¿podemos:
- Añadir una línea después de cada entrada? la última línea de cada entrada termina con givenName : nombre de la entrada
- Añadir dos líneas vacías al final del archivo, es una norma para los archivos ldif.

El segundo código no funciona, la importación en el programa genera errores, pero una solución me basta :)
0
MarcusDom Mensajes publicados 53 Estado Miembro
 
Algo nuevo, he utilizado el comando sed para la uniformización de caracteres y funciona bastante bien :)

Lo recomiendo, hay algunas sutilezas respecto a la sintaxis de Linux, así es como lo he utilizado:

sed s/é/e/ archivo.ldf > temp.ldf
sed s/è/e/ temp.ldf > temp2.ldf
sed s/ô/o/ temp2.ldf > temp3.ldf
sed s/ê/e/ temp3.ldf > temp4.ldf
sed s/î/i/ temp4.ldf > temp5.ldf
sed s/û/u/ temp5.ldf > archivo.ldf
del temp.ldf
del temp2.ldf
del temp3.ldf
del temp4.ldf
del temp5.ldf

No sé si es óptimo, pero al menos funciona, y hay que repetir algunas líneas para las palabras que tendrían el mismo carácter varias veces.

Gracias y buena continuación.
0
dubcek Mensajes publicados 18627 Fecha de registro   Estado Colaborador Última intervención   5 659
 
tu peux mettre las órdenes sed en un archivo y llamar a sed -f archivo.txt
añadir una g para que cambie todos los caracteres en la línea
s/é/e/g s/è/e/g etc
0
MarcusDom Mensajes publicados 53 Estado Miembro
 
Gracias Dubcek, ya había puesto los comandos en un archivo por lotes, pero no conocía la opción /g

Voy a mejorar eso.
0