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

Langage Perl Discussion :

Espaces de trop


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut Espaces de trop
    Bonjour à tous,

    j'ai un petit souci pour le traitement d'un fichier.
    Quand j'ai voulu récupérer le champ "0" séparer par un espace, de chaque ligne, je n'avais rien.
    En affichant la ligne complète je me suis aperçu que chaque lettre était séparé par un espace.
    Ma question est la suivante comment supprimer ces espaces.

    Ci joint le fichier txt issu d'un script powershell

    Merci d'avance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ficsav="c:\\admin\\history.txt";
     
    # ANALYSE DU LOG BACKUPEXEC
    ##########################
     
    open( FIC, $ficsav )or die "fichier introuvable";
     
    @data=<FIC>;
    close(FIC);
    $nb=@data;
     
    for( $a=3 ; $a <= $nb ; $a++ )
    		{
    		$data[$a] =~ s/ +$//; #remplace des séries d'espaces par un seul		
    		print $data[$a]; 
    		}
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je comprends pas trop ce que tu souhaite faire

    tu veux récupérer le 1er champs dans ton fichier?
    dans ton fichier, quand je l'ouvre (notepad++ windows), je n'ai pas d'espace entre chaque lettre

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Crées un script avec le code et lances le script dans une fenêtre dos.
    Voila le début de ce que j'obtiens

    F S 3 L I B 1 F R - I n c r e m e n t i e l l e

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    bon je pense que ton problème est juste de l'affichage car sous unix avec le script:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    open (FILE_IN, "history.txt");
    while (<FILE_IN>){
            print $_;
    }
    on n'obtient pas d'espace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Name                            JobStatus               JobType StartTime           EndTime
    ----                            ---------               ------- ---------           -------
    FS3LIB1FR-Incrementielle        Succeeded               Backup  08/01/2014 18:00:04 08/01/2014 19:23:35
    j'ai donc testé sous la commande windows:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open (FILE_IN, "history.txt");
    while (<FILE_IN>){
    	my @toto = split(' ', $_);
    	print "$toto[0]\r\n"
    }
    on obtient bien ce que tu décris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    F S 3 L I B 1 F R - I n c r e m e n t i e l l e
    donc lorsqu'on a découpé la ligne par l'espace, le 1er élément est l'ensemble de la 1ère colonne donc il n'y a apparemment pas d'espace entre les lettre dans ton fichier

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Comment faire pour comparer cette chaîne avec une chaîne qui n'a pas d'espace

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    en fait ton problème vient de l'encodage de ton fichier

    j'ai changé l'encodage (UCS-2 Little Endian) avec notepad++ en UTF-8 sans BOM et ça fonctionne très bien et sans espace

  7. #7
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Points : 12 256
    Points
    12 256
    Billets dans le blog
    1
    Par défaut
    Pour info:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $data[$a] =~ s/ +$//; #remplace des séries d'espaces par un seul
    Le code ne fait pas ce que dit le commentaire. Il supprime une série d'espaces uniquement à la fin de la chaîne et le remplace par rien du tout.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    comment résoudre mon problème

  9. #9
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    soit tu modifies l'encodage lors de l'écriture du fichier
    soit tu modifies l'encodage dans ton script: je ne m'en suis jamais servi mais je sais qu'il existe un module encode par exemple

    tu dois aussi pouvoir faire (pas sûr et pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open(FIC_IN, '<:utf8', "history.txt")

  10. #10
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Bonjour,

    Pour encoder toutes les entrées/sorties (lecture/écriture fichier) :
    Pour préciser que ton script.pl est en UTF8 et donc que les chaînes entre "" (entre autre) sont bien en UTF8 :

    Pour encoder seulement certaines entrées/sorties et conserver la possibilité d'encoder différemment d'autres fichiers : comme 6ril23 J'ai testé ça fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    open(FIC_IN, '<:utf8', "history.txt");
    open(FIC_OUT, '>:utf8', "Save_history.txt");
    OU :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    open IN_Fic, '<:encoding(UTF-8)', $fichier
    et dans ce cas bien sûr il ne faut pas :

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    j'ai essayé ce script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    open (FILE_IN,'<:utf8', "c:\\admin\\history.txt");
    while (<FILE_IN>){
    	my @toto = split(' ', $_);
    	print "$toto[0]\r\n"
    }
    mais j'ai toujours le même problème

  12. #12
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Slt,

    J'ai pris ton fichier history.txt effectivement il y a pb

    1- Je l'ai sauvegardé UTF-8 NO-BOM history_2.txt
    2- J'ai supprimé la première ligne et les 3 dernières qui sont vides et c'est OK :

    Enfin vite fait, il me semble ?

    [EDIT 13:20] regarde Laurent_2.jpg ya pas photo ya bien un encodage bizarre sur le 1er
    [EDIT 14:00] Suppression images

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    ce fichier est généré tous les jours par un script en powershell.
    Comment faire alors, pour que ce fichier soit compatible, sans faire ta manip de sauvegarde et de suppression.
    le but est de centralisé le résultat de différentes sauvegardes sur différents serveurs

  14. #14
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2013
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2013
    Messages : 247
    Points : 406
    Points
    406
    Par défaut
    je pense que tu peux forcer l'écriture en UTF-8 sans BOM dans ton script powershell

  15. #15
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Ben si vraiment il n'y a pas moyen de faire écrire powershell, que je ne connais pas, en utf8, il faut se peler la suppression de tous les caractères bizarres en perl, autrement dit un bon nombre de 00 et 20 mais pas tous faut voir de près !

    Mais assures-toi, avant qu'on se lance dans une usine à gaz, qu'il n'y a pas la possibilité de faire écrire powershell en UTF8...

    A moins qu'un pro des regex nous règle çà en 2 cuillères à pot

    [EDIT] Merci 6ril23 ça me rassure...

  16. #16
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 39
    Points : 27
    Points
    27
    Par défaut
    Merci à vous de m'avoir mis sur la piste de l'encodage
    j'ai modifié mon script powershell en forçant l'encodage de mon fichier en UTF8
    et j'ai testé ,c'est OK
    Encore merci

  17. #17
    Membre chevronné Avatar de dmganges
    Homme Profil pro
    Retraité. Ne recherche pas un emploi.
    Inscrit en
    Septembre 2011
    Messages
    1 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Retraité. Ne recherche pas un emploi.
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1 392
    Points : 2 044
    Points
    2 044
    Par défaut
    Pour celles et ceux qui viennent voir, serait-ce du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #Encodage UTF8
    $encodingMail = [System.Text.Encoding]::UTF8
    ?
    Je supprime les images

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. un espace de trop dans une somme
    Par tibofo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 11/10/2008, 10h57
  2. Un espace en trop avec <object>
    Par visiwi dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 31/08/2008, 20h55
  3. [HTML] Un espace en trop dans une frame
    Par Jim_Nastiq dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 03/05/2006, 11h58
  4. [String]effacer espaces en trop
    Par showlap1 dans le forum Langage
    Réponses: 9
    Dernier message: 24/11/2005, 17h40
  5. [HTML] espaces en trop
    Par Anduriel dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/11/2005, 20h44

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