Comment enregistrer des fichiers au fur et à mesure dans une boucle do en VBnet

tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012 - 20 févr. 2012 à 20:35
tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012 - 21 févr. 2012 à 21:24
Bonjour
en VBnet : A l'intérieur d'une boucle do, comment enregistrer des fichiers.txt au fur et à mesure de leur conception.
Après avoir essayé sans résultat, tous les fichiers.txt créés, sont enregistrés en série dès la fin de la boucle do.
J'ai l'impression que tout reste dans le buffer, jusqu'à la fin de cette boucle, et qu'ensuite toute cette mémoire se vide en une seule fois pour enregistrer tous les fichiers.
Ce que j'aimerais bien réussir à faire , c'est de pouvoir arreter le programme quand je le décide, et donc d'avoir déja quelques fichiers enregistrés dans le disque dur, du moins tous ceux qui ont été réalisés avant cet arret volontaire.
Merci à l'âme charitable qui me viendra en aide.

12 réponses

NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 févr. 2012 à 20:56
Bonjour,

Quel code utilises-tu ?
As-tu regardé Io.File.AppendText ?

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
20 févr. 2012 à 20:56
Salut

pas compris ce que tu veux faire
tu veux écrire dans un fichier ?
0
tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012
20 févr. 2012 à 21:26
Encore merci de vous interesser à ma demande, j'en suis très content.

Je vous traduis ici une façon synthétique de mon programme

'''''''''''''''''
' appel au sub mettant toutes les variables à jour
call ConditionDepart
Do While NbreJeuReal < NbreJeuDemande
' appel au sub pour phase niveau 1
Call PhaseNiv1()
If NiveauDemande <= TotNiv Then
'on enregistre cette fiche
Jeu(1) = ResultatNiv1
'enregistrement de chaque nouveau fichier.txt
Call EnregNouvelleFiche(TotNiv)
NbreJeuReal = NbreJeuReal + 1
end if
' appel au sub mettant toutes les variables à jour
call ConditionDepart
Loop
'''''''''''''''''
Tant qu'on est dans la boucle; aucun fichier n'est enregistré , tout reste stocké dans le buffer, je pense.
Et lorsque le programme sort de la boucle, tous les fichiers s'enregistrent les uns à la suite des autres sans interruption, et donc je pense que le buffer se vide en enregistrant tout ce qui a été créé.
J'aimerais pouvoir enregistrer les fichiers dans le disque dur, au fur et à mesure, de chaque appel au sub EnregNouvelleFiche(TotNiv).
Comme le traitement est assez long, j'aimerais pouvoir arreter son déroulement, quand je le désire. Le fait que rien ne s'enregistre avant la fin du programme me fait perdre tous ces fichiers, qui n'ont pas pu etre enregistrés avant cette fermeture.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
20 févr. 2012 à 22:14
Bonjour,

Quand tu postes un code, regardes le point 2 de ma signature.
Je ne vois aucun accès aux fichiers dans ton morceau de code.

Note : Les Call ne servent à rien.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0

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

Posez votre question
Utilisateur anonyme
21 févr. 2012 à 04:44
Bonjour,

Pas sûr de bien comprendre mais :

Écrire un fichier texte:

Il y a un exemple dans l'aide (il est dans VB10 et l'était dans VB 2005)

Chercher Texte, soit dans l'onglet "Index", soit dans la case en haut à droite du programme d'aide.

Toujours dans l'aide:

Classes Stream, StreamWriter, System.IO
0
Utilisateur anonyme
21 févr. 2012 à 04:47
Bonjour,

En ajout à ma réponse précédente.

