begin process at 2012 02 16 11:24:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Système

 > 

Fichier & Disque

 > 

Ralentissement dans le chargement d'un fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Ralentissement dans le chargement d'un fichier

dimanche 17 février 2008 à 14:38:09 | Ralentissement dans le chargement d'un fichier

PROGRAMMIX

Bonjour,

Le projet sur lequel je travailler actuellement implique le chargement d'un fichier de 134 Ko contenant 2.283 lignes de 23 à 120 caractères.

Lorsque je charge ce fichier pour l'afficher, j'observe un ralentissement du chargement au fur et à mesure.

Pourriez-vous me dire comment éviter cela ?

Ci-dessous le code utilisé :

Private Sub cmdChargerFichier_Click()

    Dim numFichier As Integer
    Dim s1 As String
    Dim s2 As String
    Dim S As String
    Dim f As String
    Dim i As Integer
    
    Dim Param() As String
    Dim NbreSemaines As Integer
    Dim NbreLignes As Integer
    Dim iSemaine As Integer
   
    Dim x1 As Integer
   
    numFichier = FreeFile
   
    x1 = 1
   
    'Ouverture du fichier source
    Open FichierSource For Input As #numFichier
    'Ligne 1 = NbreSemaines, NbreLignes, NomEquipe, FichierModèle
    Line Input #numFichier, s1
    Param = Split(s1, ",")
    NbreSemaines = CInt(Param(0))
    NbreLignes = CInt(Param(1)) * 2
   
    'Ligne 2 = Séparation des groupes
    Line Input #numFichier, s2
   
    'Lecture de la suite
    While Not EOF(numFichier)
       
        'Incrémente la variable iSemaine
        iSemaine = iSemaine + 1
       
        'Charge les dates
        Line Input #numFichier, S
f = f & S & vbCrLf

        'Idem pour la ligne des remarques
        Line Input #numFichier, S
f = f & S & vbCrLf
       
        'Idem pour les lignes contenant les horaires
        For i = 1 To NbreLignes
            Line Input #numFichier, S
If (i = x1) Or (i = x1 + 1) Then S = "==>" & S
f = f & S & vbCrLf
        Next
       
        'Rend la main à Windows
        Me.Label1.Caption = "Semaine " & iSemaine & "/" & NbreSemaines
        DoEvents
   
    Wend
   
    'Fermeture du fichier source
    Close #numFichier
   
    Me.Text1.Text = s1 & vbCrLf & s2
    Me.RichTextBox1.Text = f
   
End Sub


Programmix

dimanche 17 février 2008 à 15:04:01 | Re : Ralentissement dans le chargement d'un fichier

PCPT

Administrateur CodeS-SourceS
salut,

peux-tu héberger le fichier texte?
++

Prenez un instant pour répondre à ce sondage svp
dimanche 17 février 2008 à 15:18:09 | Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX

Le fichier est disponible à cette adresse
[ Lien ]


Programmix
dimanche 17 février 2008 à 15:30:52 | Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX

Le problème vient certainement de l'utilisation de la variable "f as string" qui me sert à recueillier les données.

Si je mets toutes les lignes faisant appel à cette variable, le processus s'exécute à la "vitesse de l'éclair" à tel point que je n'ai pas le temps d'observer un ralentissement.

Seulement voilà, comment utiliser au mieux cette variable ?
ou quelle autre type de variable est-il préférable d'utiliser pour un tel cas de figure ?

Programmix
dimanche 17 février 2008 à 15:41:14 | Re : Ralentissement dans le chargement d'un fichier

PCPT

Administrateur CodeS-SourceS
c'est pas que c'est plus long vers la fin, c'est qu'on passe plus souvent dans ta boucle avec "==>"

par contre à part justement cet ajout, j'ai du mal à comprendre l'intérêt de ce travail sur le fichier.
je peux t'aider à l'optimiser un peu mais il faudrait plus d'explications (??)

Prenez un instant pour répondre à ce sondage svp
dimanche 17 février 2008 à 15:41:56 | Re : Ralentissement dans le chargement d'un fichier

PCPT

