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

C++ Discussion :

Importer gros fichier


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut Importer gros fichier
    Bonjour,

    J'ai une application dans laquelle j'importe un gros fichier texte binaire, au point ou j'obtient une exception de depassement de capacite memoire.
    j'ai 4 giga de ram et le fichier fait 5 giga.

    la serialization ne marche pas dans ce cas?
    que dois je faire pour le charger partiellement.

    Merci de votre reponse d'avance.
    assia

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Par défaut
    Un fichier texte binaire ?

    Tu veux en faire quoi de ton fichier une fois chargé ?

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut Importer gros fichier
    Merci tout d'abord pour votre reponse.

    c'est pour faire des traitement dessus: interpretations de son contenu, traitements puis visualisations 2d par exemple.

  4. #4
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    La quantité de RAM n'a, généralement, que peu à voir avec la mémoire disponible pour une application...

    Le plus souvent, on remarque que le système d'exploitation place lui meme des limites à la quantité de mémoire (RAM+ mémoire virutelle) que l'application peut utilser.

    Ceci dit, un fichier texte "binaire", cela parrait quelque peu antinomique...

    Ou bien tu travaille sur un fichier texte, ou bien tu travaille sur un fichier binaire, mais sur un fichier texte binaire... j'ai des doutes

    D'un autre coté, à moins que tu ne te décide à nous expliquer plus précisément le but du fichier, on peut présumer que, pour gérer la première donnée contenue dans le fichier, tu n'as pas vraiment besoin de la donnée qui se trouve juste avant la fin, et inversément...

    Donc la solution passerait peut etre par la prise d'une décision simple: Gérer le fichier en plusieurs parties, non
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pour info,
    Windows xp peut allouer au maximum 2Go d'un coup et 3Go si on touche une truc dans boot.ini. Car sur l'adressage 32bits, windows s'en garde 1.

    Apres, Linux a plus de capacité normalement.

    Pour t'aider,tu peut peut etre utiliser une sorte de buffer que tu utilise pour traiter le fichier morceau par morceau avec des accés contenu du fichier par des repositionnements (seek,...).

  6. #6
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut
    Quelle fonction as-tu utilisé ?
    Sur quel système ?

  7. #7
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Ou Si c'est du text, tu peut peut etre utiliser un buffer compressé

  8. #8
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Pour les histoires de memoire pour un proces tu peut regarder
    http://www.developpez.net/forums/sho...d.php?t=117081

  9. #9
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Bonjour,
    Merci a tous.

    voici la fonction que j'utilise:

    FileFormat::openImport(CFile &file, const CString& filename, bool is_binary) const {
    FileFormat *self = (FileFormat *) this;
    self->filename_ = filename;
    self->in_import_ = true;
    self->current_line_ = 0;

    CFileException file_exception;
    if (is_binary) {
    if (!file.Open(filename, CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    else {
    if (!file.Open(filename, CFile::modeRead | CFile::typeText | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    return true;
    }

    assia

  10. #10
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut [C++/CLI]:importer gros fichiers
    Bonjour,
    Je n'arrive toujours pas a resoudre mon probeleme:
    voici un recapitualtif de ma situation:

    J'ai une application dans laquelle j'importe un gros fichier binaire, au point ou j'obtiens une exception de depassement de capacite memoire.
    j'ai 4 giga de ram et le fichier fait 5 giga.sous windows Vista64.
    j'utilise VStudio2005.

    la serialization ne marche pas dans ce cas?
    que dois je faire pour le charger partiellement.
    est ce possible de developper mon propre serialiseur? si oui, pouvez vous me donner une idee comment, svp?

    voici ma fonction d'importation:

    FileFormat::openImport(CFile &file, const CString& filename, bool is_binary) const {
    FileFormat *self = (FileFormat *) this;
    self->filename_ = filename;
    self->in_import_ = true;
    self->current_line_ = 0;

    CFileException file_exception;
    if (is_binary) {
    if (!file.Open(filename, CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    else {
    if (!file.Open(filename, CFile::modeRead | CFile::typeText | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    return true;
    }



    Merci enmcore d 'avance.
    assia

  11. #11
    Membre éprouvé

    Inscrit en
    Juin 2004
    Messages
    1 397
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 1 397
    Par défaut

    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
    FileFormat::openImport(CFile &file, const CString& filename, bool is_binary) const {
    FileFormat *self = (FileFormat *) this;
    self->filename_ = filename;
    self->in_import_ = true;
    self->current_line_ = 0;
     
    CFileException file_exception;
    if (is_binary) {
    if (!file.Open(filename, CFile::modeRead | CFile::typeBinary | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    else {
    if (!file.Open(filename, CFile::modeRead | CFile::typeText | CFile::shareDenyWrite, &file_exception))
    return openError(file_exception, filename, name_);
    }
    return true;
    }
    Ensuite, je ne réponds pas aux messages techniques par MP. En effet, si tu poses cette question, d'autres se la posent peut-être, et par conséquent, il est préférable de rendre la réponse publique, donc de répondre... dans le message original .

    Ce n'est pas du C++ standard que tu utilises, mais des méthodes liées à MS Visual C++. Pour ce qui est de la gestion des fichiers sous windows, je te conseille de lire :
    http://bob.developpez.com/tutapiwin/index.php

    En particulier le chapitre 4.

  12. #12
    Futur Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 5
    Par défaut
    Pour le MP, desolee c'etait une erreur...
    Je me suis juste rattrapee en appuyant sur le bon bouton.
    desolee.

    j'utilise Visual C++/CLI .

    merci

  13. #13
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Déjà, es-tu sûr que les données, une fois en mémoire, ne font pas elles-mêmes plus de X Go ? Généralement, un fichier binaire possède un format de sérialisation assez compact, plus compact que le format désérialisé en mémoire... (je n'en dirais pas autant d'un fichier texte).

    Si c'est trop grand, tu n'as pas le choix : Tu ne pourras pas avoir toutes les données en mémoire simultanément. Tu devras donc choisir sur quelle partie tu travailles. Si tu veux pouvoir faire des modifications, j'espère pour toi que les enregistrements sont de taille fixe, sinon tu vas morfler...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

Discussions similaires

  1. Import gros fichiers texte
    Par soph35 dans le forum SAS Base
    Réponses: 1
    Dernier message: 18/03/2010, 11h00
  2. Importer un gros fichier SQL sous windows
    Par bigsister dans le forum Outils
    Réponses: 2
    Dernier message: 24/08/2007, 15h17
  3. Importer un gros fichier
    Par tbassetto dans le forum Administration
    Réponses: 3
    Dernier message: 19/05/2007, 10h13
  4. import gros fichier excel (>17000 lignes)
    Par samuelsiffert dans le forum Access
    Réponses: 12
    Dernier message: 05/07/2006, 08h48
  5. Import gros fichiers
    Par thibaut06 dans le forum Outils
    Réponses: 3
    Dernier message: 04/07/2005, 22h08

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