Si ton objet Stream s'appelle Alouette, Alouette.close va forcer l'écriture du fichier et la purge de la mémoire-tampon.
0
tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012
21 févr. 2012 à 10:04
En reponse à cmarcotte, mon Stream SW est fermé à la fin par SW.Close()
et pourtant la mémoire ne se purge pas au fur et à mesure des appels à ce Sub pour enregistrer les nouveaux fichiers.
Je ne comprends pas pourquoi l'ensemble des fichiers est uniquement enregistré dans le DD lorsque sa condition de la boucle Do est atteinte et donc comme je le dis dans mon précédent message, ne me permet pas d'arret volontaire sans perdre ces nouveaux fichiers qui n'ont pas été encore enregistrés.
Donc W.Close() seul, ne permet pas le forçage des enregistrements, je ne vois pas où est mon erreur et surtout, je ne sais pas quoi faire pour y remédier.

Je vous envoie un bout de mon code où il doit surement y avoir une anomalie

Imports System.IO
------------------------------
Module Module1

Public Sub EnregNouvelleFiche(TotNiv) 
.
. 'ici je passe les opérations qui sont effectuées
. 'qui n'ont pas de rapport avec ma demande
.
Dim CheminFich, AppPath, LigInterm  As String
Dim j as integer
AppPath = Environment.CurrentDirectory 

CheminFich = AppPath & "" & NomNouvFich
'Rappel : La variable Public "NomNouvFich" est à chaque fois differente

Dim SW As New StreamWriter(CheminFich) ' crée le fichier
For j = 1 To 10
   LigInterm = """" & Jeu(j) & """"            
   SW.WriteLine(LigInterm)
Next
SW.Close() 'C'est ici qu'il faut forcer l'enregistrement

End Sub
0
Utilisateur anonyme
21 févr. 2012 à 16:28
Bonjour,

À première vue, cela me semble une procédure correcte. Une idée comme cela : Si on met un point d'arrêt sur le End Sub, est-ce que le fichier texte ainsi créé est lisible dans le bloc-notes? Si oui, cela serait que le programme s'exécute peut-être trop rapidement pour que Windows ait le temps de terminer l'enregistrement. Sinon, il faudrait chercher ailleurs. (Au moment où j'écris ces lignes, il devrait être presque 18 h 30 à Paris. (10 h 27 chez-nous))
0
Utilisateur anonyme
21 févr. 2012 à 16:42
Rebonjour

Et en ajoutant sw.flush juste avant sw.close ?

Sinon, en fouillant dans l'aide de VB 10, j'ai remarqué, mais pas testé, que la classe System.io.filestream permettrait de spécifier si l'on veut travailler en mode synchrone ou en mode asynchrone.
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
21 févr. 2012 à 19:31
Bonjour,

Actives Option Strict et Option Explicit (propriétés du projet), dans l'onglet "Références", retires l'import automatique de Microsoft.VisualBasic et corriges les erreurs.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, ce lien ou encore celui-ci[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list
---
Mon site
0
tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012
21 févr. 2012 à 21:02
Bonsoir NHenry
Je vais essayer ta proposition qui va peut être me convenir.
Mais du point de vue "correction" il est vrai que j'ai fort à faire avant de pouvoir la tester.
Il y a même des corrections pour lesquelles je ne sais pas trop si je vais pouvoir m'en sortir.
Mais j'ai tellement essayé de solutions qui ne m'ont pas satisfait, que je tiens absolument à tester la tienne qui a un vrai parfum de nouveauté pour moi, et sur laquelle je mets tous mes espoirs.
Entre temps, je reste toujours pret à accepter d'autres propositions.
J'espère transmettre un résultat très prochainement.
...encore merci
0
tirobut Messages postés 16 Date d'inscription jeudi 7 juillet 2011 Statut Membre Dernière intervention 22 juin 2012
21 févr. 2012 à 21:24
Rebonjour cmarcotte
Tu dis que la classe System.io.filestream permettrait de spécifier si l'on veut travailler en mode synchrone ou en mode asynchrone.
Là aussi, il y a peut etre à creuser, mais j'avoue mon incapacité à utiliser cette possibilité.
J'ai commencé à chercher à me documenter, sans obtenir de résultat pour l'instant.
Donc avec la proposition de NHenry, me voilà devant deux voies bien distinctes mais toutes deux interessantes.
Alors au boulot, faut que je m'y mette !!!
bye
0
Rejoignez-nous