Administrateur CodeS-SourceS
tu peux utiliser un tableau qui se remplira plus vite
dimanche 17 février 2008 à 15:53:55 | Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX

Ce fichier est un fichier utilisé pour gérer les horaires de 19 personnes sur une année.

Chaque paire de ligne correspond à l'horaire d'un titulaire dont le nom est repris dans la première ligne et, en cas de remplacement du titulaire par une autre personne, le nom de ce remplaçant est indiqué dans la seconde ligne.

Seulement voilà, je dois réécrire le fichier parce que l'un des titulaires ayant obtenu un mi-temps, je dois "ré-injecté" son remplaçant dans le planning en tant que "nouveau titulaire" sans pour autant augmenter le nombre de "titulaires prévus" (caractérisé par la variable "nbrelignes").

Le code présenté n'était que la première partie du projet, celle chargeant de le fichier de base qui sera modifié en fonction de ce que je viens d'expliquer (j'espère assez clairement).


Programmix
dimanche 17 février 2008 à 16:02:19 | Re : Ralentissement dans le chargement d'un fichier

PCPT

Administrateur CodeS-SourceS
bin moyen mais bon ^^

voici strictement le même code, avec un tableau
çà semble plus rapide :p

Option Explicit
Private Const FichierSource As String "C:\horaires2008.txt"
Private Type BUFFER
    saArr() As String
    lCpt As Long
End Type
Dim tBuff As BUFFER

Private Sub cmdChargerFichier_Click()

'   buffer
    ReDim tBuff.saArr(500)
    tBuff.lCpt = -1
    
    Dim FF As Integer
    Dim s1 As String
    Dim s2 As String
    Dim As String
    Dim As Integer
    
    Dim Param() As String
    Dim NbreSemaines As Integer
    Dim NbreLignes As Integer
    Dim iSemaine As Integer
  
    Dim x1 As Integer
    x1 = 1
    FF = FreeFile
   
    
    'Ouverture du fichier source
    Open FichierSource For Input As #FF
    
    'Ligne 1 = NbreSemaines, NbreLignes, NomEquipe, FichierModèle
    Line Input #FF, s1
    
    Param = Split(s1, ",")
    NbreSemaines = CInt(Param(0))
    NbreLignes = CInt(Param(1)) * 2
   
    'Ligne 2 = Séparation des groupes
    Line Input #FF, s2
   
    'Lecture de la suite
    While Not EOF(FF)
       
        'Incrémente la variable iSemaine
        iSemaine = iSemaine + 1
       
        'Charge les dates
        Line Input #FF, S
        Add S & vbCrLf

        'Idem pour la ligne des remarques
        Line Input #FF, S
        Add S & vbCrLf
       
        'Idem pour les lignes contenant les horaires
        For i = To NbreLignes
            Line Input #FF, S
            If (i = x1) Or (i = x1 + 1Then S = "==>" & S
            Add S & vbCrLf
        Next i
       
        'Rend la main à Windows
        Me.Label1.Caption = "Semaine " & iSemaine & "/" & NbreSemaines
        DoEvents
    Wend
   
    'Fermeture du fichier source
    Close #FF
   
    Me.Text1.Text = s1 & vbCrLf & s2
    
    ReDim Preserve tBuff.saArr(tBuff.lCpt)
    Me.RichTextBox1.Text = Join(tBuff.saArr)

End Sub


Private Sub Add(ByVal sVal As String)
    With tBuff
        .lCpt = .lCpt + 1
        If .lCpt > UBound(.saArr) Then ReDim Preserve .saArr(.lCpt + 500)
        .saArr(.lCpt) = sVal
    End With
End Sub


(ps : de mémoire Renfield et Violent_Ken ont fait des classes de ce genre)
++

Prenez un instant pour répondre à ce sondage svp
dimanche 17 février 2008 à 18:37:14 | Re : Ralentissement dans le chargement d'un fichier

PROGRAMMIX

Merci, c'est effectivement plus rapide.

Mais histoire que je comprenne bien le fonctionnement, peux-tu vérifier mes commentaires ci-dessous ?
Et éventuellement m'expliquer, à moins que ce ne soit pas explicable en "français simple", pourquoi cette méthode fonctionne mieux que l'autre ?

Je pense aussi que Renfield a déjà élaboré des classes pour gérer cela, mais, à mon grand regret, j'ai encore beaucoup de mal à saisir toutes les subtibilités d'utilisation des classes pour une optimisation du code.

'Déclaration d'un type de variable
Private Type 
BUFFER
    saArr() As String     'Tableau de chaines
    lCpt As Long         'Index d'une chaine
End Type
Dim tBuff As BUFFER


'(...)


ReDim tBuff.saArr(500)      ' Déclaration d'un tableau de 500 éléments
tBuff.lCpt = -1                  'Index de départ

'(..)

'Fonction pour ajouter une chaine dans le tableau
Private Sub Add(ByVal sVal As String)
    With tBuff
        .lCpt = .lCpt + 1      'Index de la chaîne ajoutée
        'Si l'index est supérieur à sa limite maximale, le tableau est redimentionné avec conservation des éléments précédents
        If .lCpt > UBound(.saArr) Then ReDim Preserve .saArr(.lCpt + 500)
        'La chaîne est ajoutée au tableau
        .saArr(.lCpt) = sVal
    End With
End Sub


Programmix
dimanche 17 février 2008 à 19:10:28 | Re : Ralentissement dans le chargement d'un fichier

PCPT

Administrateur CodeS-SourceS
Réponse acceptée !
ReDim tBuff.saArr(500)      Déclaration d'uninitialisation/dimension de départ du tableau de 500 éléments

le reste est bon.
il est plus rapide de remplir une variable que de concaténer et donc de redimensionner la taille de la variable

on ne fait donc QUE du remplissage (tableau), ensuite en redimensionne à la taille exacte (d'où le compteur) et on récupère le tout concaténé une seule fois par JOIN

Prenez un instant pour répondre à ce sondage svp

1 2

Cette discussion est classée dans : fichier, input, string, integer, numfichier


Répondre à ce message

Sujets en rapport avec ce message

Gestion des fichiers ini [ par VbNicoG ] Bonjour à tous, A l'heure actuelle, j'utilise les fonctions suivantes pour gérer mes fichiers INI : [code=vb] Private Declare Function GetPrivateProf Fichier texte [ par xavier77 ] Salut, J'ouvre un fichier texte et je le lie ligne par ligne : NumFichier = FreeFileOpen App.Path & "\toto.txt" For Input As #NumFichierDo While EO string en integer et faire la somme [ par tonyock ] voila je veux transformer ma chaine de caractere en entier et faire la somme de ces valeurs j'ai essayer convert.toint  et autre fonction tjs le meme Extraction valeur [ par quentin0594 ] Bonjours, c'est la première fois que j'utilise le language Xml. J'ai un petit fichier très simple, : [code=xml] valeur1 valeur2 </ressourc écriture et lecture d'un fichier en binaire [ par Taur33 ] Bonjour à tous Voilà je voudrais précalculer les puissances de 2 jusqu'à 10000 pour accélérer ma fonction (Dectobinaire(nombre as string)as string)don Détéction de "répertoire"[VB.net] [ par Anakin79 ] Bonjour, Il y a 2 jour, j'ai commencer un programme. Mais voila, je rencontre un problème assez embêtant[^^mad2] Je vous explique [^^happy10] J'ai Copie de plusieurs fichier en VB ?? [ par nico8001 ] Bonjour, Donc je suis sur visual basic 2008 et base de données access 2000 Pour mon projet je dois copier des fichiers qui sont sur mon ordinateur Lecture d'un fichier ligne par ligne, donne un resultat trim [ par gretata ] [b]Bonjour a tous !![/b] J'ai un petit soucis bizarre, en VB.net je lis un fichier avec un StreamReader je fais ReadLine et je me retrouve avec ma li suppression des doublons dans un tableau de string [ par sanaaSooma ] Bonjour, j'ai programé une application en vb.net qui m'a permet de liare un fichier txt et de recuperer les information desiré en fichier excel ,j'ai


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales