[Batch] Automatiser save file en codage ANSI

Automatiser save file en codage ANSI [Batch] - Shell/Batch - Programmation

Marsh Posté le 21-04-2006 à 16:09:53    

Bonjour,
 
Je vous expose mon problème :
 
Je veux automatiser une procédure de rapatriement de fichier en local par ftp.
Jusque là, pas de problème.
 
Les fichiers que je récupère sont des fichiers sans extension (mais qui contiennent du texte) générés par un programme.
Le programme me génére toujours dans ces fichiers deux caractères spéciaux aléatoires au début de chaque ligne du fichier.  
Ces caractères ne sont pas voulus et je dois faire des rechercher/remplacer pour les supprimmer dans chaque fichier.
 
Ne pouvant utiliser que du batch XP (pas de Shell), j'ai opté pour un FOR /F pour ensuite découper mes lignes.
Le troisième caractère de chaque ligne étant toujours un zéro, voici la partie correspondante de mon batch :
 

Code :
  1. FOR /F "TOKENS=1,* DELIMS=0" %%a in (%file%) do echo 0%%b >> %file%V2


 
A priori mon code me semblait potable, et pourtant rien ne se passait ...
 
j'ai compris un peu plus tard que le fichier que je récupérais devait être de type spécial (Unicode a priori), et le FOR /F ne semble pas marcher sur ce type de codage...
 
Du coup en enregistrant manuellement mon fichier avec NotePad en ANSI, tout marche impec.
 
Mais il me faut encore automatiser cette procédure ...
 
Comment effectuer un enregistrement spécial avec paramètres (ici Codage = ANSI) avec un batch sous XP ?
 
J'espère que vous aurez des idées et que vous m'en ferrez part,
je vous en remercie par avance.
 

Reply

Marsh Posté le 21-04-2006 à 16:09:53   

Reply

Marsh Posté le 23-04-2006 à 23:03:14    

Bonjour,
 
Simplement comme suit ...
type fichierUni.txt > fichierAnsi.txt

Reply

Marsh Posté le 24-04-2006 à 07:55:26    

transfert FTP en mode binaire ?
 
c'est quoi tes deux caractères par hasard ?

Reply

Marsh Posté le 24-04-2006 à 09:09:59    

Gontrand2 a écrit :

Bonjour,
 
Simplement comme suit ...
type fichierUni.txt > fichierAnsi.txt


 
j'ai essayé cette manip que j'avais vu quelque part dans ce forum,
mais ça n'a pas l'air de marcher.
 

Code :
  1. type fichierUni > temp.txt
  2. FOR /F "TOKENS=1,* DELIMS=0" %%a in (temp.txt) do echo 0%%b > fichierSortie


 
temp.txt étant un fichier vide enregistré en ANSI, la manip ci dessus ne marche pas  
(le FOR /F ne se fait pas, rien ne se passe, mis à part la copie du contenu du fichier entrée dans le temp),  
alors que quand j'enregistre mon fichier de départ en ANSI directement à la main le FOR /F passe.
 
est-ce que le fait que mon fichier de départ n'ai pas d'extension peut causer des problèmes ?  
 

Taz a écrit :

transfert FTP en mode binaire ?
 
