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

Algorithmes et structures de données Discussion :

Basculer des lignes en colonnes


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut Basculer des lignes en colonnes
    Messieurs,
    il se pose à moi un problème de traitement de gros fichiers :

    J'ai besoin de traiter des données contenues dans un gigantesque fichier;

    Celui ci est organisÅ en 326 sections qui ont une en-tÁte suivie des informations rÅelles;
    les en-tÁtes de chaque section contiennent des informations similaires, puis les donnÅes elles mÁmes dont le nombre oscille entre 1800 et 25000 valeurs rÅelles.

    J'ai besoin pour retraiter ces donnÅes, qu'elles soient organisÅes en 326 colonnes et non plus en sections semblables È des lignes.

    Comment faire sans ouvrir et fermer 326 fois des fichiers temporaires ?

    (C'est du fortran, mais le problÉme est plus un souci d'algorithmique qu'une particularitÅ de ce langage)

    Merci de m'aider,
    David

  2. #2
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Celui ci est organisÅ en 326 sections qui ont une en-tÁte suivie des informations rÅelles;
    les en-tÁtes de chaque section contiennent des informations similaires, puis les donnÅes elles mÁmes dont le nombre oscille entre 1800 et 25000 valeurs rÅelles.
    En admettant que tes valeurs réelles sont de 8 octets chacune, ça fait 65,2 mégabits ou 8,15 mégaoctets au total. Alors, vérifie d'abord si tu as suffisamment de mémoire vive pour stocker tout ça.

    A part ça, il y a quelque chose qui n'est pas clair dans la formulation de ton problème: que signifie le terme "section". En d'autres termes, quelle est la structure exacte de ton fichier? Comment les "sections" sont-elles séparées l'une de l'autre?

    Jean-Marc Blanc

  3. #3
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Salut FR...,
    merci de me répondre si rapidement; alors mon fichier c'est de l'ascii, ce qui fait que chaque valeur du fichier que je lis est stockée sur 13 ou 14 caractères. (format E13.6 du fortran, ce qui veut dire un champ de 13 caractères de large et 6 chiffres après le point décimal; et il y a un blanc de plus pour séparer les données les unes des autres). Ça c'est pour la taille du fichier réel; maintenant, en ce qui concerne le besoin en mémoire, je sais qu'il n'y en a pas assez puisque mon premier essai à capoté : j'avais essayé de tout mettre en mémoire dans un grand tableau de 326 lignes par 24585 colonnes, et à l’exécution du progamme, l'OS m'a répondu qu'il n'y avait pas assez de mémoire ni de swap. (la bécane qui a le compilateur fortran est une archi-vieille HP9000 sous HPUX)
    Ça fait environ 800.000 valeurs, de huit octets chacun, soit 6.400.000 octets; je ne crois pas que la bécane les ait en mémoire; ça m'étonne un peu plus qu'elle ne les ait pas en swap, mais mon essai ayant planté, c'est une raison suffisante.
    Donc en résumé, je crois ne pas avoir assez de mémoire et c'est pourquoi j'envisage de passer par des fichiers temporaires.
    Maintenant en ce qui concerne la structure de mon fichier, voici les détails : chaque section ressemble à ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    NUVOL     1
    NBOCCU    6
    .
    ..
    ... quelques autres informations
    ..
    .
    NVALEURS    1837
    1.234567E+89 -9.876543E+21...
    .
    ..
    ...183 lignes de dix valeurs, et une ligne de sept valeurs.
    -1.111111E+11 2.222222E+22 -3.333333E+33 4.444444E+44 -5.555555E-55 6.666666E+66 -7.777777E+77
    Voilà, j'espère que j'ai été assez clair et que vous pourrez m'aider,
    David
    EDIT: les "sections" sont juste les unes à la suite des autres, sans même une ligne blanche, c'est le début de la section suivante et le nombre de valeurs qui font foi.

  4. #4
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Bonjour. Deux options :
    • traiter le fichier sur une autre machine, si possible ;
    • ne pas faire la modification « en place ». Créer le fichier de sortie, vide initialement, et le peupler ligne par ligne, en parcourant le fichier d'entrée (qui ne sera pas modifié). À chaque nouvelle ligne du fichier de sortie, on parcourt le fichier d'entrée dans son ensemble en copiant les n-ème valeurs des sections à l'itération #n.


    Cdlt,

  5. #5
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut
    Bonsoir et merci de répondre encore très vite; alors une autre machine, je vais essayer parce que le code compilé doit pouvoir marcher sur une autre HP qui n'a pas de compilo, mais dont j'espère qu'elle a plus de mémoire, ce qui n'est pas sûr du tout; quant à remplir un fichier vide, je vais peut-être être obligé d'en passer par là et ça me parait jouable, donc RDV demain après le boulot qui me présente ces difficultés réjouissantes.
    Mais j'ai pas tout compris quand même :
    Ça veut-il dire que le fichier de sortie que je crée, il faudra que je l'ouvre en accès direct pour y placer peu à peu ce qui m'intéresse ?
    David
    EDIT: mais non, ça ne va pas aller, puisque je veux faire des colonnes; enfin si, alors ça veut dire qu'au premier passage, je dois prendre les première valeurs de chaque ligne du fichier de départ, et que je dois faire 24585 passages pour aller jusqu'au bout, BEN OUAIS, SUPER et merci encore.

  6. #6
    Membre Expert
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Par défaut
    Attention, demain il est vendredi.

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    Ça veut-il dire que le fichier de sortie que je crée, il faudra que je l'ouvre en accès direct pour y placer peu à peu ce qui m'intéresse ?
    Tu mélanges plusieurs choses...

    • FORTRAN a plusieurs modes d'accès à un fichier : direct, ou séquentiel.
    • FORTRAN traite un tableau en mémoire par colonne et non par ligne
    • Enfin, tu as ton problème d'inversion par rapport à ce que tu voudrais



    D'autre part, tu dis :


    mais non, ça ne va pas aller, puisque je veux faire des colonnes; enfin si, alors ça veut dire qu'au premier passage, je dois prendre les première valeurs de chaque ligne du fichier de départ, et que je dois faire 24585 passages pour aller jusqu'au bout,
    326*24585 devrait se faire dans un temps raisonnable (< 10 min) sur une bécane normale...

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/08/2008, 19h51
  2. Transformer des lignes en colonnes
    Par ofinot dans le forum Requêtes et SQL.
    Réponses: 15
    Dernier message: 30/07/2008, 11h45
  3. basculer des lignes en colonnes
    Par A5P1R1N3 dans le forum Excel
    Réponses: 3
    Dernier message: 30/05/2008, 10h17
  4. Boucle sur des lignes et colonnes
    Par Livet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/08/2007, 19h45
  5. [T-SQL] Convertir des lignes en colonne
    Par cortex93 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/12/2005, 16h17

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