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