Modification nombre fichier texte

Résolu
Messages postés
11
Date d'inscription
jeudi 22 juillet 2010
Statut
Membre
Dernière intervention
1 avril 2012
-
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
-
Bonjour,

Je suis débutante et j'aimerai savoir comment une fois avoir ouvert un fichier texte modifier la valeur d'un nombre.

En fait, j'ai une série de lignes de nombre séparés par des virgules et je voudrais pour chaque premier et troisieme nombre de chaque ligne ajouter la valeur 1000 si ce nombre est compris entre 0 et 2000 ou bien ajouter 2000 ce nombre est compris entre 3000 et 4000

Une idée pleaaseee, c urgent

4 réponses

Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
Tiens Salut

Tu programmes en vb6 ou vba ?

Tu as écrit la macro ne marche pas
qu'est ce qui ne marche pas ?
nombre de chaque ligne ajouter la valeur 1000 si ce nombre est compris entre 0 et 2000 ou bien ajouter 2000 ce nombre est compris entre 3000 et 4000

j'ai modifié la sub
la sub convient pour des nombres entiers non décimaux
pour le 1 ex il faut écrire une autre sub
 Private Sub ReadWriteFile()
Dim strg As String
Dim newstr As String
Dim allstr As String
Dim pos As Long
Dim start As Long
Dim number As Long
Dim oldnumber As Long
Dim l As Long
 Dim nfile As Integer
 Dim iter As Integer
 nfile = FreeFile
 newstr = ""
 allstr = ""
 Open "E:\ReadFile\BLABLA.TXT" For Input As #nfile
 Do While Not EOF(nfile)
    Line Input #nfile, strg
    start = 1
    For iter = 0 To 1
     pos = InStr(start, strg, ",")
     number = Val(Mid(strg, start))
     oldnumber = number
     If number > 0 And number < 2000 Then
      number = number + 1000
     Else
       If number > 3000 And number < 4000 Then
        number = number + 2000
       End If
    End If
    If iter = 1 And pos > 1 Then
      newstr = Mid(strg, 1, pos - 1 - Len(Trim(str(oldnumber))))
    End If
    If pos > 0 Then
     strg = Mid(strg, pos)
     strg = Trim(str(number)) & strg
     start = 2 + Len(Trim(str(number)))
    End If
   If iter = 1 Then
     If pos > 0 Then
        newstr = newstr + strg
      Else
        newstr = strg
      End If
    allstr = allstr + newstr + vbCrLf
   End If
   pos = InStr(start, strg, ",")
  start = pos + 1
  
  Next iter
 Loop
Close #nfile
 nfile = FreeFile
  Open "E:\ReadFile\BLABLA.TXT" For Output As #nfile
   Print #nfile, allstr
  Close #nfile
End Sub


après avoir testé
input
1030, 636, 3431, 3432, 637
1031, 3431, 668, 669, 3432
1032, 637, 3432, 3433, 638
1033, 3432, 669, 670, 3433
1034, 638, 3433, 3434, 639
1035, 3433, 670, 671, 3434

output
2030, 636, 5431, 3432, 637
2031, 3431, 1668, 669, 3432
2032, 637, 5432, 3433, 638
2033, 3432, 1669, 670, 3433
2034, 638, 5433, 3434, 639
2035, 3433, 1670, 671, 3434
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
81
Salut
Il n'est pas possible de modifier partiellement un fichier texte.
Il te faudra :
- Ouvrir en écriture un fichier temporaire
- Ouvrir en lecture ton fichier de données
- Lire chaque ligne et faire tes modif
- Ecrire la ligne modifiée dans le premier fichier
- Faire un boucle de lecture/modif
- Fermer les deux fichiers
- Détruire l'original
- Renommer le temporaire avec le nom de l'original.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
3258
Date d'inscription
jeudi 26 novembre 2009
Statut
Membre
Dernière intervention
3 décembre 2019
56
Bonsoir ou Bonjour
Vite urgent
Attention il faut qu'il n'y ait pas de virgule à la fin de chaque lignes
Private Sub ReadWriteFile()
Dim strg As String
Dim newstr As String
Dim allstr As String
Dim pos As Long
Dim start As Long
Dim number As Long
Dim oldnumber As Long
Dim l As Long
 Dim nfile As Integer
 Dim iter As Integer
 nfile = FreeFile
 newstr = ""
 allstr = ""
 Open "E:\ReadFile\BLABLA.TXT" For Input As #nfile
 Do While Not EOF(nfile)
    Line Input #nfile, strg
    start = 1
    For iter = 0 To 1
     pos = InStr(start, strg, ",")
     number = Val(Mid(strg, start))
     oldnumber = number
     If number > 0 And number < 2000 Then
      number = number + 1000
     Else
       If number > 3000 And number < 4000 Then
        number = number + 2000
       End If
    End If
    If iter = 1 And pos > 1 Then
      newstr = Mid(strg, 1, pos - 1 - Len(Trim(str(oldnumber))))
    End If
    If pos > 0 Then
     strg = Mid(strg, pos)
     strg = Trim(str(number)) & strg
     start = 2 + Len(Trim(str(number)))
    End If
   If iter = 1 Then
     If pos > 0 Then
        newstr = newstr + strg
      Else
        newstr = strg
      End If
    allstr = allstr + newstr + "," + vbCrLf
   End If
   pos = InStr(start, strg, ",")
  start = pos + 1
  
  Next iter
 Loop
Close #nfile
 nfile = FreeFile
 Kill "E:\ReadFile\BLABLA.TXT"
  Open "E:\ReadFile\BLABLA.TXT" For Append Shared As #nfile
   Print #nfile, allstr
  Close #nfile
End Sub

Messages postés
11
Date d'inscription
jeudi 22 juillet 2010
Statut
Membre
Dernière intervention
1 avril 2012

Merci à tous et à ShayW !!

Malheureusement ta macro ne marche pas

J'ai deux types de données à faire changer:
Le premier est par exemple de type:

1, -78.4516068, 1.61848927, 3390.49988
2, -59.4516068, 6.61848927, 1654.
3423, -35.5434532, 1.23624361, 1354.
3297, -5.5434532, 1.23624361, 1679.
5, -9.7349396, 2.77809596, 1679.

où je veux juste changer la valeur du premier chiffre (ajouter 1000 si la valeur est comprise entre 0 et 2000 ou bien ajouter 2000 sinon)
Par ailleurs, il faut que le fichier se réécrive en respectant les sauts à la ligne et non pas tout réécrire à la suite (par contre il y a parfois des espaces en début de ligne et des points à la fin de la ligne je sais pas si çà pose problème).



Le deuxième cas est le suivant:
1030, 636, 3431, 3432, 637
1031, 3431, 668, 669, 3432
1032, 637, 3432, 3433, 638
1033, 3432, 669, 670, 3433
1034, 638, 3433, 3434, 639
1035, 3433, 670, 671, 3434

Là je veux changer toutes les données sur la même base que précédemment (ajouter 1000 si la valeur est comprise entre 0 et 2000 ou bien ajouter 2000 sinon) en respectant les sauts à la ligne


Merci beaucoup pour votre aide

Bon week end à tous