Insérer ou supprimer des caractères dans un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Insérer ou supprimer des caractères dans un fichier

Message 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
lepiaf31
Messages : 510
Inscription : dim. 25/mars/2007 13:44
Localisation : Toulouse, France
Contact :

Re: Insérer ou supprimer des caractères dans un fichier

Message 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)
    
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Insérer ou supprimer des caractères dans un fichier

Message 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?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Insérer ou supprimer des caractères dans un fichier

Message 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 ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Parole De JOJO
Messages : 446
Inscription : mar. 25/mai/2010 17:24
Localisation : Bnei Brak, Israel

Re: Insérer ou supprimer des caractères dans un fichier

Message 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
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Insérer ou supprimer des caractères dans un fichier

Message 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 ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
G-Rom
Messages : 3641
Inscription : dim. 10/janv./2010 5:29

Re: Insérer ou supprimer des caractères dans un fichier

Message 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 ;)
@+
Répondre