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
  EndIfet 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
EndProcedureCode : 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
EndProcedureCode : 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
EndProcedurechaine 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
EndProceduresouhaiter 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
EndProcedureCode : 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