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

Shell et commandes GNU Discussion :

fusion fichier avec un 'ou binaire'


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut fusion fichier avec un 'ou binaire'
    Bonjour,

    J'ai un fichier de départ qui peut se représenter binairement par exemple comme suit :
    "010101010101010101010101010101010101010101"

    Quand je le télécharge, je perds des paquets. Mon fichier à donc des trous de '0000000000'.
    Fichier après premier téléchargement :
    "000000000001010101010101010101010101010101"
    Fichier après un autre téléchargement :
    "010101010101010101010101010101000000000000"
    J'ai donc sur le premier fichier perdu des données au début et sur le deuxième, j'ai perdu des données à la fin.
    J'aimerai faire un 'ou binaire' entre mes deux fichiers corompus pour récupérer mon fichier de départ.
    Je me tourne vers un script car je ne peux pas installer sur mon linux le logiciel 'merge' qui aurait pu mettre très utile. Je tourne en rond avec la commande 'diff'.

    Merci pour votre aide.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Essai avec ça:

    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
     
    #!/usr/bin/ksh
    FILE_A=$1
    FILE_B=$2
     
    set -A tbl_A
    set -A tbl_B
    for i in $(cat $FILE_A | sed -e 's/./& /'g) ; do
        tbl_A[${#tbl_A[*]}]=$i
    done
    for i in $(cat $FILE_B | sed -e 's/./& /'g) ; do
        tbl_B[${#tbl_B[*]}]=$i
    done
     
    typeset -i t=0
    while [[ t=$(( t + 1 )) -le ${#tbl_A[*]} ]] ; do
        if [[ -n  ${tbl_A[$(( $t - 1 ))]} ]] && [[ -n  ${tbl_B[$(( $t - 1 ))]} ]] ; then
    	[[ $(( ${tbl_A[$(( $t - 1 ))]} + ${tbl_B[$(( $t - 1 ))]} )) -gt 0 ]] && printf "1" || printf "0"
        fi
    done
    echo
    Y'a surement deux ou trois reglages restants à faire, mais chez moi ca fonctionne.

    Lilian.

  3. #3
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    peu-être penser s'attaquer à la source?

    En effet, rien ne te garantie que la fusion des deux fichier donnera le bon résultat. A moins que tu ne transfert aussi un checksum ou quelque chose d'équivalent (qui rendra la probabilité d'erreur négligeable).

    Qu'utilises-tu pour le transfert?

    Peut-être faut-il changer les options de transfert pour obtenir directement le bon fichier.
    Exemple avec ftp jouer entre le mode binaire et ascii.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Citation Envoyé par lilian_h
    Y'a surement deux ou trois reglages restants à faire[...]
    je confirme :
    Code ksh93 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/usr/bin/ksh
     
    tbl_A=( $(sed 's/./& /g' $1) )
    tbl_B=( $(sed 's/./& /g' $2) )
     
    for (( t=0; t<${#tbl_A[@]}; t++ ))
    do if [ -n ${tbl_A[t]} -a -n ${tbl_B[t]} ]
       then (( ${tbl_A[t]} + ${tbl_B[t]}?(out=1):(out=0) ))
            printf $out
       fi
    done
    echo
    ça fonctionne pareil en bash.

    Sinon, je suis de l'avis de Jabbounet.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    N_BaH,

    Je ne maitrise pas suffisamment Bash pour en proposer des solutions.

    et tu as conserver le
    #!/usr/bin/ksh
    Et je ne pensais pas à ce genre de réglages; qui n'en sont pas d'ailleurs, tu proposes seulement d'utiliser Bash ; mais plutôt à transformer son binaire avec od, et vice-versa.

    Je suis aussi de l'avis de Jabbounet. Quelle type de connexion utilises tu pour avoir autant de trous ?

    Lilian.

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    non, non, c'est bien le shebang que j'ai utilisé pour tester le script, et qui appelle ksh93; j'aurais dû préciser que cela pourrait ne pas fonctionner avec tous les ksh...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Gloops, désolé,

    Et effectivement ca ne fonctionne pas chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    syntax error at line 3 : `(' unexpected
    Merci pour l'info
    Lilian.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 166
    Par défaut
    Je suis parti sur un programme C qui fonctionne.

    Je vous donne le lien du sujet que j'ai ouvert sur le forum 'langage C'.

    http://www.developpez.net/forums/d98...usion-fichier/

    Merci à vous tous!

  9. #9
    Membre expérimenté
    Homme Profil pro
    Gérant infopsylon
    Inscrit en
    Juin 2010
    Messages
    215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Gérant infopsylon
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2010
    Messages : 215
    Par défaut
    Je pense que c'est une bonne solution.
    Lilian.

Discussions similaires

  1. lecture binaire d'un fichier avec header incorporé
    Par gmanouvrier dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2013, 18h05
  2. Réponses: 13
    Dernier message: 05/12/2011, 14h09
  3. Tri de fichier avec zones en binaire
    Par Papybrus dans le forum Unix
    Réponses: 14
    Dernier message: 06/01/2009, 06h16
  4. Réponses: 2
    Dernier message: 24/01/2007, 17h38
  5. enregistrer dans un fichier avec une appli mdi
    Par ferrari dans le forum C++Builder
    Réponses: 4
    Dernier message: 05/05/2002, 15h17

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