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 :

Gestion des chaines de caracteres


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut Gestion des chaines de caracteres
    Bonjour à tous,

    J'ai trois problèmes qui sont tous liés à résoudre:
    Premier problème: J'aimerai scinder une des chaines de caracteres en les transformant en sous chaines de caracteres dans une liste.
    Par exemple, j'ai la liste (fichier fic.txt) contenant sur chaque ligne (8 lignes en tout), les 14 chiffres suivantes:

    Ligne1: 12010000000000
    Ligne2: 12012100000000
    Ligne3: 12010021000000
    Ligne4: 12010000210000
    Ligne5: 12010000002100
    Ligne6: 12010000000021
    Ligne7: 12011235000000
    Ligne8: 12010023350000

    l'objectif est de les transformer en chaines de caracteres et de les sincider en deux sous caractères ( 4 sous caracteres + 10 sous caracteres) sur chaque ligne de la manière suivante:

    Ligne1: 1201 (4 sous caracteres) 0000000000 (10 sous caracteres)
    Ligne2: 1201 (4 sous caracteres) 2100000000 (10 sous caracteres)
    Ligne3: 1201 (4 sous caracteres) 0021000000 (10 sous caracteres)
    Ligne4: 1201 (4 sous caracteres) 0000210000 (10 sous caracteres)
    Ligne5: 1201 (4 sous caracteres) 0000002100 (10 sous caracteres)
    Ligne6: 1201 (4 sous caracteres) 0000000021 (10 sous caracteres)
    Ligne7: 1201 (4 sous caracteres) 1235000000 (10 sous caracteres)
    Ligne8: 1201 (4 sous caracteres) 0023350000 (10 sous caracteres)

    Deuxième problème: une fois que j'ai scindé en sous caractère chacune des lignes du fichier fic.txt, je dois extraire à partir des 10 sous caractère de chaque ligne une suite de deux sous caracteres (5 au maximum sur chaque ligne). Par exemple, pour la liste des 10 sous caracteres extraites du fichier fic.txt suivante:

    Ligne1: 0000000000
    Ligne2: 2100000000
    Ligne3: 0021000000
    Ligne4: 0000210000
    Ligne5: 0000002100
    Ligne6: 0000000021
    Ligne7: 1235000000
    Ligne8: 0023350000

    on doit sur chaque lignes partionné (scinder) par paire de deux (on en a en tout 5 paires de 2) autres sous caracteres en les partitionnant de la manière suivante:

    Ligne1: 00 00 00 00 00 (les deux paires sont 00, 00, 00, 00, 00)
    Ligne2: 21 00 00 00 00 (les deux paires sont 21, 00, 00, 00, 00)
    Ligne3: 00 21 00 00 00 (les deux paires sont 00, 21, 00, 00, 00)
    Ligne4: 00 00 21 00 00 (les deux paires sont 00, 00, 21, 00, 00)
    Ligne5: 00 00 00 21 00 (les deux paires sont 00, 00, 00, 21, 00)
    Ligne6: 00 00 00 00 21 (les deux paires sont 00, 00, 00, 00, 21)
    Ligne7: 12 35 00 00 00 (les deux paires sont 12, 35, 00, 00, 00)
    Ligne8: 00 23 35 00 00 (les deux paires sont 00, 23, 35, 00, 00)

    Troisième problème: je dois rechercher la position qu'on note par p sur chaque ligne de chacune des deux paires obtenus par partitionnement précédemment. dans le deuxieme probleme. Toutetefois si toutes les deux paires sont 00 on note la position par p0, sinon on note la position selon l'ordre d'apparition de chaque deux paires. Par exemple, à partir du deuxième probleme, on:

    Ligne1: 00 (p0) 00 (p0) 00 (p0) 00 (p0) 00 (p0)

    Ligne2: 21 (p1) 00 (p0) 00 (p0) 00 (p0) 00 (p0)

    Ligne3: 00 (p0) 21 (p2) 00(p0) 00 (p0) 00 (p0)

    Ligne4: 00 (p0) 00 (p0) 21 (p3) 00 (p0) 00 (p0)

    Ligne5: 00 (p0) 00 (p0) 00 (p0) 21 (p4) 00 (p0)

    Ligne6: 00 (p0) 00 (p0) 00 ( p0) 00 (p0) 21 (p4)

    Ligne7: 12 (p1) 35 (p2) 00 (p0) 00 (p0) 00 (p0)

    Ligne8: 00 (p0) 23 (p2) 35 (p3) 00(p0) 00 (p0)


    Remarque:
    p0 =position zéros c'est-à-dire qu'il n'ya aucune position
    p1= première position
    p2= deuxième position
    p3= troisième position
    p4= quatrième position
    p5= cinquième position

    Le nombre de position maximale est égale à 5.

    Merci de votre aide

  2. #2
    Membre émérite
    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
    Par défaut
    Salut !

    Personnellement, j'associerais à chaque chaine de 14 caractères, une structure (type personnalisé). L'ensemble des structures serait mis dans un tableau.

    La structure aurait les attributs suivants :
    1) une chaine de 4 caractères (pour ce que tu désignes par première problème),
    2) un tableau de 5 chaines de caractères de longueur 2 (deuxième problème),
    3) une manière de coder les positions des sous-chaines (troisième problème).

    Le point 3 est-il vraiment nécessaire ? Car on peut prévoir un traitement directement à partir du tableau du point 2, et donc ne pas stocker cette information.

    Si tu tiens vraiment à la stocker, je conseille de prendre un entier. Il faudrait par exemple donner un poids 2**4 à la sous-chaine 1, 2**3 à la sous-chaine 2, ... et 2**0 à la sous-chaine 5. Si la sous-chaine contient un nombre positif, on lui fait correspondre la valeur 1, et 0 autrement. Ainsi en faisant une somme pondérée, on obtient un entier entre 0 et 31 qui code sans ambiguïté les positions.
    L'opération de décodage se ferait avec la fonction MOD.
    Il est nécessaire de coder une fonction IsPositif à partir du modèle IsNumeric récemment mis sur ce forum.

  3. #3
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut Merci Dardanos
    Merci Dardanos pour ta réponse.
    En effet, le troisième problème et le deuxième sont liés mais c'est pour apporter plus de précision que j'ai écris cela dans une autre sous partie.
    je suis débutant en fortran et donc les notions de structure et de décodage avec la fonction MOD je ne connais pas bien.
    Si tu peux m'approrter plus d'explication, ce sera super!
    Merci d'avance!

  4. #4
    Membre émérite
    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
    Par défaut
    Salut.

    Il faut que tu précises à quoi vont servir les données.

    Je comprends que le programme utilisera un fichier texte ayant 14 chiffres par ligne.
    J'ai proposé une façon d'organiser les données en mémoire d'après ce que tu as dit. Si tu précises ce que tu souhaites en faire, on pourra proposer quelque chose mieux adaptée (par exemple ne rien stocker des infos lues mais seulement les résultats du traitement, ou encore stocker les chaines de 14 caractères et traiter une chaine lors d'un appel explicite d'une fonction).

    Tu dois te poser des questions comme :
    Retourner les résultats pour toutes les lignes ou seulement pour une seule ?
    Retourner tous les résultats en une seule fois ? Ou "problème" par "problème" ?
    Pour une chaine, les 3 "problèmes" doivent être résolus en une seule fois ou séparément ?
    Peut-on ajouter/supprimer des lignes ?
    etc...

    Tu es le seul capable de juger de ce qui est le plus pertinent.

    C'est la partie la plus difficile du travail.

  5. #5
    Membre habitué
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Par défaut Salut!
    Les données que j'ai serviront à faire des calculs en utilisant d'autres fichiers plutard. En effet, à partir du fichier fic.txt, lobjectif est de stocker les chaines de 14 caractères et les traiter séquentiellement (ligne par ligne) lors d'un appel explicite de fonction. Ensuite, je dois retourner tous les resultats en une seule fois. On ne peut ajouter ni supprimer de la liste.

    Ces données me serviront à rechercher à partir de chaque paire de deux chiffres contenues dans le fichier fic.txt sa ligne correspondante dans un autre fichier que je nomme par fic2.txt. Par exemple, si je prends la ligne3 du fichier fic.txt :

    Ligne3: 12010021000000

    je dois d'abord la transformer sous le format ABCD où les ABCD seront lues de la manière suivante:


    12010021000000 équivaut à: A B C D

    1 201 2 1


    Par si je prends la ligne 7 :

    Ligne7: 12011235000000 , j'aurai deux lignes de format ABCD de la manière suivante:

    A B C D

    1 201 1 2

    puis:

    A B C D

    1 201 3 5

    chaque initiale CD représente les deux paires de chiffres qu'on cherchait dans le probleme 2 et le probleme 3.


    une fois cette transformation au format ABCD faite, j'aurai à les lire explicitement dans un autre fichier que j'ai appelé fic2.txt qui est de la forme suivante pour les deux lignes (ligne 3 et ligne 8) précédemment lu:
    Pour la ligne 3, on le lira dans fic2.txt via son son format ABCD par la ligne suivante:

    120121 2.3 5.8 6.8 4.1, etc...

    où les chiffres 2.3 , 5.8, 6.8 et 4.1 sont des valeurs que je vais utilisé plutard pour faire des calculs.

    Pareil pour la ligne 8, j'aurai deux lignes à lire dans le fichier fic2.txt correspondant. par exemple, j'aurai les lignes suivante:

    120112 3.5 4.7 9.25 8.327 , etc...
    120135 -3.5 - 4.7 -9.25 -8.327 , etc...

  6. #6
    Membre émérite
    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
    Par défaut
    Ces précisions étaient nécessaires.

    Je comprends que "CD" correspond à la valeur de la sous-chaine dont la chaîne principale correspond à une information à extraire dans fic2.txt.
    Mais deux chaînes peuvent avoir le même format ABCD. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    12010021000000
    12012100000000
    donne "120121". Est-ce qu'il n'y a pas quelque chose qui cloche ?

    Où est utilisée l'information sur la position (problème 3) ?

    Si dans une chaîne, toutes les sous-chaînes sont de valeur nulle, y a-t-il quelque chose à extraire dans fic2.txt ? Et si oui, quel est alors le format ABCD ?

Discussions similaires

  1. [Débutant] Gestion des chaines de caracteres
    Par bahja29 dans le forum MATLAB
    Réponses: 3
    Dernier message: 16/03/2009, 12h05
  2. probleme d'heritage sur des chaines de caracteres
    Par pikiwiki dans le forum C++
    Réponses: 3
    Dernier message: 24/05/2006, 21h01
  3. Débutant : Pb gestion des chaines...
    Par SebRs dans le forum C++
    Réponses: 3
    Dernier message: 29/03/2006, 15h13
  4. Lire des fichiers texte (des chaines de caracteres) ifstream
    Par jamesleouf dans le forum SL & STL
    Réponses: 1
    Dernier message: 22/03/2006, 23h58
  5. [langage] Compter des chaines de caractères
    Par julfra dans le forum Langage
    Réponses: 2
    Dernier message: 26/05/2004, 17h42

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