Suppression d'une ligne de texte dans un fichier

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Suppression d'une ligne de texte dans un fichier

Message par Chris »

Salut :)

Est-ce que que quelqu'un sait comment on peut faire pour supprimer une ligne dans un fichier ???

C'est pour mon petit programme de favoris.
Chaque lien, ainsi que le titre, tient sur une ligne, et je voudrais pouvoir supprimer un site, ou, par exemple, modifier une partie du lien, ou le nom.

Bref, je voudrais pouvoir manipuler les données à l'intérieur du fichier.

Chris :)
julien
Messages : 846
Inscription : ven. 30/janv./2004 15:06
Contact :

Message par julien »

; German forum: http://robsite.de/php/pureboard/viewtop ... highlight=
; Author: Froggerprogger
; Date: 11. December 2003

; Function:
; Replaces data in a file. The data can be in any form (array, memory, string)
; and different lengths.

; Funktion:
; Ersetzt in einer Datei Daten. Diese können in irgendeiner Form vorliegen
; (Array, Memory, Strings) und unterschiedliche Längen haben.


;- 10.11.2003 by Froggerprogger
;-
;- ReplaceFileData:
;- filename.s : Dateiname der Input-Datei
;- outputfilename.s : Dateiname der Output-Datei - kann auch mit der Input-Datei übereinstimmen
;- *searchdata.l : ein Pointer auf die Daten die zu suchen sind, z.B. @"TEST" oder @myArray oder *mem etc..
;- searchdataLen.l : Länge der Suchdaten in Bytes
;- *replacedata.l : ein Pointer auf die Daten mit denen zu ersetzen ist, z.B. @"Testing" oder @myArray2 oder *mem2 etc..
;- replacedataLen : Länge der Daten, mit denen ersetzt wird
;-
;- Die Funktion liefert die Anzahl der Ersetzungen zurück oder einen Wert < 0, falls ein
;- Fehler auftauchte:
;- Fehlercodes: -1 = Länge der Input-Datei ist < 1 oder ist ein Verzeichnis oder nicht gefunden (kann mit FileSize(spezifiziert werden))
;- -2 = die Input-Datei konnte nicht geöffnet werden
;- -3 = die Output-Datei konnte nicht geöffnet/erstellt werden

#TempFile = 0
#TempMem = 0

Procedure.l ReplaceFileData(filename.s, outputfilename.s, *searchdata.l, searchdataLen.l, *replacedata, replacedataLen.l)
Protected templ.l
Protected *tempmem.l
Protected fileLen.l
Protected numResults.l

fileLen = FileSize(filename)
If fileLen < 1 Or searchdataLen < 1
ProcedureReturn -1
EndIf

