Divers code utile pour les fichier texte
Publié : mer. 20/avr./2011 13:07
Salut a tous !
Voici quelques code pour les fichier texte:
Permet de lire un fichier texte très rapidement
utile notamment pour les très gros fichier texte (plusieurs Mo)
Permet d'écrire dans le fichier a la ligne voulue
et a la position souhaitez
Pour savoir le nombre de ligne dans le fichier
Ceci permet de supprimer la ligne spécifier dans le fichier
Ceci permet de supprimer une ou plusieurs
chaine d'un coup a la ligne souhaiter dans le fichier
Ceci permet de remplacer une chaine a la ligne
souhaiter dans le fichier
Sinon j'ai essayer de faire une fonction pour tous sa mais c'est pas encore au point
Voici quelques code pour les fichier texte:
Permet de lire un fichier texte très rapidement
utile notamment pour les très gros fichier texte (plusieurs Mo)
Code : Tout sélectionner
; Lire un fichier a la vitesse de l'éclair
; Par M Dieppedalle David le dimanche 3 octobre 2010
file$ = OpenFileRequester("Sélectionnez un fichier","","Text (.txt)|*.txt|All files (*.*)|*.*",0)
If file$
If ReadFile(0, file$)
length = Lof(0) ; Lit la taille en octets du fichier
*MemoryID = AllocateMemory(length) ; alloue un bloc mémoire de la taille du fichier "length"
If *MemoryID ; si l'allacation a bien fonctionner ont continue
ReadData(0, *MemoryID, length) ; Lit les données du fichier et les place dans le bloc mémoire "*MemoryID" de la taille correspondant à "length"
*Fichier.String = @*MemoryID ; "*Fichier" a pour valeur l'adresse où réside la chaîne de caractères en mémoire "*MemoryID"
Fichier$ = *Fichier\s ; "Fichier$" à pour valeur le texte où réside la chaîne de caractères en mémoire "*MemoryID"
Debug Fichier$
EndIf
CloseFile(0)
EndIf
EndIf
et a la position souhaitez
Code : Tout sélectionner
; Par M Dieppedalle David en avril 2011
Global NewList ComptenueFichier.s()
Procedure.l WriteFileLigne(NonFichier$, Texte$, NumeroLigne, Position) ; Position -1 = écrire a la fin de la ligne
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(ComptenueFichier())
ComptenueFichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
Debug Position
ForEach ComptenueFichier()
Index = ListIndex(ComptenueFichier())
If Index = NumeroLigne - 1
Ligne$ = ComptenueFichier()
If Position = -1
Position = Len(Ligne$) + 1
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = InsertString(Ligne$, Texte$, Position)
ComptenueFichier() = Ligne$
Break
EndIf
Next ComptenueFichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach ComptenueFichier()
WriteStringN(1, ComptenueFichier())
Next ComptenueFichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
Code : Tout sélectionner
; Par M Dieppedalle David en avril 2011
Global NombreLigne = 0
Procedure CountFileLine(NonFichier$)
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
ReadString(1) ; lit ligne par ligne le contenu du fichier
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
MessageRequester("Information","Impossible d'ouvrir le fichier !")
EndIf
EndProcedure
Code : Tout sélectionner
; Par M Dieppedalle David en avril 2011
Global NewList ComptenueFichier.s()
Procedure.l DeleteFileLigne(NonFichier$, NumeroLigne)
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(ComptenueFichier())
ComptenueFichier() = ReadString(1) + Chr(13) + Chr(10) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach ComptenueFichier()
Index = ListIndex(ComptenueFichier())
If Index = NumeroLigne - 1
DeleteElement(ComptenueFichier(), 1)
Break
EndIf
Next ComptenueFichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach ComptenueFichier()
WriteString(1, ComptenueFichier())
Next ComptenueFichier()
CloseFile(1)
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
chaine d'un coup a la ligne souhaiter dans le fichier
Code : Tout sélectionner
; Par M Dieppedalle David en avril 2011
Global NewList ComptenueFichier.s()
Procedure.l RemoveCharFileLigne(NonFichier$, ChaineASupprimer$, NumeroLigne, Position, Mode, SupprimerNombreOccurence) ; Position -1 = supprimer le dernier caractère a la fin de la ligne
If Mode = 0
Mode = #PB_String_NoCase
ElseIf Mode = 1
Mode = 0
Else
Mode = #PB_String_NoCase
EndIf
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(ComptenueFichier())
ComptenueFichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach ComptenueFichier()
Index = ListIndex(ComptenueFichier())
If Index = NumeroLigne - 1
Ligne$ = ComptenueFichier()
If Position = -1
Position = Len(Ligne$)
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = RemoveString(Ligne$, ChaineASupprimer$, Mode, Position, SupprimerNombreOccurence)
ComptenueFichier() = Ligne$
Break
EndIf
Next ComptenueFichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach ComptenueFichier()
WriteStringN(1, ComptenueFichier())
Next ComptenueFichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
souhaiter dans le fichier
Code : Tout sélectionner
; Par M Dieppedalle David en avril 2011
Global NewList ComptenueFichier.s()
Procedure.l ReplaceCharFileLigne(NonFichier$, ChaineARechercher$, RemplacerChainePar$, NumeroLigne, PositionDepart, Mode) ; Position -1 = Remplacer le dernier caractère a la fin de la ligne
If Mode = 0
Mode = #PB_String_NoCase
ElseIf Mode = 1
Mode = 0
Else
Mode = #PB_String_NoCase
EndIf
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(ComptenueFichier())
ComptenueFichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach ComptenueFichier()
Index = ListIndex(ComptenueFichier())
If Index = NumeroLigne - 1
Ligne$ = ComptenueFichier()
If Position = -1
Position = Len(Ligne$)
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = ReplaceString(Ligne$, ChaineARechercher$, RemplacerChainePar$, Mode, Position)
ComptenueFichier() = Ligne$
Break
EndIf
Next ComptenueFichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach ComptenueFichier()
WriteStringN(1, ComptenueFichier())
Next ComptenueFichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
EndProcedure
Code : Tout sélectionner
Global NewList Fichier.s()
Global NombreLigne = 0
Procedure.l FileOperation(NomFichier$ = "", TypeOperation$ = "", NumeroLigne = 1, Chaine1$ = "", Chaine2$ = "", Position = 1, Mode = 0, Occurence = 1)
ClearList(Fichier())
If TypeOperation$ = "ReadSimple"
If ReadFile(1, NomFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
AddElement(Fichier())
Fichier() = ReadString(1) ; Affiche ligne par ligne le contenu du fichier
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
ProcedureReturn 1
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ElseIf NomFichier$ = "ReadSpeed"
; Lire un fichier a la vitesse de l'éclair
; Par M Dieppedalle David le dimanche 3 octobre 2010
Ligne = 0
If ReadFile(1, file$)
length = Lof(1) ; Lit la taille en octets du fichier
*MemoryID = AllocateMemory(length) ; alloue un bloc mémoire de la taille du fichier "length"
If *MemoryID ; si l'allacation a bien fonctionner ont continue
ReadData(1, *MemoryID, length) ; Lit les données du fichier et les place dans le bloc mémoire "*MemoryID" de la taille correspondant à "length"
*Fichier.String = @*MemoryID ; "*Fichier" a pour valeur l'adresse où réside la chaîne de caractères en mémoire "*MemoryID"
Donnee$ = *Fichier\s ; "Fichier$" à pour valeur le texte où réside la chaîne de caractères en mémoire "*MemoryID"
Repeat
Ligne + 1
AddElement(Fichier())
Fichier() = StringField(Donnee$, Ligne, Chr(13) + Chr(10))
Until Lecture$ = ""
ProcedureReturn 1
Else
ProcedureReturn 0
EndIf
CloseFile(0)
Else
ProcedureReturn 0
EndIf
ElseIf NomFichier$ = "WriteSimple"
If OpenFile(1, NomFichier$) ; Ouvre un fichier existant ou en crée un nouveau s'il n'existait pas
FileSeek(1, Lof(1)) ; Place le pointeur à la fin du fichier en utilisant le résultat de Lof()
WriteStringN(1, Chaine1$)
CloseFile(1)
ProcedureReturn 1
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ElseIf NomFichier$ = "WriteStringLine"
; Position -1 = écrire a la fin de la ligne
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(Fichier())
Fichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
Debug Position
ForEach Fichier()
Index = ListIndex(Fichier())
If Index = NumeroLigne - 1
Ligne$ = Fichier()
If Position = -1
Position = Len(Ligne$) + 1
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = InsertString(Ligne$, Chaine1$, Position)
Fichier() = Ligne$
Break
EndIf
Next Fichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach Fichier()
WriteStringN(1, Fichier())
Next Fichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
ElseIf NomFichier$ = "CountLine"
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
ReadString(1) ; lit ligne par ligne le contenu du fichier
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
ProcedureReturn 1
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ElseIf NomFichier$ = "RemoveLine"
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(Fichier())
Fichier() = ReadString(1) + Chr(13) + Chr(10) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach Fichier()
Index = ListIndex(Fichier())
If Index = NumeroLigne - 1
DeleteElement(Fichier(), 1)
Break
EndIf
Next Fichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach Fichier()
WriteString(1, Fichier())
Next Fichier()
CloseFile(1)
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
ElseIf NomFichier$ = "RemoveStringLine"
; Position -1 = supprimer le dernier caractère a la fin de la ligne
If Mode = 0
Mode = #PB_String_NoCase
ElseIf Mode = 1
Mode = 0
Else
Mode = #PB_String_NoCase
EndIf
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(Fichier())
Fichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach Fichier()
Index = ListIndex(Fichier())
If Index = NumeroLigne - 1
Ligne$ = Fichier()
If Position = -1
Position = Len(Ligne$)
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = RemoveString(Ligne$, Chaine1$, Mode, Position, Occurence)
Fichier() = Ligne$
Break
EndIf
Next Fichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach Fichier()
WriteStringN(1, Fichier())
Next Fichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
ElseIf NomFichier$ = "ReplaceStringLine"
; Par M Dieppedalle David en avril 2011
; Position -1 = Remplacer le dernier caractère a la fin de la ligne
If Mode = 0
Mode = #PB_String_NoCase
ElseIf Mode = 1
Mode = 0
Else
Mode = #PB_String_NoCase
EndIf
NombreLigne = 0
If ReadFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
NombreLigne + 1
AddElement(Fichier())
Fichier() = ReadString(1) ; lit ligne par ligne le contenu du fichier et l'enregistre dans la liste
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
ProcedureReturn 0
EndIf
ForEach Fichier()
Index = ListIndex(Fichier())
If Index = NumeroLigne - 1
Ligne$ = Fichier()
If Position = -1
Position = Len(Ligne$)
ElseIf Position <= 0
Position = 1
ElseIf Position > Len(Ligne$)
Position = Len(Ligne$)
EndIf
Ligne$ = ReplaceString(Ligne$, Chaine1$, Chaine2$, Mode, Position)
Fichier() = Ligne$
Break
EndIf
Next Fichier()
If DeleteFile(NonFichier$)
If OpenFile(1, NonFichier$) ; Si le fichier peut être lu , on continue...
ForEach Fichier()
WriteStringN(1, Fichier())
Next Fichier()
CloseFile(1)
Else
ProcedureReturn 0
EndIf
Else
ProcedureReturn 0
EndIf
ProcedureReturn 1
Else
EndIf
EndProcedure
; IDE Options = PureBasic 4.60 Beta 2 (Windows - x86)
; CursorPosition = 8
; Folding = -
; EnableXP
; EnableUser
; EnableOnError
; EnableCompileCount = 11
; EnableBuildCount = 0
; EnableExeConstant