Page 1 sur 1
Insérer ou supprimer des caractères dans un fichier
Publié : mar. 15/juin/2010 10:15
par Parole De JOJO
Si dans mon fichier c'est écrit "bonjour comment ça va" par exemple, je sais comment placer le pointeur sur un caractère et le remplacer par un autre (avec writedata ou writestring) mais comment insérer un nouveau mot entre deux mots existant, disons d'insérer "mon frère" entre "salut" et "comment". De plus je cherche comment supprimer des caractères, c'est à dire pas seulement les remplacer mais les éliminer complètement.
Je suis sûr qu'il doit y avoir une fonction très simple mais j'ai cherché dans tout le manuel d'aide et je n'ai rien trouve.
Merci d'avance
Re: Insérer ou supprimer des caractères dans un fichier
Publié : mar. 15/juin/2010 10:28
par lepiaf31
Code : Tout sélectionner
Procedure insererChaine(file, string.s, offset.i)
Protected *buffer, bufferSize.i
If IsFile(file) ;on teste si le fichier est correctement ouvert
FileSeek(file, offset) ;on se place à l'endroit où l'on veut inserer du texte
bufferSize = Lof(file) - Loc(file) ;taille des données restantes
*buffer = AllocateMemory(bufferSize)
ReadData(file, *buffer, bufferSize) ;on lit les données restantes
FileSeek(file, offset) ;on se replace à l'endroit voulu
WriteString(file, string) ;on écrit le texte à inserer
WriteData(file, *buffer, bufferSize) ;on reécrit les données qui vont derrière
FreeMemory(*buffer)
TruncateFile(file) ;on coupe la fin du fichier
EndIf
EndProcedure
;*****TEST*****
;creation d'un fichier
path.s = "C:\Users\Kévin\Desktop\test.txt"
CreateFile(0, path)
WriteString(0, "bonjour comment ça va")
;Insertion du texte voulu
insererChaine(0, " mon frère", 7)
CloseFile(file)
RunProgram(path)
Re: Insérer ou supprimer des caractères dans un fichier
Publié : jeu. 17/juin/2010 20:36
par Parole De JOJO
merci beaucoup pour l'exemple detaille
en fait j'ai eu la meme idee mais c'est tres lent car j'utilise des grands fichiers et j'insere plein de trucs a toutes sortes d'endroits.
est ce qu'il n'y a pas une fonction plus simple pour cela?
Re: Insérer ou supprimer des caractères dans un fichier
Publié : jeu. 17/juin/2010 22:16
par Ar-S
Assez long comment ?
Peut-être devrais tu mettre tout le contenu de ton texte en mémoire dans un string$ puis faire les modifs après ?
Re: Insérer ou supprimer des caractères dans un fichier
Publié : sam. 19/juin/2010 22:31
par Parole De JOJO
ce sera difficile
en fait je pensais qu'il existait une fonction directe mais apparement ca n'existe pas
esperons que dans la prochaine version fred y pensera
Re: Insérer ou supprimer des caractères dans un fichier
Publié : sam. 19/juin/2010 23:12
par Ar-S
Parole De JOJO a écrit :en fait j'ai eu la meme idee mais c'est tres lent car j'utilise des grands fichiers et j'insere plein de trucs a toutes sortes d'endroits.
Grands comment ? Quels genre de trucs ?
Re: Insérer ou supprimer des caractères dans un fichier
Publié : dim. 20/juin/2010 3:49
par G-Rom
il faut voir un fichier comme un tableau de char (.c) , ce n'est qu'une suite de .c , se qui forme ton fichier.
il faut convertir ton fichier en tableau ( linked list ) et via des insertelement() tu ajoutes ce que tu veut , ou tu veut , et ce de manière rapide.
ex :
Code : Tout sélectionner
Structure FileData
lof.i
filename.s
List character.c()
EndStructure
Procedure.i LoadFileData(File$)
file = OpenFile(#PB_Any,File$)
If file
*FileData.FileData = AllocateMemory(SizeOf(FileData))
*FileData\lof = Lof(file)
*FileData\filename = File$
InitializeStructure(*FileData,FileData)
*Buffer = AllocateMemory(Lof(file))
ReadData(file,*Buffer,Lof(file))
CloseFile(file)
For it = 0 To *FileData\lof -1
AddElement(*FileData\character())
*FileData\character() = PeekC(*Buffer+it)
Next
FreeMemory(*Buffer)
ProcedureReturn *FileData
Else
ProcedureReturn -1
EndIf
EndProcedure
Procedure SaveFileData(*FileData.FileData)
If OpenFile(0,*FileData\filename)
ForEach *FileData\character()
WriteCharacter(0,*FileData\character())
Next
CloseFile(0)
EndIf
EndProcedure
Procedure InsertStringToFileData(*FileData.FileData,string.s,position.i)
For it = 0 To Len(string)-1
SelectElement(*FileData\character(),position+it)
InsertElement(*FileData\character())
*FileData\character() = Asc(Mid(string,it+1,1))
Next
EndProcedure
y a 3 fonction :
LoadFileData(File$) <- charge un fichier et te renvois un pointeur
InsertStringToFileData(*FileData.FileData,string.s,position.i) <- tu ajoutes un string ou tu veut grace au pointeur que tu as eu avec la fct° du dessus.
SaveFileData(*FileData.FileData) <- tu sauvegardes.
Voila , à toi de rajouté sur cette base la suppression de mot

@+