If OpenFile(#TempFile, filename)
*tempmem = AllocateMemory(#TempMem, fileLen)
ReadData(*tempmem, fileLen)
CloseFile(#TempFile)

If CreateFile(#TempFile, outputfilename)
i = 0
While i <= fileLen - 1
If PeekB(*tempmem + i) <> PeekB(*searchdata)
WriteByte(PeekB(*tempmem + i))
i + 1
Else
same = #True : j=1
While same = #True And j < searchdataLen
If PeekB(*tempmem + i + j) <> PeekB(*searchdata + j)
same = #False
Else
j+1
EndIf
Wend
If same = #True
WriteData(*replacedata, replacedataLen)
numResults + 1
Else
WriteData(*tempmem + i, j)
EndIf
i + j
EndIf
Wend

CloseFile(#TempFile)
Else
ProcedureReturn -3
EndIf

Else
ProcedureReturn -2
EndIf

ProcedureReturn numResults
EndProcedure


; ExecutableFormat=Windows
; EOF
brossden
Messages : 833
Inscription : lun. 26/janv./2004 14:37

Message par brossden »

Bonjour

J'ai écris un petit programe ci après qui peut te servir de base, à toi de le torturer à ta guise !

Code : Tout sélectionner

;- Window Constants
;
Enumeration
  #Window_0
EndEnumeration

;- Gadget Constants
;
Enumeration
  #ListIcon_0
  #Button_0
  #Button_1
  #Button_2
  #String_0
  #String_1
EndEnumeration


Procedure Open_Window_0()
  If OpenWindow(#Window_0, 344, 112, 435, 229,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Liste des favoris")
    If CreateGadgetList(WindowID())
      
      ;-
      ListIconGadget(#ListIcon_0, 10, 40, 390, 100, "Site", 100)
      AddGadgetColumn(#ListIcon_0, 2, "Adresse", 286)
      ButtonGadget(#Button_0, 40, 190, 100, 30, "Ajouter")
      ButtonGadget(#Button_1, 150, 190, 100, 30, "Supprimer")
      ButtonGadget(#Button_2, 260, 190, 90, 30, "Sauvegarder")
      StringGadget(#String_0, 10, 150, 100, 20, "Microsoft")
      StringGadget(#String_1, 120, 150, 280, 20, "http://www.microsoft.com")
      
    EndIf
  EndIf
EndProcedure


Open_Window_0()
OpenFile(#1,"c:\favoris.txt")
RC.s=Chr(13)+Chr(10) ; " Défintion d'un retour chariot "

If Lof() < 3; " Création d'un fichier exemple si celui ci n'existe pas "

WriteString("Yahoo;http://fr.yahoo.com" + RC)
WriteString("Astalavista;http://www.astalavista.fr" + RC)
WriteString("PureBasic;http://www.purebasic.fr" + RC)
FileSeek(0)

EndIf


tx.s=ReadString()

While tx.s>" " ;"Remplissage de la liste par le fichier favoris.txt"

x.b=FindString(tx,";",1)
AddGadgetItem(#ListIcon_0,-1,Left(tx,x-1)+Chr(10)+Mid(tx,x+1,255))
tx=ReadString()
Wend

CloseFile(#1)

Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
    
    
    GadgetID = EventGadgetID()
    
    If  GadgetID = #Button_0 ; "Ajouter un enregistrement"
    
      AddGadgetItem(#ListIcon_0,GetGadgetState(#ListIcon_0),GetGadgetText(#String_0)+Chr(10)+GetGadgetText(#String_1))
      SetGadgetText(#String_0,"")
      SetGadgetText(#String_1,"")
      
    ElseIf GadgetID = #Button_1 ;"Supprimer l'enregistrement préalableent cliqué"
     RemoveGadgetItem(#ListIcon_0, GetGadgetState(#ListIcon_0) )     
    
    ElseIf GadgetID = #Button_2 ;" Sauvegarde "
 CreateFile(#1,"C:\favoris.txt")
    
 For l=0 To CountGadgetItems(#ListIcon_0) -1

    WriteString(GetGadgetItemText(#ListIcon_0, l, 0)+";"+ GetGadgetItemText(#ListIcon_0, l, 1) + RC)
 Next
      MessageRequester("Aide", " Je vous laisse continuer le développement ")
      
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

End

Bonne route

Denis
Dernière modification par brossden le dim. 08/févr./2004 10:58, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Salut :)

Super !!! :)

J'ai pas encore tout regardé, mais j'ai l'impression qu'il n'y a pas grand chose à modifier pour que ça corresponde à ce que je cherche.

Merci ;)

Chris :)
Invité

Message par Invité »

Bonjour :P
Le progamme précédent a été ettofer mais je veux bien avouer que nombre d'amélioration peuvent être apportées. :roll:

Salutations !

Denis

Code : Tout sélectionner



Enumeration
  #Window_0
EndEnumeration

Enumeration
  #ListIcon_0
  #Button_0
  #Button_1
  #Button_2
  #Button_3
  #String_0
  #String_1
  #HyperLink_0
  #Web_0
EndEnumeration

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 10, 10, 820, 600,  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar , "Liste des favoris")
    If CreateGadgetList(WindowID())

      ListIconGadget(#ListIcon_0, 5, 5, 390, 121, "Site", 100,#PB_ListIcon_GridLines )
      AddGadgetColumn(#ListIcon_0, 2, "Adresse", 286)
      ButtonGadget(#Button_0, 420, 60, 80, 30, "Ajouter")
      ButtonGadget(#Button_1, 510, 60, 80, 30, "Supprimer")
      ButtonGadget(#Button_2, 600, 60, 80, 30, "Trier")
      ButtonGadget(#Button_3, 690, 60, 80, 30, "Sauvegarder")
      StringGadget(#String_0, 410, 5, 100, 20, "Microsoft")
      StringGadget(#String_1, 520, 5, 270, 20, "http://www.microsoft.com")
 ;     HyperLinkGadget(#HyperLink_0, 10, 180,250,20,"Lien vert souligné", RGB(0,255,0)) 
      WebGadget(#Web_0, 10, 130, 800, 400, "http://www.microsoft.com")

    EndIf
  EndIf
EndProcedure


Open_Window_0()

OpenFile(#1,"c:\favoris.txt")

RC.s=Chr(13)+Chr(10) ; " Défintion d'un retour chariot "

If Lof() < 3; " Création d'un fichier exemple si celui ci n'existe pas "

  WriteString("Yahoo;http://fr.yahoo.com" + RC)
  WriteString("Astalavista;http://www.astalavista.fr" + RC)
  WriteString("PureBasic;http://www.purebasic.fr" + RC)
  FileSeek(0)

EndIf

tx.s=ReadString()

While tx.s>" " ;"Remplissage de la liste par le fichier favoris.txt"
  x.b=FindString(tx,";",1)
  AddGadgetItem(#ListIcon_0,-1,Left(tx,x-1)+Chr(10)+Mid(tx,x+1,255))
  tx=ReadString()
Wend

CloseFile(#1)
 
Repeat
  
  Event = WaitWindowEvent()
  
  If Event = #PB_EventGadget
     Debug GetGadgetText(#Web_0)
    GadgetID = EventGadgetID()
    
   If GadgetID = #String_1
    
      If GetGadgetText(#String_1)="" And GetGadgetText(#String_0) >""
      SetGadgetText(#String_1,"http://www.")
      SetGadgetState(#String_1,4) 
      EndIf 
     
     
     ElseIf GadgetID = #ListIcon_0 
     
      
          SetGadgetText(#Web_0,GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0), 1))
     
      
 
    ElseIf  GadgetID = #Button_0 ; "Ajouter un enregistrement"
    
      AddGadgetItem(#ListIcon_0,GetGadgetState(#ListIcon_0),GetGadgetText(#String_0)+Chr(10)+GetGadgetText(#String_1))
      SetGadgetText(#String_0,"")
      SetGadgetText(#String_1,"")
      
    ElseIf GadgetID = #Button_1 ;"Supprimer l'enregistrement préalableent cliqué"
    
    
     RemoveGadgetItem(#ListIcon_0, GetGadgetState(#ListIcon_0) ) 
     
    
    
    
     ElseIf GadgetID = #Button_2 ;" Trier"
     
      nbr=CountGadgetItems(#ListIcon_0) 
         
     Dim liste.s(nbr)
     

     For l=0 To nbr -1
       liste(l+1)=GetGadgetItemText(#ListIcon_0, l, 0)+";"+ GetGadgetItemText(#ListIcon_0, l, 1)
     Next

      SortArray(liste(),4)

      ClearGadgetItemList(#ListIcon_0) 
      
     For l=1 To nbr 
     ;Debug liste(l)
        x.b=FindString(liste(l),";",1)
        AddGadgetItem(#ListIcon_0,-1,Left(liste(l),x-1)+Chr(10)+Mid(liste(l),x+1,255))
        tx=ReadString() 
     Next
   
    ElseIf GadgetID = #Button_3 ;" Sauvegarder "
      CreateFile(#1,"C:\favoris.txt")
    
      For l=0 To CountGadgetItems(#ListIcon_0) -1
        WriteString(GetGadgetItemText(#ListIcon_0, l, 0)+";"+ GetGadgetItemText(#ListIcon_0, l, 1) + RC)
      Next
      MessageRequester("Aide", " Je vous laisse continuer le développement ")
   
    ElseIf GadgetID = #Web_0
          Debug GetGadgetText(#Web_0)
 
    EndIf
    
  EndIf
  
Until Event = #PB_EventCloseWindow

End


Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

moulinette de sob

Message par Patrick88 »

beaucoup moins étoffé

Code : Tout sélectionner

fichier$ = OpenFileRequester("ouverture","*.*","tous|*.*",0)
result = OpenFile(1,fichier$)
chemin$ = GetPathPart(fichier$)
File$ = GetFilePart(fichier$)
ext$ = GetExtensionPart(fichier$)
fichout$ = chemin$+File$+"2."+ext$

result = OpenFile(2,fichout$)
While Eof(1) = 0
  chaine1$ = "" : chaine2$ = ""
  UseFile(1)
  chaine1$ = ReadString()
;; là on met ce que l'on veut
  chaine2$ = "ren "+chaine1$+" "+chaine1$+Chr(13)+Chr(10)
  UseFile(2)
  WriteString(chaine2$)
Wend
CloseFile(1)
CloseFile(2)
ou plus bourin

Code : Tout sélectionner

Dim texte$(1000)
OpenFile(0,"info.txt")
i = 0
While Loc() <> Lof()
  
  texte$(i) = ReadString()
  Debug texte$(i)
  i+1
  
Wend
CloseFile(0)
j=i

CreateFile(0,"info2.txt")
For i = 0 To j
  texte$(i) = ">HELP "+texte$(i)
  WriteStringN(texte$(i))
Next
CloseFile(0)
ça permet pas de retirer une ligne de texte ou de la remplacer, mais on peux toujours rajouter un test pour ...

quand à faire de l'accés direct sur un fichier texte.... peut-être avec
PureBasic X :lol: :P
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

J'ai pas essayé, mais en passant par une LinkedList, ca devrait fonctionner aussi.

L'avantage, c'est qu'on doit pouvoir charger le fichier dans la liste, travailler dans la liste, et ne mettre à jour le fichier qu'à la fermeture.

Ca devrait également permettre de faire des routines plus rapides, puisqu'il y a moins d'accès au disque.

Je vais essayer ça !! :roll:

En tout cas, merci pour les réponses ;)

Chris :)
Répondre