IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Pollution d'un fichier texte par des caractères de contrôle ASCII


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut Pollution d'un fichier texte par des caractères de contrôle ASCII
    Bonjour à tous

    Dans le cadre d'un projet, nous utilisons des exports de notre base de donnée pour les réinjecter dans une autre application

    Hors j'ai un gros problème : le contenu que nous exportons provient de pages de journaux OCRisés (reconnaissance de caractères). Le fait de récupérer le contenu OCRisé stocké dans la base fait apparaître des caractères type EOT, NUL, etc... au beau milieu du texte (cf exemple ci-dessous capture d'écran du notepad). :

    http://zepload.com/images/1246269758_EOF.PNG

    et l'équivalent sous VI (c'est le ^L en bleu foncé, mais c'est parfois ^M, parfois autre chose)

    http://zepload.com/images/1246270467_EOFlinux.PNG

    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^ ;; ;ri- ; --^ ir^ -.-HP! ^} npr^uin^nar ont commencé à rape- JU^L LIClMJl
    Lorsque j'indexe ensuite mon fichier XML construit à partir de cette export dans une autre application, l'application pense que le fichier est terminé et s'arrête là (enfin c'est également une supposition, dans tous les cas j'ai établi que l'application ne va pas plus loin dans le fichier XML que la ligne qui contient le caractère "aberrant")

    Auriez-vous une idée pour les supprimer via un script pas trop complexe ? Je n'arrive pas à les rechercher sous VI, donc les supprimer me paraît pour l'instant difficile

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Petit up car j'ai identifié les caractères comme étant des caractères de contrôle ASCII mais je suis toujours coincé pour les supprimer de manière automatique.

  3. #3
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Sous linux tu peux essayer la commande suivante:
    tr -cd '\11\12\15\140-\176' < le-fichier-pollué > le-fichier-pollué-nettoyé
    Ça va supprimer tous les caractères ASCII non imprimables.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Merci pour ta réponse !

    Mais la commande a eu le résultat suivant

    elle a transformé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    10000000018938326,209490,Presse écrite,2009-02-15 09:46:03,2,Réception,0,Racine,NICE MATIN,618090,\N,Le « vaisseau » Peugeot quitte St-Roch,Le « vaisseau » Peugeot quitte St-Roch restructuration Peugeot Samt-Roch\, c'est fini i Fm mars\, l'imposant bâtiment de 10 000 m2 verra ses 26 employés partir vers d'autres concessionnaires de la marque au Lion Route de Grenoble pour la plupart\, Cagnessur-Mer ou Antibes pour cinq d'entre eux Hier\, la reunion du comite d'entreprise a confirme ce que nous annoncions dans nos colonnes avant-hier la fermeture d'un site devenu\, en dix ans\, emblématique du quartier Saint-Roch « Cognes ' Pour moi c'est Cagnes-sur-^Der ' » Sans enthousiasme\, Christian Gnllo annonce sa nouvelle affectation a ses collègues Ils ont l'air défaits Resignes Certes\, aucun d'entre eux n'est licencie Reste que leur entreprise ferme un site Et celui qui les attend « aura un impact sur leur vie quotidienne »\, dixit leur délègue CGT Clotaire Picard « C'est le drame » « }ons\, on n'y est pour rien ' L'atelier est plein de vehicules vous voyez bien que ça bosse »\, soupire Christian\, 52 ans dont dixhuit passes chez Peugeot Lui habite a deux pas d'ici Son collègue Laurent\, 31 ans\, est pour sa part « effondre » II est transfère a Antibes\, alors qu'il habite route de Grenoble et déjeunait jusqu'ici chez son pere a StRoch « Ça fait des frais de repas\, d'autoroute Et comment vais-je m'occuper de ma fille\, qui rentre a l'école ? C'est le drame » Ventes en berne Directeur central des sites azureens de Peugeot\, Roger Schmitt admet quV une fermeture est toujours traumatisante Maîs on met en place des mesures d'accompagnement La\, on est encore en phase de négociation » La cnse qui secoue l'industrie automobile ? Aux dires de Roger Schmitt\, elle ne serait qu'un element d'explication parmi d'autres « Avec l'amélioration de la qualite de nos voitures\, on a réduit notre activite service après-vente Et un nouveau concessionnaire\, a la Turbie\, a pris une partie de notre territoire En outre\, les travaux du tram nous ont nui et ont change l'habitude des clients » Resultat l'élégant bâtiment de verre est devenu « surdimensionne » 700 ventes par an alors qu'il devrait en faire le double « Ils ont voulu faire une cathedrale\, un vaisseau On a toujours dit que c'était présomptueux »\, reproche le délègue FO Enc D'Oliveira Au final\, pour Chantai Chassenaud (CFDT)\, « ce sont les salaries qui trinquent Pour les reaffecter\, Peugeot a tenu compte des postes\, maîs pas de leurs adresses » CHRISTOPHE CIRONE
    en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ressecriteceptionacineevaisseaueugeotquittetochevaisseaueugeotquittetochrestructurationeugeotamtochcestfiniimmarslimposantbtimentdemverrasesemployspartirversdautresconcessionnairesdelamarqueauionoutederenoblepourlaplupartagnessurerountibespourcinqdentreeuxierlareunionducomitedentrepriseaconfirmecequenousannoncionsdansnoscolonnesavanthierlafermeturedunsitedevenuendixansemblmatiqueduquartieraintochognesourmoicestagnessureransenthousiasmehristiannlloannoncesanouvelleaffectationasescollgueslsontlairdfaitsesignesertesaucundentreeuxnestlicencieestequeleurentreprisefermeunsitetceluiquilesattendauraunimpactsurleurviequotidiennedixitleurdlguelotaireicardestledrame}onsonnyestpourrienatelierestpleindevehiculesvousvoyezbienqueabossesoupirehristianansdontdixhuitpasseschezeugeotuihabiteadeuxpasdicioncollgueaurentansestpoursaparteffondreesttransfreantibesalorsquilhabiteroutederenobleetdjeunaitjusquicichezsonpereatochafaitdesfraisderepasdautoroutetcommentvaisjemoccuperdemafillequirentrealcoleestledrameentesenberneirecteurcentraldessitesazureensdeeugeotogerchmittadmetquunefermetureesttoujourstraumatisanteasonmetenplacedesmesuresdaccompagnementaonestencoreenphasedengociationacnsequisecouelindustrieautomobileuxdiresdeogerchmittelleneseraitquunelementdexplicationparmidautresveclamliorationdelaqualitedenosvoituresonarduitnotreactiviteserviceaprsventetunnouveauconcessionnairealaurbieaprisunepartiedenotreterritoirenoutrelestravauxdutramnousontnuietontchangelhabitudedesclientsesultatllgantbtimentdeverreestdevenusurdimensionneventesparanalorsquildevraitenfaireledoublelsontvoulufaireunecathedraleunvaisseaunatoujoursditquectaitprsomptueuxreprocheledlguencliveiraufinalpourhantaihassenaudcesontlessalariesquitrinquentourlesreaffectereugeotatenucomptedespostesmaspasdeleursadresses
    (suppression de tout caractère sauf les minuscules)

    Bon je vais voir si j'arrive à adapter ton code

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    j'ai utilisé ça :

    tr -d '[:cntrl:]' < fichier pollué > fichier pollué nettoyé
    (pour les caractères de contrôle)

    et ça a l'air de fonctionner !

    je vais vérifier quand même que l'intégrité de mes données est bien conservée, mais ça m'a l'air bien parti

  6. #6
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Essaye comme ça:
    tr -cd '\11\12\15\40-\176' < le-fichier-pollué > le-fichier-pollué-nettoyé
    Un 1 s'était glissé dans mon post. En fait, on dit de supprimer tous les caractères à l'exception des valeures octal 11 (tab), 12 (lf), 15 (cr) et tout ce qui se trouve entre 40 et 176, autrement dit tout ce qui est imprimable.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Mais on fait l'inverse là non? on supprime tout sauf ce que moi je voudrais supprimer ?

    J'ai pas compris ta phrase

  8. #8
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    On supprime tous les caractères du fichier sauf ce qui a pour valeur octale 11, 12, 15, et ce qui est entre 40 et 176. Si tu consultes une table ascii tu verras à quoi correspondent les valeurs conservées.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    oui tu as raison, j'ai répondu un peu trop vite

    par contre avec les valeurs octales que tu m'as donné, on supprime

    033 041 21 00100001 ! (exclamation mark)
    034 042 22 00100010 " (double quote)
    035 043 23 00100011 # (number sign)
    036 044 24 00100100 $ (dollar sign)
    037 045 25 00100101 % (percent)
    038 046 26 00100110 & (ampersand)
    039 047 27 00100111 ' (single quote)
    que je veux garder à priori, donc je démarre à 33 plutôt ?

    pour 11, 12 et 15

    011 013 0B 00001011 VT (Vertical Tab)
    012 014 0C 00001100 FF (Form Feed)
    015 017 0F 00001111 SI (Shift In)
    ils correspondent à quoi ? J'ai peur qu'ils ne soient pas compatibles non plus avec mon appli (d'ailleurs FF et SI je ne vois même pas ce que c'est)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    je dis encore des bétises

    effectivement on démarre bien à 40

    bon je vais voir ce que j'arrive à faire

  11. #11
    Membre expérimenté
    Avatar de muad'dib
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2003
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 1 013
    Points : 1 381
    Points
    1 381
    Par défaut
    Tu lis les mauvaises valeurs de la table ascii. Il faut se référer à la colonne des valeurs en octal:
    009 011 09 00001001 HT (Horizontal Tab)
    010 012 0A 00001010 LF (Line Feed)
    013 015 0D 00001101 CR (Carriage Return)

Discussions similaires

  1. Créer un fichier texte contenant des ; sans les " imposés par Excel
    Par man_coef dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/12/2012, 21h22
  2. Réponses: 3
    Dernier message: 09/12/2011, 15h34
  3. Délimitation d'un fichier texte par nombre de caractères
    Par kira_safi dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 04/08/2010, 11h43
  4. Charger un fichier texte contenant des caractères
    Par dm_manu dans le forum MATLAB
    Réponses: 5
    Dernier message: 24/12/2006, 02h37
  5. [XSLT] Remplacer par des caractères spéciaux
    Par OXyGN dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 29/07/2005, 17h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo