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

Fortran Discussion :

Extraction et transformation des chiffres en caractères


Sujet :

Fortran

  1. #1
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Extraction et transformation des chiffres en caractères
    Bonjour,
    j'ai à lire un fichier écrit sous la forme suivante:


    4231 0000000000 0.00 0.00
    2841 1200000000 0.00 0.00
    5486 0032000000 0.00 0.00
    .
    .
    .
    etc

    mon objectif est d'extraire les dix chiffres écrit en colonne suivant:

    0000000000
    1200000000
    0032000000
    puis de transformer ces derniers en chaine de caractères afin de pouvoir extraire à nouveau chaque caractère.
    Merci de votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonjour tidjibra.

    Il aurait été préférable de créer un nouveau post.

    Pourquoi ne pas lire les nombres de la seconde colonne comme des chaînes de caractères :
    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
    program conversion_chaine
        implicit none
        character(len=100) :: ligne
        integer :: ios, nb_lig, i, j
        character(len=10), dimension(:), allocatable :: mots
     
        ! Compte le nombre de lignes
        open(unit=11,file='file.in',status='old')
        nb_lig = 0
        do
            read(11,*,iostat=ios) ligne
            if (ios/=0) exit
            nb_lig = nb_lig + 1
        enddo
        close(11)
     
        ! Allocation du tableau
        allocate(mots(nb_lig))
     
        ! Extraction de la seconde colonne
        open(unit=11,file='file.in',status='old')
        nb_lig = 1
        do
            read(11,*,iostat=ios) ligne, mots(nb_lig)
            if (ios/=0) exit
            nb_lig = nb_lig + 1
        enddo
        close(11)
     
        ! Vérification
        do i = 1, size(mots)
            print '(a,i3)', 'Mot numero : ', i
            do j = 1, len(mots(i))
                print '(a)', mots(i)(j:j)
            enddo
            print *
        enddo
     
        deallocate(mots)
     
    end program conversion_chaine

  3. #3
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut Reponse
    Merci Dardanos
    finalement, à partir des lignes extraites en chaine de caractère, mon objectif est de créer une fonction me permettant d'extraire des sous chaines à partir de leur position dans les chaines suivantes:

    0000000000
    1200000000
    0032000000

    chaque sous chaine correspond à deux digits. on en a donc en tout 5 digits sur les digits de chaque ligne.
    par exemple:
    -sur la première ligne les chiffres 00 00 00 00 00 représentent 5 sous chaines. sauf dans ce cas il n'y a pas de position à préciser car toutes les sous chaines sont égales à zéros.
    -sur la deuxième ligne les chiffres 12 00 00 00 00 représentent 5 sous chaines. Dans ce cas on précisera la position de la

  4. #4
    Candidat au Club
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 2
    Points
    2
    Par défaut suite
    Excusez moi, je reprends à zéros mon explication.
    Au fait mon objectif est d'extraire des sous chaines sur chaque ligne du fichier fic.txt suivant:

    0000000000
    3500000000
    0035000000
    0000350000
    0000003500
    0000000035
    0012580000
    2738927413

    Dans mon cas, chaque deux chiffres de chaque ligne représente une sous chaine. Par exemple:
    -sur chaque ligne du fichier fic.txt, on a (au maximum) les 5 sous chaines suivantes:


    00 00 00 00 00 (sous chaines: 00, 00, 00 , 00 , 00)

    35 00 00 00 00 (sous chaines: 35, 00, 00 , 00 , 00)

    00 35 00 00 00 (sous chaines: 00, 35, 00 , 00 , 00)

    00 00 35 00 00 (sous chaines: 00, 00, 35 , 00 , 00)

    00 00 00 35 00 (sous chaines: 00, 00, 00 , 35 , 00)

    00 00 00 00 35 (sous chaines: 00, 00, 00 , 00 , 35)

    00 12 58 00 00 (sous chaines: 00, 12, 58 , 00 , 00)

    27 38 92 74 13 (sous chaines: 27, 38, 92 , 74, 13)

    La recherche de ces sous-chaine est repéré à partir de sa position. Ainsi en gros on a 6 positions:

    -position 0: tous les sous chaines sont représentés par des zéros.
    Exemple:

    00 00 00 00 00 (sous chaines: 00, 00, 00 , 00 , 00)

    -position 1: au moins un chiffre définissant une sous chaine est différent de zéros et est situé à la première position.
    Exemple:

    35 00 00 00 00 (sous chaines: 35, 00, 00 , 00 , 00 ayant comme
    position 2)

    les chiffres 35 ont au moins un chiffre différent de zéro et sont situés à la première position (position 1)

    -position 2: Idem que la position 1 sauf que les chiffres définissant la sous chaine sont situés à la deuxième position;
    Exemple:

    00 35 00 00 00 (sous chaines: 00, 35, 00 , 00 , 00 ayant comme
    position 2)
    -les autres positions (position 3, position 4 et position 5) sont déterminés de la meme façon.
    par exemple:

    00 00 35 00 00 (sous chaines: 00, 00, 35 , 00 , 00 ayant la
    position 3)

    00 00 00 35 00 (sous chaines: 00, 00, 00 , 35 , 00 ayant la
    position 4)

    00 00 00 00 35 (sous chaines: 00, 00, 00 , 00 , 35 ayant la
    position 5)



    Remarque:

    on peut avoir un cas où il ya plusieurs positions (5 au maximum) à la fois sur une meme ligne.

    Par exemples: les deux lignes du fichier fic.txt suivants:

    00 12 58 00 00 (sous chaines: 00, 12, 58 , 00 , 00 ayant simultanément
    les deux positions suivantes: la position 2 correspondant
    aux chiffres 12 et la position 3 correspondant aux chiffres
    58)





    27 38 92 74 13 (sous chaines: 27, 38, 92 , 74 , 13 ayant simultanément
    les 5 positions suivantes: la position 1 correspondant aux
    chiffres 27, la position 2 correspondant aux chiffres 38, la
    position 3 correspondant aux chiffres 92, la position 4
    correspondant aux chiffres 74 et la position 5
    correspondant aux chiffres 13).


    Merci de votre aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 15/07/2015, 18h18
  2. Transformer des chaînes de caractère
    Par phyfab dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/09/2013, 18h52
  3. Transformation des caractères accentués
    Par stounouslous dans le forum NetBeans
    Réponses: 9
    Dernier message: 29/09/2010, 17h14
  4. Réponses: 11
    Dernier message: 10/03/2008, 12h49
  5. Réponses: 2
    Dernier message: 13/05/2007, 18h34

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