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 :

comparer les tailles de deux fichiers


Sujet :

Langage Perl

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut comparer les tailles de deux fichiers
    Bonjour, je veux comparer deux fichiers, je veux dire certainement ils sont identiques, mais les blocs sont mélangés par rapport à l'autre ( et il y'a aussi des espaces)!
    par ex:
    fichier 1 fichier 2
    aaaaaaaaaaaa dddddddddddd
    bbbbbbbbbbbb
    bbbbbbbbbbbb
    dddddddddddd cccccccccccc
    cccccccccccc aaaaaaaaaaaa

    Je me demande s'il est possible de comparer ces fichiers sans comparer ligne par ligne. Vouns avez une idée sur la manière de faire, soit calculer la taille du fichier soit...Merci

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Bonjour,

    pour comparer tes deux fichiers via le poids qu'ils occupent sur le disque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if ( (-s "fichier1.txt" == -s "fichier2.txt") && (-s "fichier1.txt" != 0) )
    {
        print "les deux fichiers existent et sont de taille identique\n";
    }
    Maintenant, si tu veux pouvoir comparer leur contenu afin d'être sûr qu'il est identique alors que l'ordre des lignes peut différer d'un fichier à l'autre, je te préconiserai de charger chaque fichier en mémoire dans un tableau. Ensuite, tu tries les deux tableaux et il te suffit ensuite de les comparer.

    Ils pèsent combien, tes fichiers ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    En pricipe c'est les 4000 lignes chacun...merci pr l'idée du tableau j'avais pas pensé...mais ya des blocs ds le fichier ou il est sous forme d'espace donc li'dée du tableau peut faire l'affaire!!merci


    par ex : fichier 1

    aaaaa
    bbbbb


    ccccc
    ddddd

    333333

  4. #4
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Bonjour,

    Ton raisonnement est faux : deux fichiers contenant exactement les mêmes caractères mis à part les sauts de lignes ne péseront pas la même taille. En revanche, tu peux lire tes fichiers ligne à ligne, et charger chaque ligne dans un tableau sauf si c'est un saut de ligne, puis faire la manip d'Arioch. Ce n'est qu'une solution, il en existe sûrement beaucoup d'autres !
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    ok, c noté. j'ai un autre problème. Ces deux fichiers n'ont même pas a vrai dire la meme struture , je te done un exemple, ds une ligne de l'un des fichiers ya des espaces , par exemple:
    fichier 1 : abababa car t
    fichier 2 : abababa car t

    je dois donc avant tout éliminer les espaces supplémentaires...et là je en sais pas comment faire ce traitement!!! v en avez une idée!

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    fichier 1 :
    ababababaespacecar
    fichier2:
    ababababaespaceespacecar

  7. #7
    Membre chevronné
    Avatar de Woufeil
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    1 076
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 1 076
    Points : 2 004
    Points
    2 004
    Par défaut
    Oui, avec une simple substitution, tu peux faire ça
    Un truc de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my $var =~ s/\s{2,}/\s/g
    "En essayant continuellement, on finit par réussir. Donc : plus ça rate, plus on a de chances que ça marche" (devise Shadock)
    Application :

    ainsi qu'à regarder la avant de poser une question.

    La rubrique Perl recrute, contactez-moi.

  8. #8
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    wi mais moi je veux laisser qu'un seul espcace ( désolée mais je me perds aveec les parenthèses), bon je veux des lignes avec une seule espace, le genre:
    marespaceespaceespacetespacebespacen
    ça donne :
    marespacetespacebespacen

    mercii

  9. #9
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    j'explique plus, le but de laissser juste un seul espace c pr avoir en fin de compte un modèle de fichier sur koi je peux appliquer u autre script, alors svp si klk un a une idée pr enlever les occurences des espaces ( ça veut dire il faut pas eliminer ts les espaces mais laisser uns eul espace), la ligne que tu m'as propose elimine ts les espaces sils sont plusieurs donc ca me donne:
    ex : tarespaceespacebespacer
    tarsbr

  10. #10
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    En admettant que tes fichiers s'appelent fichier1.txt et fichier2.txt, voici une méthode pour vérifier rapidos si leur contenu est identique :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    #!/usr/bin/perl -w
    use strict;
     
    my ($fic1, $fic2) = ("fichier1.txt", "fichier2.txt");
    my @tab1;
    my @tab2;
     
    @tab1 = ChargeTab($fic1);
    @tab2 = ChargeTab($fic2);
     
    if (@tab1 eq @tab2)
    {
        print "données identiques entre $fic1 et $fic2\n";
    }
    else
    {
        print "données différentes entre $fic1 et $fic2\n";
        print "$fic1 contient ", scalar(@tab1), " lignes valides\n";
        print "$fic2 contient ", scalar(@tab2), " lignes valides\n";
    }
     
    sub ChargeTab
    {
        my $fic = shift();
        my @retour;
     
        open(FIC, "$fic") or die("lecture $fic erreur : $!\n");
        while(<FIC>)
        {
            chomp();
            # attention, ici, je ne charge par une ligne vide ou ne contenant que des espaces
            if ($_ && $_ !~ /^ +$/)
            {
                s/ +/ /g;
                push(@retour, $_);
            }
        }
        close(FIC);
        @retour = sort(@retour);
        return(@retour);
    }

  11. #11
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    j'ai trouvé la reeponse ds ce forum la, le prblm ça est déja posé et ça donne:
    $var = $chaine =~ s/\s+/ /g;
    mercii

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par narmika
    j'ai trouvé la reeponse ds ce forum la, le prblm ça est déja posé et ça donne:
    $var = $chaine =~ s/\s+/ /g;
    mercii
    plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($var) = $chaine =~ s/\s+/ /g;
    car il te renvoie un tableau avec toutes les occurences trouvées, sinon tu recupera plutot le nombre de cases qu'il y a dans le tableau

  13. #13
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 95
    Points : 27
    Points
    27
    Par défaut
    Ok merci pr vos suggestions, pr Arioch le bloc de code que tu m'as fournie est en fait une bne idée, je t'en remercie..mais je ne saisi pas tb comment le programme traite le cas des lignes vides..merci

  14. #14
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    1 572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 1 572
    Points : 2 014
    Points
    2 014
    Par défaut
    Citation Envoyé par narmika
    Ok merci pr vos suggestions, pr Arioch le bloc de code que tu m'as fournie est en fait une bne idée, je t'en remercie..mais je ne saisi pas tb comment le programme traite le cas des lignes vides..merci
    C'est simple : mon prog ne traite pas les lignes vides et ne les charge pas dans le tableau. Il considère les lignes vides comme du bruit (ou de la pollution si tu préfères), tout comme les espaces multiples qui se suivent.

Discussions similaires

  1. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  2. Outils sur les différences entre deux fichiers XML
    Par Community Management dans le forum XML/XSL et SOAP
    Réponses: 19
    Dernier message: 21/07/2008, 15h21
  3. [windev 5.5] Recupérer les données de deux fichiers
    Par nemosfib dans le forum WinDev
    Réponses: 3
    Dernier message: 27/07/2007, 07h21
  4. Réponses: 4
    Dernier message: 26/07/2007, 10h49
  5. comparer les contenus de 2 fichiers texts
    Par yandoka dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 08/04/2007, 13h53

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