Insérer un caractere dans un fichier texte
Insérer un caractere dans un fichier texte
Salut
Voila j'aimerais modifié un fichier texte, en insérant un caractère supplémentaire à un emplacement donné.
Je sais pas si c'est clair.
par exemple dès qu'à la lecture de la lettre 'e' il insère un caractère supplémentaire '*' .
Le fichier de départ serait :
aaaeeeerrrrppppp
Le fichier modifié serait :
aaae*e*e*e*rrrrppppp
J'avais pensé à copier le fichier en entier dans un tableau et
de le recopier, mais ne peux t'on pas insérer un caractère autrement ?
Merci
Voila j'aimerais modifié un fichier texte, en insérant un caractère supplémentaire à un emplacement donné.
Je sais pas si c'est clair.
par exemple dès qu'à la lecture de la lettre 'e' il insère un caractère supplémentaire '*' .
Le fichier de départ serait :
aaaeeeerrrrppppp
Le fichier modifié serait :
aaae*e*e*e*rrrrppppp
J'avais pensé à copier le fichier en entier dans un tableau et
de le recopier, mais ne peux t'on pas insérer un caractère autrement ?
Merci
Voilà comment je procèderai
- tu copies en mémoire le contenu de ton string (nom : string$)
- tu comptes la totalité des caractères Nbr=len(string$)
- tu copies en mémoire le contenu de ton string (nom : string$)
- tu comptes la totalité des caractères Nbr=len(string$)
Code : Tout sélectionner
string$="cacao de poulet mariné"
Nbr=Len(string$)
Position=1
For i = 1 To Nbr
car$=Mid(string$,Position,1) ; Lit le caractere se trouvant à 'Position'
car$=car$+"*" ; ajout du caractère '*' aprés le caractere trouvé
Position=Position+1 ; la position passe au caractere suivant
Debug car$ ; On test
Next
MessageRequester ("fin","fin")
End
Dernière modification par Ar-S le lun. 01/sept./2008 15:19, modifié 1 fois.
pour insérer 1 octet dans un fichier tu dois décaler tout ce qui suit de 1 octet et donc réécrire tout ce qui suit sur le disque. puisque tu dois tout déplacer physiquement
si ton fichier fait 5 octets par exemple 5 lettres de l'alphabet ABCDF
elles sont ecrite a un emplacement (x) sur le disque
par exemple
A(1)B(2)C(3)D(4)F(5)
si tu veux inserer un E entre le D et le F tu vas devoir réécrire le fichier pour avoir
A(1)B(2)C(3)D(4)E(5)F(6)
le plus simple est encore de créer un fichier temporaire dans le même répertoire et de lire le fichier original jusqu'à la position souhaitée en le réécrivant dans le fichier temporaire, ajouter le caractère et continuer de copier le contenu du fichier original dans le fichier temporaire. jusqu'à ce que ce soit la fin du fichier .
effacer le fichier original ou le renommer en ajoutant une extension, par exemple .bak
renommer le fichier temporaire avec le nom du fichier original
si ton fichier fait 5 octets par exemple 5 lettres de l'alphabet ABCDF
elles sont ecrite a un emplacement (x) sur le disque
par exemple
A(1)B(2)C(3)D(4)F(5)
si tu veux inserer un E entre le D et le F tu vas devoir réécrire le fichier pour avoir
A(1)B(2)C(3)D(4)E(5)F(6)
le plus simple est encore de créer un fichier temporaire dans le même répertoire et de lire le fichier original jusqu'à la position souhaitée en le réécrivant dans le fichier temporaire, ajouter le caractère et continuer de copier le contenu du fichier original dans le fichier temporaire. jusqu'à ce que ce soit la fin du fichier .
effacer le fichier original ou le renommer en ajoutant une extension, par exemple .bak
renommer le fichier temporaire avec le nom du fichier original
Merci pour vos idées
Je vais tester tout ça
Une autre question comment tester si un nombre a une décimal
Exemple
Je vais tester tout ça
Une autre question comment tester si un nombre a une décimal
Exemple
Code : Tout sélectionner
dim test(2)
test(1)=15.75
test(2)=18
for x=1 to 2
if test(x)= ; ???? comment fait on pour savoir si le nombre a des décimal
; seulement si la nombre a des décimals
debug test(x)
endif
next
Ok, excuse-moi, c'est ton exemple qui m'a induit en erreur, vu que tu remplaçais tous les "e" par des "e*".coxco a écrit :Ok merci Djes
mais en fait je me suis peut être mal expliqué, c'est par forcément
remplacer un e par un e* cela peut être n'importe quel caractère
Pour insérer un caractère, il faut d'abord que tu saches où l'insérer. Ensuite tu ouvres tes deux fichiers, et tu lis/écris au fur et à mesure jusqu'au point d'insertion. Là tu écris ton caractère, puis tu recommences jusqu'à la fin, et là tu fermes tes deux fichiers. C'est aussi simple que ça!
Un exemple :
Code : Tout sélectionner
If Not OpenFile(0, "source.txt")
If Not CreateFile(1, "destination.txt")
While Not Eof(0)
char.b = ReadByte(0)
If Loc(0) = 1000
WriteString(1, "ici")
EndIf
WriteByte(1, char)
Wend
CloseFile(1)
Else
MessageRequester("Erreur", "Impossible d'ouvrir le fichier destination")
EndIf
CloseFile(0)
Else
MessageRequester("Erreur", "Impossible d'ouvrir le fichier source")
EndIf
Tu soustrais la valeur entière (en te servant de abs()), et s'il reste quelque chose (<>0), c'est qu'il y a des décimales.coxco a écrit :Merci pour vos idées
Je vais tester tout ça
Une autre question comment tester si un nombre a une décimal
Exemple
Code : Tout sélectionner
dim test(2) test(1)=15.75 test(2)=18 for x=1 to 2 if test(x)= ; ???? comment fait on pour savoir si le nombre a des décimal ; seulement si la nombre a des décimals debug test(x) endif next
Ok Merci djes, ton code va m'aider
par contre je suis neuneu mais j'ai testé ça mais cela ne m'affiche pas
les chiffres après la virgule
pourquoi donc ?
AH J'AI TROUVE JE DECOUVRE QUE LE STR SUPPRIME LES VIRGULES
Comment Faut il faire alors ?
par contre je suis neuneu mais j'ai testé ça mais cela ne m'affiche pas
les chiffres après la virgule
pourquoi donc ?
AH J'AI TROUVE JE DECOUVRE QUE LE STR SUPPRIME LES VIRGULES
Comment Faut il faire alors ?
Code : Tout sélectionner
Dim test.d(2)
test.d(1)=15.75
test.d(2)=18
Debug "test "+Str(test.d(1)); Pas de chiffre après la virgule ?
MessageRequester("",Str(test.d(1))) ; Pas de chiffre après la virgule ?
For x=1 To 2
Debug Abs(test(x))-test(x)<>0
If Abs(test(x))-test(x)<>0 ; Forcément cela ne marche pas
Debug test(x)
EndIf
Next
Voici un code qui fonctionnera mieuxcoxco a écrit :Ok Merci djes, ton code va m'aider
par contre je suis neuneu mais j'ai testé ça mais cela ne m'affiche pas
les chiffres après la virgule
pourquoi donc ?
AH J'AI TROUVE JE DECOUVRE QUE LE STR SUPPRIME LES VIRGULES
Comment Faut il faire alors ?
Code : Tout sélectionner
Dim test.d(2) test.d(1)=15.75 test.d(2)=18 Debug "test "+Str(test.d(1)); Pas de chiffre après la virgule ? MessageRequester("",Str(test.d(1))) ; Pas de chiffre après la virgule ? For x=1 To 2 Debug Abs(test(x))-test(x)<>0 If Abs(test(x))-test(x)<>0 ; Forcément cela ne marche pas Debug test(x) EndIf Next

Code : Tout sélectionner
Dim test.f(2)
test(1)=15.75
test(2)=18
Debug "test "+Str(test(1)); Pas de chiffre après la virgule ?
MessageRequester("",Str(test(1))) ; Pas de chiffre après la virgule ?
For x=1 To 2
Debug x
;Debug (test(x)-Int(test(x)))
If (test(x)-Int(test(x)))<>0 ; Forcément cela ne marche pas
Debug "-> des décimales"
Else
Debug "-> pas de décimales"
EndIf
Next