Programme très lent (travaille sur une chaine de caractère) [Résolu]

Signaler
Messages postés
16
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009
-
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
J'ai realisé un programme qui lit un fichier prédéfinie qui contient des caractères spéciaux ceux ci correpondent a un saut de page le programme lit le fichier enregistre dans une variable puis affiche dans une richtextbox (pour la capacité et le multiline).
Aprés commence le travaille sur la richtextbox je cherche le premeir caractère special et releve les coordonné et je cherche les coordonné du suivnat et ainsi de suite toutes les coordonné sont sauvegardé dans un tableau et apres avec ces coordonné je decoupe le texte et affiche ce qui correspond a cahuqe page dans une richtextbox differente et au final j'imprime chaque richtextbox(le but du programme)
Le fichier en general (qui contient le texte de depart) continet 5pages en general mais parfois il peyu en aovir 200, il fait environ ,dans ce cas precis le programme mais 15min avant de lancer l'impression et je ne sai pas trop comment optimiser le code.

Private WithEvents txtObj As TextBox



Private Sub Form_Load()
Dim x(5000), i, j, k As Variant
Dim st, prem As String


Set txtObj = Controls.Add("VB.TextBox", "txtObj")


st = "print.spl"
Open st For Binary As #1
prem$ = Space$(FileLen(st))
Get #1, , prem$
Close #1
'Affiche le fichier dans la textbox(0)
Text1(0).Text = prem$



'Releve les coordonnées des differentes pages
'Le caractère ' ' correspond à un saut de page
x(0) = InStr(Text1(0).Text, " ")
If x(0) Then
i = 1


boucle = 0
While boucle = 0

x(i) = InStr(x(i - 1) + 1, Text1(0).Text, " ")
DoEvents
If x(i) Then
i = i + 1
Else
boucle = 1
End If

Wend


End If


'Affiche chaques pages dans une textbox differente


x(i) = Len(Text1(0))
If i > 1 Then
For j = 1 To i
Load Text1(j)
DoEvents
Text1(j).Text = Mid(Text1(0).Text, x(j - 1) + 1, x(j) - x(j - 1))
DoEvents
Next
End If


'Supprime le caractère ' '
For j = 1 To i - 1
Text1(j).Text = Left(Text1(j).Text, Len(Text1(j).Text) - 1)
DoEvents
Next


'Paramètrage de l'imprimante
Printer.FontName = "Lucida console"
Printer.FontSize = "9,75"
Printer.FontBold = True
Printer.Orientation = "2"


'On imprime
If i > 1 Then
For j = 1 To i - 1
If (x(j) - x(j - 1) - 1 > 20) Then
Printer.Print Text1(j).Text
DoEvents
Printer.EndDoc
DoEvents
End If
Next
Else
Printer.Print Text1(0).Text
DoEvents
Printer.EndDoc
DoEvents
End If


End
End Sub

7 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
rien ne t'interdit de redimensionner ton tableau en chemin....

Dim Tableau() as String

Redim preserve Tableau ( 5 ) as String

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 238 internautes nous ont dit merci ce mois-ci

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
1 - Supprime ces textboxes, leur affichage est couteux
2 - moins de Doevents.... a utiliser oui ! mais avec parcimonie
3 - ajoutes des $ (Mid$ Chr$ Left$

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
(Textboxes à remplacer par des tableaux de String)

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
Messages postés
16
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009

En fait g realisé des textbox puisque en vb il est impossible de créé de liste chainée (comme en c), je ne sai pas combien de partie j'aurais a couper,si je fais un tableau je vias devoir le declaré prédéfinie alros que la je créé au fur et a mesure, mais c'est pas grave le but c'est d'améliorer la rapidité du prog. Et je note pour les doevents c juste que comme ca dure 15min le prog et ca me prend 100%des ressources j'en ai mis un peu partout lol :D mais j'ai peut etre abusé lol
Messages postés
16
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009

En fait ci g utiliser des textbox c juste que en VB on ne peu pas faire de liste chainé (comme en c) enfin pas a ma connaissance. Comme je ne sais pas à l'avance commebien de partie je via sdevoir decoupé, créé dynamiquement des textbox me parasssait une bonne idée mais bon apparement ca empietre sur la rapidité du prog, je vias donc testé .Le programme met enormement de temps aussi pour reperer les coordonnée du caractère (en meme temps il peut y avoir plus de 1million de caractère ce cas est rare mais possible donc je suis obliger de le prendre en compte.Je prend note pour les doevents comme le prog me prend 100%des ressources pedant 15min g du abusé un peu trop lol
Messages postés
16
Date d'inscription
mercredi 8 septembre 2004
Statut
Membre
Dernière intervention
19 mars 2009

Harg!!! vraiment desolé pour les doublons ... mais ce con dordi me marque impossible dafficher la page alros je recommence mais en fait ca avait marche.... oki merci pour la commande Redim preserve Tableau ( 5 ) as String
ca me sera surement utile :)
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
le Preserve, tu l'auras surement compris est optionnel et indique si l'on veut ou non que les données soient conservées

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic