Bonjour

Votre avis m'intéresse.
Exemple : Soit un fichier (séquentiel) de 100 feuilles (de 1 à DerNum) contenant chacune 25 lignes (texte au km) de renseignements. Donc 2500 lignes. Je dois modifier par exemple certaines lignes de la page 10 (NumeroProb ) soit de la ligne 226 à 250.

Opération en 4 phases :

1/ Le programme lit et enregistre les feuilles de 1 à 9 dans un fichier tampon;
2/ Le programme récupère les datas corrigés de la feuille 10 et les enregistre à la suite sur le fichier tampon;
3/ Le programme lit et enregistre les feuilles 11 à 100 à la fin du fichier tampon;
4/ Le contenu du fichier tampon remplace le contenu du fichier source.

Le programme exemple fonctionne parfaitement. Il sert à modifier dans un fichier séquentiel certaines lignes. Opération en quatre phases en enregistrant les datas sur un fichier tampon (amendement.txt) puis remplacer le contenu du fichier source par le fichier tampon.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
Option Explicit On
Imports System.IO
Imports System.Text
Imports System.Threading
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
Sub ValidCorrectionProbleme()
 
        'Fonction : Modifier dans un fichier séquentiel certaines lignes. Opération en quatre phases en enregistrant les datas sur 
        'un fichier tampon (amendement.ech) puis remplacer le contenu du fichier source par le fichier tampon.
 
        'Phase 1 : Lecture et enregistrement dans le tampon des problèmes de 1 à NumeroProb -1 
 
        Try
            ' Création d'une instance de StreamReader pour permettre la lecture du fichier source
            Dim monStreamReader As StreamReader = New StreamReader(ToolStripTextBox1.Text)   ' exemple lire : "C:\sb\0.ech")  
 
             'Création du nouveau dossier du fichier tampon s'il n'éxiste pas déja
            If Directory.Exists("c:\test\") = False Then Directory.CreateDirectory("c:\test\")
 
            'détruit le fichier tampon précédent s'il existe
            If File.Exists("c:\test\amendement.txt") = True Then File.Delete("c:\test\amendement.txt")
            'Pour enregistre 
            Dim strFile As String = "c:\test\amendement.txt" ' fichier tampon pour enregistrer le fichier et ses corrections.
 
            Dim monStreamWriter As StreamWriter
            If (Not File.Exists(strFile)) Then
                monStreamWriter = File.CreateText(strFile)
            Else
                monStreamWriter = File.AppendText(strFile)
            End If
 
            'Lecture et enregistrement dans le tampon des problèmes de 1 à NumerProb -1 
            For Me.nnn = 1 To NumeroProb - 1
 
                'Lecture de 25 lignes de chaque problème
                For Me.n = 1 To 25
                    Ligne(Me.n) = monStreamReader.ReadLine()
                Next Me.n
 
                'enregistre les 25 lignes
                monStreamWriter.WriteLine(Ligne(1) + Chr(13) + Chr(10) + Ligne(2) + Chr(13) + Chr(10) + Ligne(3) + Chr(13) + Chr(10) + Ligne(4) + Chr(13) + Chr(10) + Ligne(5) + Chr(13) + Chr(10) _
                             + Ligne(6) + Chr(13) + Chr(10) + Ligne(7) + Chr(13) + Chr(10) + Ligne(8) + Chr(13) + Chr(10) + Ligne(9) + Chr(13) + Chr(10) + Ligne(10) + Chr(13) + Chr(10) _
                             + Ligne(11) + Chr(13) + Chr(10) + Ligne(12) + Chr(13) + Chr(10) + Ligne(13) + Chr(13) + Chr(10) + Ligne(14) + Chr(13) + Chr(10) + Ligne(15) + Chr(13) + Chr(10) _
                             + Ligne(16) + Chr(13) + Chr(10) + Ligne(17) + Chr(13) + Chr(10) + Ligne(18) + Chr(13) + Chr(10) + Ligne(19) + Chr(13) + Chr(10) + Ligne(20) + Chr(13) + Chr(10) _
                             + Ligne(21) + Chr(13) + Chr(10) + Ligne(22) + Chr(13) + Chr(10) + Ligne(23) + Chr(13) + Chr(10) + Ligne(24) + Chr(13) + Chr(10) + Ligne(25) & " - " & DateTime.Now)
            Next Me.nnn
 
            'Phase 2 : Lecture et enregistrement dans le tampon du problème NumeroProb dont la correction est validée. 
 
            'Lecture de 25 lignes du problème 
            For Me.n = 1 To 25
                Ligne(Me.n) = monStreamReader.ReadLine()
            Next Me.n
 
            'Lecture des lignes du problème affiché à l'écran avec ou sans correction
            Ligne(1) = TextBoxNum.Text
            Ligne(2) = TextBoxName.Text
            Ligne(6) = TextBoxDate.Text
            Ligne(7) = TextBoxPrix.Text
            Ligne(9) = TextBoxSource.Text
            Ligne(18) = TextBoxEnonce.Text
            Ligne(19) = TextBoxNbPieces.Text
            Ligne(21) = Replace(RichTextBoxSolution.Text, Chr(10), " ") 'supprime les retours à la ligne
            Ligne(25) = "UTF32-8 FR"
 
            'enregistre les 25 lignes
            monStreamWriter.WriteLine(Ligne(1) + Chr(13) + Chr(10) + Ligne(2) + Chr(13) + Chr(10) + Ligne(3) + Chr(13) + Chr(10) + Ligne(4) + Chr(13) + Chr(10) + Ligne(5) + Chr(13) + Chr(10) _
                         + Ligne(6) + Chr(13) + Chr(10) + Ligne(7) + Chr(13) + Chr(10) + Ligne(8) + Chr(13) + Chr(10) + Ligne(9) + Chr(13) + Chr(10) + Ligne(10) + Chr(13) + Chr(10) _
                         + Ligne(11) + Chr(13) + Chr(10) + Ligne(12) + Chr(13) + Chr(10) + Ligne(13) + Chr(13) + Chr(10) + Ligne(14) + Chr(13) + Chr(10) + Ligne(15) + Chr(13) + Chr(10) _
                         + Ligne(16) + Chr(13) + Chr(10) + Ligne(17) + Chr(13) + Chr(10) + Ligne(18) + Chr(13) + Chr(10) + Ligne(19) + Chr(13) + Chr(10) + Ligne(20) + Chr(13) + Chr(10) _
                         + Ligne(21) + Chr(13) + Chr(10) + Ligne(22) + Chr(13) + Chr(10) + Ligne(23) + Chr(13) + Chr(10) + Ligne(24) + Chr(13) + Chr(10) + Ligne(25) & " - " & DateTime.Now)
 
            'Phase 3 : Lecture et enregistrement dans le tampon des problèmes de Numero Prob +1 à DerNum 
 
            For Me.nnn = NumeroProb + 1 To DerNum
 
                'Lecture de 25 lignes de chaque problème
                For Me.n = 1 To 25
                    Ligne(Me.n) = monStreamReader.ReadLine()
                Next Me.n
 
                'enregistre les 25 lignes
                monStreamWriter.WriteLine(Ligne(1) + Chr(13) + Chr(10) + Ligne(2) + Chr(13) + Chr(10) + Ligne(3) + Chr(13) + Chr(10) + Ligne(4) + Chr(13) + Chr(10) + Ligne(5) + Chr(13) + Chr(10) _
                             + Ligne(6) + Chr(13) + Chr(10) + Ligne(7) + Chr(13) + Chr(10) + Ligne(8) + Chr(13) + Chr(10) + Ligne(9) + Chr(13) + Chr(10) + Ligne(10) + Chr(13) + Chr(10) _
                             + Ligne(11) + Chr(13) + Chr(10) + Ligne(12) + Chr(13) + Chr(10) + Ligne(13) + Chr(13) + Chr(10) + Ligne(14) + Chr(13) + Chr(10) + Ligne(15) + Chr(13) + Chr(10) _
                             + Ligne(16) + Chr(13) + Chr(10) + Ligne(17) + Chr(13) + Chr(10) + Ligne(18) + Chr(13) + Chr(10) + Ligne(19) + Chr(13) + Chr(10) + Ligne(20) + Chr(13) + Chr(10) _
                             + Ligne(21) + Chr(13) + Chr(10) + Ligne(22) + Chr(13) + Chr(10) + Ligne(23) + Chr(13) + Chr(10) + Ligne(24) + Chr(13) + Chr(10) + Ligne(25) & " - " & DateTime.Now)
            Next Me.nnn
 
            'Fermeture du StreamReader 
            monStreamReader.Close()
            'Fermeture du StreamWriter           
            monStreamWriter.Close()
 
            'Code exécuté en cas d'exception
        Catch ex As Exception
            MessageBox.Show(ex.Message & "Stack Trace: " & vbCrLf & ex.StackTrace))
        End Try
 
        'Phase 4 : remplacer le fichier source par le contenu du fichier tampon
        ' à écrire
 
 
    End Sub
[B]Est-ce la bonne méthode à appliquer ?Je ne trouve rien de plus simple et compact en ligne ! L'idéal serait de trouver une fonction qui me permet d'écrire directement sur les lignes 226 à 250 dans mon exemple vu plus haut sans écrire toute cette usine à gaz ! [B]

En vous remerciant pour votre aide.

A vous lire