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

Macros et VBA Excel Discussion :

Gestion de gros fichier : Espace de chaine insuffisant avec fonction Space/Get/Replace/Split


Sujet :

Macros et VBA Excel

  1. #21
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 677
    Points
    18 677
    Par défaut


    Justement ! Pour lire un fichier non texte dans une variable comme un fichier texte,
    comme déjà conseillé, utiliser alors un buffer en lecture.

    Sinon utiliser un type de données correspondant au format d'un enregistrement du fichier de données packé
    (ou encore une fonction convertissant chaque donnée) afin d'alimenter soit directement une feuille de calculs
    (en ayant au préalable désactiver l'affichage, le calcul automatique, …) soit une variable tableau à décharger
    dans la feuille de calculs une fois pleine …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  2. #22
    Membre actif
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2009
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2009
    Messages : 114
    Points : 254
    Points
    254
    Par défaut
    Pour un cas similaire à toi, j'utilise la commande suivante (légèrement différente):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    szFileName = LB_File_Path.Caption
    f = FreeFile
    Open szFileName For Binary As #f
    fileContent = String$(LOF(f), " ")
    Get #f, , fileContent
    Close #f
    Pas sûr que cela améliore ton problème mais avec cette procédure j'arrive à ouvrir un fichier de 160Mo sans soucis.

  3. #23
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    @Tijean: même problème avec ton code, la commande String$(LOF(f), " ") ne passe pas et me génère une erreur 14

    @Marc-L: Je veux bien passer par des buffers, et c'est le cas dans le code que j'utilisais avant, mais, ce n'est pas la lecture du fichier qui me pose problème mais bien son stockage dans une variable que je veux spliter après.
    Avec des gros fichier le fait de faire fileContent = fileContent & Buffer génère toujours la même erreur.

    Le truc c'est que ca passe beaucoup mieux quand je stock l'intégralité du fichier dans un tableau (chaque élément du tableau contenant un morceau du fichier, j'ai choisi de diviser le fichier en 30 morceaux histoire de prévoir gros ...)
    Seulement je ne peux pas concaténer tout les éléments du tableau car je me retrouve avec le même problème d'espace de chaine insuffisant...

  4. #24
    Invité
    Invité(e)
    Par défaut
    un fichier ouvert Binary ne retourne pas du string!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim fileContent() As Byte
    Open szFileName For Binary As #f
        ReDim fileContent(LOF(f))
        Get #f, , fileContent
    Close #f
    ma remarque ne s’adresse pas à TiJean2910, j'ais repris son exemple!
    Dernière modification par AlainTech ; 02/10/2014 à 07h53. Motif: Suppression de la citation inutile

  5. #25
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Mais que faire avec un tableau de byte ?

  6. #26
    Invité
    Invité(e)
    Par défaut
    sans un extrait du fichier,!@

  7. #27
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 18
    Points : 10
    Points
    10
    Par défaut
    Je ne peux pas donner d'extrait du fichier, confidentialité oblige, je travaille dans une banque
    Un exemple de fichier pourrait simplement être des lignes séquentielles de texte (avec retour chariot à la fin de chacune) de différentes tailles
    En gros comme si on prenait disons 4 phrases différente et qu'on les recopiait des centaines de millier de fois jusqu'a obtenir un fichier de taille conséquente (+ de 100 Mo)

    je dois également traiter des fichiers qui ne contiennent pas de retour chariot (linéaire)
    La question du traitement de ces lignes n'est pas le problème ici, les algorithmes traitant chacune des lignes marchent.

    Mon problème se situe vraiment dans le fait de stocker un fichier entier dans une variable afin de la splitter pour les fichiers séquentiels, le traitement des fichiers linéaires étant différent et se base sur une longueur de ligne prédéfinie.

    L'ancienne méthode consistait à lire une ligne d'une certaine longueur puis de l'éclater suivant un format prédéfini en terme de position longueur dans la ligne, mais cela était long étant donné que je fesait a chaque fois un accès fichier, la méthode de la mise en mémoire du fichier en totalité m'avait permis d'améliorer grandement les performances ... mais bon j'ai l'impression que je suis un peu coincé ... :/

Discussions similaires

  1. [Python 2.X] gestion de gros fichier
    Par vincenlnx dans le forum Général Python
    Réponses: 10
    Dernier message: 22/11/2014, 15h42
  2. gestion de gros fichiers en C++
    Par buzzkaido dans le forum C++
    Réponses: 6
    Dernier message: 07/08/2012, 12h16
  3. Gestion de gros fichiers
    Par bpy1401 dans le forum Android
    Réponses: 10
    Dernier message: 03/07/2012, 13h40
  4. Gestion des (gros) fichiers
    Par schneed dans le forum C++Builder
    Réponses: 1
    Dernier message: 23/02/2009, 20h05
  5. [Composants texte] Gestion de gros fichiers
    Par sozie9372 dans le forum Interfaces Graphiques en Java
    Réponses: 8
    Dernier message: 22/05/2006, 11h03

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