Ecriture fichier
Ecriture fichier
Pour l'ajout de données dans un fichier, je n'ai pas trouvé de commande d'ouverture en mode 'insertion'.
A moins qu'il existe une autre methode ?
A moins qu'il existe une autre methode ?
Il suffit de déplacer le pointeur d'écriture:
Code : Tout sélectionner
#Fichier=0
Resultat = OpenFile(#Fichier, "C:\texte.txt")
While Eof(#Fichier)=0
chaine$=chaine$+ReadString()+Chr(13)+Chr(10)
Wend
;Debug Len(chaine$)
FileSeek(Len(chaine$))
WriteStringN("nico")
CloseFile(#Fichier)
End
Merci, mais c'est déjà ce que je fais ...
Cad transférer le contenu du fichier dans une variable, l'editer puis la resauver dans un fichier.
Mais comme je manipule des fichier de 150/200 ko je suis obligé d'utiliser plusieur variable est c'est trés lourd !
Ce que je cherche c'est par exemple :
Contenue du fichier est :
"Lundi
Mardi
Jeudi"
Ouvrir le fichier en mode 'Insertion'
Mettre le pointeur sur le 'J'
Ecrire "Mercredi"
Fermer le fichier
Résultat et contenue du fichier :
"Lundi
Mardi
Mercedi
Jeudi"
Cad transférer le contenu du fichier dans une variable, l'editer puis la resauver dans un fichier.
Mais comme je manipule des fichier de 150/200 ko je suis obligé d'utiliser plusieur variable est c'est trés lourd !
Ce que je cherche c'est par exemple :
Contenue du fichier est :
"Lundi
Mardi
Jeudi"
Ouvrir le fichier en mode 'Insertion'
Mettre le pointeur sur le 'J'
Ecrire "Mercredi"
Fermer le fichier
Résultat et contenue du fichier :
"Lundi
Mardi
Mercedi
Jeudi"
Cet exemple est purement d'école et n'a aucune réalité.
Voila ce que je fait en ce moment :
Dim Jour$(10)
I=0
If OpenFile(0, "C:\texte.txt")
While Eof(0)=0
I=I+1
Jour$(I)=ReadString()
Wend
CloseFile(0)
Jour$(4)=Jour$(3)
Jour$(3)="Mercredi"
If CreateFile(0,C:\texte.txt")
For J=1 to I+1
WriteSringN( Jour$(J) )
Next J
CloseFile(0)
Endif
Endif
Et voila ce que j'aurais aimé faire et qui existe dans d'autres langages ...
If OpenFile(0, "C:\texte.txt",#MODE_INSERTION)
Repeat
Jour$=ReadString()
Until Jour$="Mardi" CloseFile(0)
; Le pointeur est sur le "J" de Jeudi
WriteSringN( "Mercredi" )
; On insére "Mercredi" en décalant se qui suit, Cad "Jeudi"
CloseFile(0)
Endif
En réalité je gére un répertoire de nom, et ce probléme se pose quand je veux rajouter un nom...
Voila ce que je fait en ce moment :
Dim Jour$(10)
I=0
If OpenFile(0, "C:\texte.txt")
While Eof(0)=0
I=I+1
Jour$(I)=ReadString()
Wend
CloseFile(0)
Jour$(4)=Jour$(3)
Jour$(3)="Mercredi"
If CreateFile(0,C:\texte.txt")
For J=1 to I+1
WriteSringN( Jour$(J) )
Next J
CloseFile(0)
Endif
Endif
Et voila ce que j'aurais aimé faire et qui existe dans d'autres langages ...
If OpenFile(0, "C:\texte.txt",#MODE_INSERTION)
Repeat
Jour$=ReadString()
Until Jour$="Mardi" CloseFile(0)
; Le pointeur est sur le "J" de Jeudi
WriteSringN( "Mercredi" )
; On insére "Mercredi" en décalant se qui suit, Cad "Jeudi"
CloseFile(0)
Endif
En réalité je gére un répertoire de nom, et ce probléme se pose quand je veux rajouter un nom...
Tu as posté un code en sachant que jour$(3) correspondait à jeudi mais tu n'est pas censé savoir ce que contient la chaine !!???
Sinon de mon coté, j'ai pondu ça:
Je n'utilise qu'un seul fichier puisque comme je rajoute une ligne, il n'y a pas de problème de retrouver d'anciennes chaines en fin de fichier.
dis moi si ça t'aide?
Sinon de mon coté, j'ai pondu ça:
Je n'utilise qu'un seul fichier puisque comme je rajoute une ligne, il n'y a pas de problème de retrouver d'anciennes chaines en fin de fichier.
dis moi si ça t'aide?
Code : Tout sélectionner
;Cette procédure insère une nouvelle chaîne en dessous des lignes contenant le mot spécifié
;Exemple pour le mot recherché "mercredi":
;---------Avant------------
;Lundi, je bulle
;et mardi pareil
;sinon mercredi à la plage
;vendredi, repos bien mérité
;---------Après------------
;Lundi, je bulle
;et mardi pareil
;sinon mercredi à la plage
;jeudi retour à la plage, ça roule
;vendredi, repos bien mérité
;--------------------------
Procedure Inser_Ligne(Fichier.s,Mot_a_Trouve.s,Chaine_Ajoutee.s)
#Fichier=0
If OpenFile(#Fichier, Fichier)
While Eof(#Fichier)=0
chaine$=ReadString()
Pos = FindString(chaine$, Mot_a_Trouve, 1)
If Pos > 0
chaine$=chaine$+Chr(13)+Chr(10)+Chaine_Ajoutee
EndIf
chaine1$=chaine1$+chaine$+Chr(13)+Chr(10)
Wend
FileSeek(0)
WriteString(chaine1$)
CloseFile(#Fichier)
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
If Inser_Ligne("C:\texte.txt","mercredi","jeudi retour à la plage, ça roule")
MessageRequester("Info","opération réussi")
EndIf
End
Nico, je te remercie pour ton aide, mais je crois que l'on ne sais pas compris ...
Je n'ai pas de probléme pour réaliser ce que je veux, mais je trouve que c'est trés lourd comme code !
D'ou ce post dans la rubrique 'Suggestions et améliorations'.
De plus, s'il est vrai que ta routine fonctionne bien, que va t'il se passer si le fichier fait plus de 65536 octets ?
Elle ne marchera plus car c'est la taille maxi d'une variable Sting !
Ce qui est mon cas et m'oblige à utiliser plusieur variables.
Par contre, j'ai bien apprecié ton emploi du temps de la semaine ... Ne serais tu pas aussi du Sud ...
Je n'ai pas de probléme pour réaliser ce que je veux, mais je trouve que c'est trés lourd comme code !
D'ou ce post dans la rubrique 'Suggestions et améliorations'.
De plus, s'il est vrai que ta routine fonctionne bien, que va t'il se passer si le fichier fait plus de 65536 octets ?
Elle ne marchera plus car c'est la taille maxi d'une variable Sting !
Ce qui est mon cas et m'oblige à utiliser plusieur variables.
Par contre, j'ai bien apprecié ton emploi du temps de la semaine ... Ne serais tu pas aussi du Sud ...
Lors de mon premier post, je n'avais pas saisi le problème d'insertion alors j'ai essayé de voir comment faire.
Sinon j'ai modifié le code, il n'y a plus de problème de longueur de string , de plus je n'utilise plus qu'une seule petite chaine
J'ai compris que tu n'avais pas besoin d'un code mais j'aimerais bien que tu l'essayes, juste pour savoir si ça fonctionne bien (dans un cas réel)!
Merci
Je ne suis pas originaire du Sud mais de l'Ouest, de la Vendée précisément.
et pour ce qui est de l'emploi du temps, comme tu peux le voir sur mon avatar, je suis un doux rêveur!
Voici le code:
[EDIT du 21/04/04] ->Le code à été modifié
Sinon j'ai modifié le code, il n'y a plus de problème de longueur de string , de plus je n'utilise plus qu'une seule petite chaine

J'ai compris que tu n'avais pas besoin d'un code mais j'aimerais bien que tu l'essayes, juste pour savoir si ça fonctionne bien (dans un cas réel)!
Merci

Je ne suis pas originaire du Sud mais de l'Ouest, de la Vendée précisément.

et pour ce qui est de l'emploi du temps, comme tu peux le voir sur mon avatar, je suis un doux rêveur!

Voici le code:
[EDIT du 21/04/04] ->Le code à été modifié
Code : Tout sélectionner
;Cette procédure insère une nouvelle chaîne en dessous des lignes contenant le mot spécifié
;Exemple pour le mot recherché "mercredi" dans le fichier suivant:
;---------Avant------------
;Lundi, je bulle
;et mardi pareil
;sinon mercredi à la plage
;vendredi, repos bien mérité
;---------Après------------
;Lundi, je bulle
;et mardi pareil
;sinon mercredi à la plage
;jeudi retour à la plage, ça roule
;vendredi, repos bien mérité
;--------------------------
Procedure Inser_Ligne(Fichier.s,Mot_a_Trouve.s,Chaine_Ajoutee.s)
#Fichier=0
#Fichier1=1
;Ici on cré un fichier temporaire sous le même répertoire
For a= Len(Fichier) To 1 Step -1
If Mid(Fichier, a, 1) ="\"
Fichier2.s=Mid(Fichier, 1,a)+"Temporaire.temp"
;Debug Fichier2
Break
EndIf
Next a
If CopyFile(Fichier,Fichier2)
If OpenFile(#Fichier1, Fichier2)
If CreateFile(#Fichier, Fichier)
While Eof(#Fichier1)=0
UseFile(#Fichier1)
chaine$=ReadString()
Pos = FindString(chaine$, Mot_a_Trouve, 1)
If Pos > 0
chaine$=chaine$+Chr(13)+Chr(10)+Chaine_Ajoutee
EndIf
UseFile(#Fichier)
WriteStringN(chaine$)
Wend
CloseFile(#Fichier)
retour.b=#True
EndIf
CloseFile(#Fichier1)
EndIf
EndIf
ProcedureReturn retour
EndProcedure
If Inser_Ligne("C:\test.txt","mercredi","jeudi retour à la plage, ça roule")
MessageRequester("Info","opération réussi")
EndIf
End
Dernière modification par nico le mer. 21/avr./2004 17:31, modifié 1 fois.
La nuit porte conseil ....
Et on à eut la méme idée ... J'ai pissé à peut prêt les mémé ligne de code !
Je n'ai pas testé ton code mais je l'ai etudié attentivement et il doit tourner.
J'ai adapté et commenté quelques détails :
[
CopyFile(Fichier,Fichier_Sauvegarde)
If OpenFile(#Fichier1, Fichier_Sauvegarde)
; FileSeek(0) ; N'a pas d'utilté c'est inherent à l'ouverture d'un fichier
If CreateFile(#Fichier, Fichier) ; Le createFile permet d'initialiser le fichier
While Eof(#Fichier1)=0
UseFile(#Fichier1)
chaine$=ReadString()+Chr(13)+Chr(10)
Pos = FindString(chaine$, Mot_a_Trouve, 1)
If Pos > 0
chaine$=chaine$+Chaine_Ajoutee ; +Chr(13)+Chr(10) n(est pas utile
EndIf
UseFile(#Fichier)
WriteStringN(chaine$) ; le WriteStringN sert bien !
Wend
CloseFile(#Fichier)
Else
retour=#False
EndIf
Else
retour=#False
CloseFile(#Fichier1) ; le close doit être avant le Endif
EndIf
ProcedureReturn retour
EndProcedure
]
Une question bête, puisque je ne connais pas la réponse : Dans un post, comment fait on pour définir une zone de code ?
Pour finir, je trouve les InsertString() de cederavic plutôt bien trouvé ! Alors à quand leur intégration dans PB ?
Et on à eut la méme idée ... J'ai pissé à peut prêt les mémé ligne de code !
Je n'ai pas testé ton code mais je l'ai etudié attentivement et il doit tourner.
J'ai adapté et commenté quelques détails :
[
CopyFile(Fichier,Fichier_Sauvegarde)
If OpenFile(#Fichier1, Fichier_Sauvegarde)
; FileSeek(0) ; N'a pas d'utilté c'est inherent à l'ouverture d'un fichier
If CreateFile(#Fichier, Fichier) ; Le createFile permet d'initialiser le fichier
While Eof(#Fichier1)=0
UseFile(#Fichier1)
chaine$=ReadString()+Chr(13)+Chr(10)
Pos = FindString(chaine$, Mot_a_Trouve, 1)
If Pos > 0
chaine$=chaine$+Chaine_Ajoutee ; +Chr(13)+Chr(10) n(est pas utile
EndIf
UseFile(#Fichier)
WriteStringN(chaine$) ; le WriteStringN sert bien !
Wend
CloseFile(#Fichier)
Else
retour=#False
EndIf
Else
retour=#False
CloseFile(#Fichier1) ; le close doit être avant le Endif
EndIf
ProcedureReturn retour
EndProcedure
]
Une question bête, puisque je ne connais pas la réponse : Dans un post, comment fait on pour définir une zone de code ?
Pour finir, je trouve les InsertString() de cederavic plutôt bien trouvé ! Alors à quand leur intégration dans PB ?