LIRE ET ENREGISTRER UN FICHIER TEXTE

Zikoom Messages postés 6 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 17 juillet 2002 - 17 juil. 2002 à 14:35
samio07 Messages postés 3 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 27 janvier 2009 - 27 janv. 2009 à 12:53
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/4050-lire-et-enregistrer-un-fichier-texte

samio07 Messages postés 3 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 27 janvier 2009
27 janv. 2009 à 12:53
svp si qq1 peut me fournir ce code avec une interface graphique avec vb.net et merci
cs_Rank Messages postés 4 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 25 juillet 2003
25 juil. 2003 à 19:44
Pourquoi, quand il y a une virgule dans mon texte, ça cré un saut de ligne une fois affiché dans un textbox???
leneuf22 Messages postés 156 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 4 mars 2003 1
18 juil. 2002 à 20:34
Je précise : c'est le fait de mettre CancelError = true qui fera qu'il y aura une erreur quand tu cliques sur annuler.
Il suffit d'écrire un gestionnaire pour l'erreur n°32755 pour que l'erreur soit gérée. C'est donc normal que tu ne la voie pas :)
leneuf22 Messages postés 156 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 4 mars 2003 1
18 juil. 2002 à 20:28
Non, tu ne peux pas supprimer la ligne à l'enregistrement. En tous cas pas avec ce que tu utilises (open X for...)
Oui, ça ne génère pas d'erreur dans mon code car j'ai mis un gestionnaire pour l'erreur (étiquette "erreur:") Dans ton code non plus car tu n'as pas mis le cancelerror, et que tu fais un test pour voir si la chaine est vide. Vu que cancelerror est la pour ça, autant l'utiliser. Enfin c'est toi qui vois.
Si tu mets cancelerror et que tu appuies sur annuler pendant ShowSave, ça te fera une erreur si tu n'as pas de gestionnaire.

Mais tu peux supprimer le gestionnaire pour ShowOpen, c'est vrai qu'il ne sert à rien.

En bref :
Enlève les 2 "On Error GoTo erreur"
Enlève les 2 "erreur:
If (Err.Number = 32755) Then Exit Sub"

Affiche la fenêtre ShowSave, et clique sur annuler ;-)
Et note aussi que mon code est moins gourmand en ressources que le tien.
Zikoom Messages postés 6 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 17 juillet 2002
17 juil. 2002 à 22:53
Salut ! Merci mais déjà moi quand j'appuis sur le bouton ANNULER ça ne génère pas d'erreur... Et en fait je ne veux pas supprimer la ligne lors de la lecture du fichier mais lors de l'enregistrement. Donc déjà si tu pouvais m'expliquer où est-ce que tu vois une erreur.. et si tu avais une idée pour l'enregistrement.
Merci !
leneuf22 Messages postés 156 Date d'inscription samedi 12 janvier 2002 Statut Membre Dernière intervention 4 mars 2003 1
17 juil. 2002 à 21:40
Quelques remarques :
Tu devrais déclarer tes variables
Tu devrais mettre dialog.CancelError = true au lieu de regarder si la chaine de retour est vide. Ça génère l'erreur n° 32755 quand on clique sur annuler
Au lieu de rajouter du texte dans Text1 à chaque itération, tu devrais le rajouter dans une variable, puis à la fin mettre le contenu de la variable dans tex1.text, comme ça tu as un gain de temps, car à chaque ligne, en arrière plan, des fonctions sont appellées pour afficher de nouveau le texte.
Noublie pas, il n'y a pas que ton code qui est exécuté, le runtime de VB travaille beaucoup, donc ménage-le !
Autre chose : ça sert à quoi d'enregistrer dans 2 fichiers ? À rien ;-)
Tu devrais mettre Output au lieu de Append

Ce qui nous donne :

Option Explicit

Private Sub Form_Load()

With Dialog
.Filter = "Fichiers texte (*.txt)|*.txt|Tous les fichiers|*.*"
.CancelError = True
.Flags = 6158
End With

End Sub

Private Sub Ouvrir_Click()
On Error GoTo erreur
Dim Ligne As String, Texte As String, Test As String, nbr As Integer

Dialog.ShowOpen
Open Dialog.FileName For Input As #1
Do While Not EOF(1)
Input #1, Ligne
Texte = Texte & Ligne & vbCrLf
Loop
Close #1
If (Len(Texte) < 4) Then
Text1.Text = Texte
Exit Sub
End If
Test = Right(Texte, 4)
If (Right(Test, 2) vbCrLf) Then nbr 2
If (nbr 2) And (Left(Test, 2) vbCrLf) Then nbr = 4
If (nbr <> 0) Then Texte = Left(Texte, Len(Texte) - nbr)
Text1.Text = Texte

erreur:
If (Err.Number = 32755) Then Exit Sub

End Sub

Private Sub Enregistrer_Click()
On Error GoTo erreur

Dialog.ShowSave

Open Dialog.FileName For Output As #1
Print #1, Text1.Text
Close #1

erreur:
If (Err.Number = 32755) Then Exit Sub

End Sub

Les flags c'est pour éviter le superflu et prévoir certaines choses (par exemple si on enregistre sur un fichier déjà existant.) On enlève aussi la case lecture seule(qui ne sert à rien)
Dans mon code on manipule le moins possible la variable Texte lors de l'ouverture, car elle peut être volumineuse selon le fichier.

En même temps j'ai résolu ton problème de retour à la ligne.
Au cas ou on ouvre un fichier ne se terminant pas pas un retour à la ligne, c'est géré.
Zikoom Messages postés 6 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 17 juillet 2002
17 juil. 2002 à 16:02
Non mais ce que je veux dire c'est quand plus du VbCrLf qui est ajouté lors de la lecture, il y a un autre saut de ligne qui apparait lors de l'enregistrement ! Même si mon texte était composé d'une ligne et que je l'écrivait moi même dans le textebox :
"aa" deviendrait
"aa
" ---> J'met des guillemet pour que cela paraisse clair :o)

Donc si quelqu'un avait la solution !
Merci :o)
webboy Messages postés 55 Date d'inscription lundi 11 mars 2002 Statut Membre Dernière intervention 23 mai 2003
17 juil. 2002 à 14:49
en effet il rajoute un saut de ligne car quand tu viens plaquer ton fichier texte ds ta zone de saisie la derniere ligne est constitue de
"ton texte" & vbcrlf
voila
Zikoom Messages postés 6 Date d'inscription mercredi 25 octobre 2000 Statut Membre Dernière intervention 17 juillet 2002
17 juil. 2002 à 14:35
Salut ! Si quelqu'un avait une idée pour supprimer la dernière ligne quand on enregistre : car en fait ça rajoute toujours un saut ligne. Mettez le dans les commentaires :o) Merci !
Rejoignez-nous