Programme très lent (travaille sur une chaine de caractère)

Résolu
execrator Messages postés 16 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 mars 2009 - 3 juin 2005 à 09:12
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 - 3 juin 2005 à 16:58
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

Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juin 2005 à 16:19
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
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juin 2005 à 10:02
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
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juin 2005 à 10:02
(Textboxes à remplacer par des tableaux de String)

Amusez-vous !
Renfield - thomas_reynald@msn.com
Admin CodeS-SourceS - MVP Visual Basic
0
execrator Messages postés 16 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 mars 2009
3 juin 2005 à 16:09
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
execrator Messages postés 16 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 mars 2009
3 juin 2005 à 16:21
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
0
execrator Messages postés 16 Date d'inscription mercredi 8 septembre 2004 Statut Membre Dernière intervention 19 mars 2009
3 juin 2005 à 16:24
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 :)
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 juin 2005 à 16:58
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
0
Rejoignez-nous