beginnerales
Messages postés11Date d'inscriptionjeudi 22 juillet 2010StatutMembreDernière intervention 1 avril 2012
-
22 juil. 2010 à 22:08
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 2019
-
29 août 2010 à 12:25
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
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 29 août 2010 à 12:25
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
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 201579 22 juil. 2010 à 23:28
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)
cs_ShayW
Messages postés3253Date d'inscriptionjeudi 26 novembre 2009StatutMembreDernière intervention 3 décembre 201957 23 juil. 2010 à 00:57
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
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