Rechercher caracteres ascii etendus dans un fichier
yakitori1
Messages postés
64
Date d'inscription
Statut
Membre
Dernière intervention
-
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
dubcek Messages postés 18789 Date d'inscription Statut Contributeur Dernière intervention -
bonjour,
je suis sur solaris et je fabrique un fichier xml à partir des données reçues de sybase.
or ce fichier contient des caracteres ascii non affichables qui font planter mon script.
Je les corrige un par un après chaque plantage mais j'aimerais pouvoir retrouver d'un coup tous ces caracteres.
Avez-vous une solution svp?
Cordialement
je suis sur solaris et je fabrique un fichier xml à partir des données reçues de sybase.
or ce fichier contient des caracteres ascii non affichables qui font planter mon script.
Je les corrige un par un après chaque plantage mais j'aimerais pouvoir retrouver d'un coup tous ces caracteres.
Avez-vous une solution svp?
Cordialement
A voir également:
- Rechercher caracteres ascii etendus dans un fichier
- Code ascii - Guide
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
14 réponses
Salut,
Une solution pourrait être de supprimer ou de substituer le code octal et/ou hexa de ces caractères via la commande sed...
Peut être qu'en ayant un exemple concret on pourrait t'aider un peu mieux ;-\
Une solution pourrait être de supprimer ou de substituer le code octal et/ou hexa de ces caractères via la commande sed...
Peut être qu'en ayant un exemple concret on pourrait t'aider un peu mieux ;-\
merci pour ta réponse
le fichier fait 20,000 lignes environ
par exemple je viens d'avoir un nouveau plantage sur cette zone:
---------
With" Direction="Next" EventID="3757" AssociatedFile="mx.113
722.0000.S.in.xml">MOODY\264S CORP
8771 <Focus FocusCode="Browse(9)
--------------
donc j'aimerais pouvoir rapidement trouver tout ces \XXX pour pouvoir corriger avant de lancer l'execution. Le code XXX est à chaque fois différent donc je ne pense pas pouvoir utiliser la commande sed.
le fichier fait 20,000 lignes environ
par exemple je viens d'avoir un nouveau plantage sur cette zone:
---------
With" Direction="Next" EventID="3757" AssociatedFile="mx.113
722.0000.S.in.xml">MOODY\264S CORP
8771 <Focus FocusCode="Browse(9)
--------------
donc j'aimerais pouvoir rapidement trouver tout ces \XXX pour pouvoir corriger avant de lancer l'execution. Le code XXX est à chaque fois différent donc je ne pense pas pouvoir utiliser la commande sed.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
merci beaucoup ça marche en changeant la plage qui était trop large.
par contre j'ai besoin de trouver ces caractères dans le fichier pas les effacer. As-tu une solution?
J'ai essayé grep:
grep "\321" try2.txt
grep: RE error 25: ''\digit'' out of range.
au pire je ferai un diff entre le fichier original et le fichier purgé.
par contre j'ai besoin de trouver ces caractères dans le fichier pas les effacer. As-tu une solution?
J'ai essayé grep:
grep "\321" try2.txt
grep: RE error 25: ''\digit'' out of range.
au pire je ferai un diff entre le fichier original et le fichier purgé.
essayer
awk -F "" '{x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' fichier
bonjour merci mais ça donne ça:
bash$ awk -F "" '{x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' iss
awk: can't open {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}
ça me parait un peu difficile de parser le fichier entier avec hawk.
bash$ awk -F "" '{x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' iss
awk: can't open {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}
ça me parait un peu difficile de parser le fichier entier avec hawk.
essayer
awk 'BEGIN{FS=""} {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' iss
avec sed ça ne marche qu'avec les codes commençant par 0 mais pas ceux commençant par 1 ou 2 genre 321 ou 264
j'ai essayé en hexadecimal : 321 c'est d1
donc:
bash$ echo -e 'ESPA\xd1A'| sed -e 's/'$(echo "\xd1")'/NI/g'
ESPAÑA
ça ne marche pas
la seule solution que j'ai pour l'instant (merci dubcek):
tr -d "\264" < try2.txt
puis un diff du résultat
et ce pour chaque caractère spécial!
donc pas terrible...
j'ai essayé en hexadecimal : 321 c'est d1
donc:
bash$ echo -e 'ESPA\xd1A'| sed -e 's/'$(echo "\xd1")'/NI/g'
ESPAÑA
ça ne marche pas
la seule solution que j'ai pour l'instant (merci dubcek):
tr -d "\264" < try2.txt
puis un diff du résultat
et ce pour chaque caractère spécial!
donc pas terrible...
le forum supprime ma commande !!
essayer de remplacer -F "" '{x= par 'BEGIN{FS=""} {x=
essayer aussi avec nawk
essayer de remplacer -F "" '{x= par 'BEGIN{FS=""} {x=
essayer aussi avec nawk
merci dubcek
j'ai essayé:
awk 'BEGIN{FS=""} {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' try2.txt
et
nawk 'BEGIN{FS=""} {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' try2.txt
mais ça ne retourne rien!
n'y aurait-il pas une solution avec perl?
j'ai essayé:
awk 'BEGIN{FS=""} {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' try2.txt
et
nawk 'BEGIN{FS=""} {x=0; for(n=1; n<=NF; n++)if($n > "\177" && $n < "\377")x++; if(x)print $0}' try2.txt
mais ça ne retourne rien!
n'y aurait-il pas une solution avec perl?
awk '{x=0; for(n=1; n<=length(); n++)if(s=substr($0, n, 1) > "\177" && s < "\377")x++; if(x)print $0}'
on fabrique un range pour egrep, essayer
egrep "$(awk 'BEGIN{for(n=0264; n<=0321; n++)printf "\\%o|", n}')" fichier
bash$ awk 'BEGIN{for(n=0264; n<=0321; n++)printf "\\%o|", n}'
\410|\411|\412|\413|\414|\415|\416|\417|\420|\421|\422|\423|\424|\425|\426|\427|\430|\431|\432|\433|\434|\435|\436|\437|\440|\441|\442|\443|\444|\445|\446|\447|\450|\451|\452|\453|\454|\455|\456|\457|\460|\461|\462|\463|\464|\465|\466|\467|\470|\471|\472|\473|\474|\475|\476|\477|\500|\501|
\410|\411|\412|\413|\414|\415|\416|\417|\420|\421|\422|\423|\424|\425|\426|\427|\430|\431|\432|\433|\434|\435|\436|\437|\440|\441|\442|\443|\444|\445|\446|\447|\450|\451|\452|\453|\454|\455|\456|\457|\460|\461|\462|\463|\464|\465|\466|\467|\470|\471|\472|\473|\474|\475|\476|\477|\500|\501|
bash$ nawk 'BEGIN{for(n=0264; n<=0321; n++)printf "\\%o|", n}'
\410|\411|\412|\413|\414|\415|\416|\417|\420|\421|\422|\423|\424|\425|\426|\427|\430|\431|\432|\433|\434|\435|\436|\437|\440|\441|\442|\443|\444|\445|\446|\447|\450|\451|\452|\453|\454|\455|\456|\457|\460|\461|\462|\463|\464|\465|\466|\467|\470|\471|\472|\473|\474|\475|\476|\477|\500|\501|
\410|\411|\412|\413|\414|\415|\416|\417|\420|\421|\422|\423|\424|\425|\426|\427|\430|\431|\432|\433|\434|\435|\436|\437|\440|\441|\442|\443|\444|\445|\446|\447|\450|\451|\452|\453|\454|\455|\456|\457|\460|\461|\462|\463|\464|\465|\466|\467|\470|\471|\472|\473|\474|\475|\476|\477|\500|\501|