c'est quoi tes deux caractères par hasard ?


 
J'ai déjà essayé de creuser sur le mode de transfert du fichier en FTP,
mais je suis en mode ASCII et pas en mode Binaire (en mode binaire c'est pire)
L'help de mon server semble me dire que j'ai d'autres options de transfert que ces deux là, mais je n'arrive pas à les activer (Ex : EBCDIC, DBCS-ASCII, CCSID ...)
 
Des caractères spéciaux générés  au début de chaque ligne de chaque fichier,
Ils sont différents suivant les fichiers mais se sont les mêmes devant chaque ligne de chaque fichier.
 
Blocnote les interprète souvent comme des espaces ou des signes de ponctuation  
et wordpad en transcrit la plupart en 'carrés'.

Reply

Marsh Posté le 24-04-2006 à 10:34:35    

et ils viennent d'où ces caractères ? pour le mode binaire c'est pire ? t'as un windows d'un côté et en face, t'as quoi ?

Reply

Marsh Posté le 24-04-2006 à 12:22:09    

Taz a écrit :

et ils viennent d'où ces caractères ? pour le mode binaire c'est pire ? t'as un windows d'un côté et en face, t'as quoi ?


 
Les caractères sont générés par un programme sur lequel je n'ai aucun droit de modification.
Je ne sais pas pourquoi ces caractères apparaissent mais en tout cas ça ne depend pas de moi.
 
Si je récupère mes fichiers en mode binaire, déjà ils sont beaucoup plus gros (normal) et mettent donc beaucoup plus de temps à se transferer mais en plus ils sont illisibles (remplis de carrés avec notepad).
 
Mon poste client est un windows xp et je récupère des fichiers sur un server AS400 par FTP.

Reply

Marsh Posté le 24-04-2006 à 12:28:58    

Si ce n'est pas secret, tu peux poster un exemple de fichier ?

Reply

Marsh Posté le 24-04-2006 à 12:51:55    

wackevat a écrit :

Si ce n'est pas secret, tu peux poster un exemple de fichier ?


 
- sur le server : 2 cases entierement blanches à la visu et deux carrés quand je copie ici :
 
0800473NSO252067521418372
0800474NSO253077511471186
0800485NSO246127635107423
0800494NSO149122123122510
...
 
- sous notepad : espace et apostrophe
 
 ’0800473NSO252067521418372
 ’0800474NSO253077511471186
 ’0800485NSO246127635107423
 ’0800494NSO149122123122510
...
 
- sous wordpad :  
 
arf il ne veut meme pas me copier ici ce qu'il voit sous wordpad.
c'est un mix des deux précédents, carré puis apostrophe.
 
- sous word il m'affiche la meme chose que sous wordpad (carré puis apostrophe)  
mais quand je le colle ici il enleve les carrés et les remplace par des espaces :
 
 ’0800473NSO252067521418372
 ’0800474NSO253077511471186
 ’0800485NSO246127635107423
 ’0800494NSO149122123122510
...
 
 

Reply

Marsh Posté le 24-04-2006 à 13:05:12    

Ce serait bien que tu postes le fichier en téléchargement, au lieu d'un copier/coller, histoire qu'on voie ce que c'est exactement l'apostrophe.

Reply

Marsh Posté le 24-04-2006 à 13:42:54    

wackevat a écrit :

Ce serait bien que tu postes le fichier en téléchargement, au lieu d'un copier/coller, histoire qu'on voie ce que c'est exactement l'apostrophe.


 
Je ne suis pas sur d'avoir le droit de rendre ces fichiers disponibles sur le net,
ce sont des renseignements personnels et il y a une loi qui les protège.
 
Pour l'apostrophe, comme je le dit plus haut, ce caractère apparait seulement dans ce fichier, dans les autres il s'agit d'autres caractères spéciaux : ' ¼', ' ¥', ' ™', ' Â', ' ', etc ...

Reply

Marsh Posté le 24-04-2006 à 13:42:54   

Reply

Marsh Posté le 24-04-2006 à 19:02:48    

t'es sur que ça correspond pas à la longueur de la ligne ?
 
ton truc là, c'est juste que certains éditeurs de texte bidon te les affiche pas, c'est pas le transfert FTP qui va faire ça ...

Reply

Marsh Posté le 24-04-2006 à 19:27:44    

Taz a écrit :

t'es sur que ça correspond pas à la longueur de la ligne ?
 
ton truc là, c'est juste que certains éditeurs de texte bidon te les affiche pas, c'est pas le transfert FTP qui va faire ça ...


 
Certains de mes fichiers d'entrée ont des longueurs de ligne variable et pourtant c'est toujours les memes caractères qui sont présent devant chaque ligne de ces fichiers.
 
Je ne cherche pas à savoir à quoi correspondent ces caractères, je veux juste automatiser la procédure que je connais pour les effacer.
Et mon problème est que je ne peux pas 'trafiquer' ce fichier s'il a un codage inconnu de DOS ...

Reply

Marsh Posté le 24-04-2006 à 19:49:03    

ben t'as qu'à demander à qui te donne ces fichiers quel format de fichier il utilise et point.

Reply

Marsh Posté le 24-04-2006 à 20:57:01    

Taz a écrit :

ben t'as qu'à demander à qui te donne ces fichiers quel format de fichier il utilise et point.


 
Celui qui me donne ces fichiers, c'est un programme, et j'ai beau lui demander, il ne me répond pas souvent ...
 
Dans ma situation actuelle, qd je récupere le fichier et que j'essaye de lancer mon traitement dessus, le FOR /F ne passe pas.
Si j'enregistre préalablement mon fichier en codage ANSI, le traitement passe niquel.
 
Je cherche juste donc à automatiser le save file en codage ANSI (d'où le titre assez explicite j'espere).
 
Personne ne m'a encore dit que ce n'était pas possible, mais si vous pensez que c'est le cas, autant me le dire, je chercherai dans une autre voie.
 

Reply

Marsh Posté le 24-04-2006 à 21:22:00    

En fait, c'est pas évident de te dire possible ou pas sans voir le fichier dans son état natif. Il n'y pas moyen de produire une échantillon pas "sensible" ?
 
Sinon, comme contournement, tu peux "automatiser" les clics de souris et frappe clavier du passage par Notepad avec AutoIt 3 par exemple, même si ce n'est pas très élégante comme soluce ;)

Reply

Marsh Posté le 26-04-2006 à 11:07:55    

wackevat a écrit :

En fait, c'est pas évident de te dire possible ou pas sans voir le fichier dans son état natif. Il n'y pas moyen de produire une échantillon pas "sensible" ?


Si je le modifie un de mes fichiers pour le rendre moins sensible,
je serais obligé de l'enregistrer après la modif  
et du coup il ne sera plus dans son état natif.
(en plus j'ai pas d'espace de mise à disposition de fichiers sur le net sous la main)
A la limite je pourrais envoyer un fichier par mail individuellement à quelques âmes charitables.
 

wackevat a écrit :

Sinon, comme contournement, tu peux "automatiser" les clics de souris et frappe clavier du passage par Notepad avec AutoIt 3 par exemple, même si ce n'est pas très élégante comme soluce ;)


Je vais essayer d'éviter d'installer quoi que ce soit.
 
- Je pensais plutot à essayer d'utiliser une commande,  
par exemple lancer notepad en ligne de commande avec des paramètres spéciaux:
 
exemple, en ligne de commande :
 

Code :
  1. notepad /p text.txt


 
Cette commande automatise le print du menu file de notepad.
 
Je chercherai le meme genre de chose pour simuler le save avec parametres
 
dans le genre de :
 

Code :
  1. notepad /s ANSI test.txt


 
pour automatiser le save en codage ANSI
 
Mais je ne trouve rien là dessus.
Je prend mes exemple avec notepad mais il existe peut etre d'autres solutions.

Reply

Marsh Posté le 26-04-2006 à 17:21:15    

PepMat a écrit :

(en plus j'ai pas d'espace de mise à disposition de fichiers sur le net sous la main)


De très nombreux sites proposent l'hébergement gratuit des fichiers, rapidshare.de par exemple, avec la possiblité de les supprimer ultérieurement.

PepMat a écrit :

Je vais essayer d'éviter d'installer quoi que ce soit.


AutoIt 3 n'a pas besoin d'être installé.

Reply

Marsh Posté le 26-04-2006 à 17:25:12    

Reply

Marsh Posté le 27-04-2006 à 09:20:10    

Bon, je vais voir si ya pas un fichier que je pourrais vous mettre à disposition sans risquer grand chose.
 
Je vais ptet me tourner vers Autoit alors,
j'ai vu qu'on peux compiler les scripts en .exe, sans avoir besoin ensuite d'AutoIt installé pour l'utiliser.
 
J'essayerai chez moi,  
parceque je n'ai trouvé que des versions setup qui ont besoin d'etre installées  
et je n'ai pas les droits pour.
edit : autant pour moi, j'ai vu que seul AutoIt3.exe suffisait pour lancer les scripts, c'est bon.
 
Je vais juste essayer de creer un script qui fait ALT+F (menu files), R (enregistrer sous),ENTER (pour valider l'enregistrement).
 
Et merci pour le lien, mais je ne pense pas payer 10$ pour ne meme pas etre sur d'avoir la solution...

Message cité 1 fois
Message édité par PepMat le 27-04-2006 à 09:48:45
Reply

Marsh Posté le 27-04-2006 à 12:40:08    

Ok, c'est bon :
 
Mon batch me cree automatiquement le fichier script AutoIt, puis le lance :
 
(désolé de pas les mettre dans des balises codes mais ça merde de partout quand j'essaye)
 
ECHO Creation du fichier de script de formatage
 
ECHO Run ("notepad %file%" ) > ScriptFormat.au3
ECHO WinWaitActive("%file% - Bloc-notes" ) >> ScriptFormat.au3
ECHO Send ("!f" ) >> ScriptFormat.au3
ECHO Send ("r" ) >> ScriptFormat.au3
ECHO WinWaitActive("Enregistrer sous" ) >> ScriptFormat.au3
ECHO Send ("{ENTER}" ) >> ScriptFormat.au3
ECHO WinWaitActive("%file%.txt - Bloc-notes" ) >> ScriptFormat.au3
ECHO Send ("!f" ) >> ScriptFormat.au3
ECHO Send ("q" ) >> ScriptFormat.au3
 
ECHO Debut du Formatage du fichier
 
IF EXIST %file%.txt DEL %file%.txt
 
autoit3 Scriptformat.au3
DEL ScriptFormat.au3
ECHO Formatage du fichier en cours ...
 
DEL %file%
FOR /F "TOKENS=1,* DELIMS=0" %%a in (%file%.txt) do echo 0%%b >> %file%
DEL %file%.txt
ECHO Fin du programme
PAUSE
 
(fin)
 
Le script AutoIt lance ouvre mon fichier d'entrée avec notepad,
attend que la fenetre sous active (que le chargement de notepad soit fini),  
fait ALT+F (menu files), R (enregistrer sous)
attend que la fenetre enregistrer apparaisse et soit active
fait ENTER (save en .txt avec les options standard, donc bien ANSI ^^)
attend que la fenetre sous active (que l'enregistrement soit fini),  
fait ALT+F puis Q (menu files et Quitter)
 
ensuite mon FOR /F sur mon fichier obtenu marche très bien (un peu lentement mais bien).
 
Merci pour votre aide.
 
Si vous voyez des améliorations à faire,  
je suis open pour toute optimisation qui pourrait me faire gagner du temps.

Reply

Marsh Posté le 27-04-2006 à 22:20:42    

PepMat a écrit :

Et merci pour le lien, mais je ne pense pas payer 10$ pour ne meme pas etre sur d'avoir la solution...


Suffit de scroller la page.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed