Database: ==> suite du post commencé sur "Suggestion
Publié : mer. 11/févr./2004 21:27
Bon, j'ai commencé de faire un fichier pour faire un "Include", ou peut-être une lib, si c'est possible.
Voilà le début de la bête
Pour l'instant, on peut créer le fichier, ajouter des champs à la fin, en inserer au milieu de la base.
J'aurais peut-être pu faire plus rapide, mais je ne sais pas comment.
Faudrait que je voie ça...
Bon, pour le moment, ça donne ça :
Voilà la liste des fonctions prévues :
Voilà : n'hésitez pas à critiquer, il y a encore une quinzaine de fonctions à faire, alors si c'est pas comme ça qu'il faut faire, autant que je le sache tout de suite 
Chris
Voilà le début de la bête

Pour l'instant, on peut créer le fichier, ajouter des champs à la fin, en inserer au milieu de la base.
J'aurais peut-être pu faire plus rapide, mais je ne sais pas comment.
Faudrait que je voie ça...

Bon, pour le moment, ça donne ça :
Code : Tout sélectionner
Structure CHAMPS
Index.b
Insertion.w
EndStructure
NewList Valeur.CHAMPS()
Declare DB_CsvInsertField(Position.b, Name.s)
Global Temp$
;- Ouverture de la base
Procedure DB_CsvOpen(Index.b, Fichier.s)
If ReadFile(Index,Fichier) = 0
CreateFile(Index,Fichier)
CloseFile(Index)
Else
CloseFile(Index)
EndIf
If OpenFile(Index,Fichier) = 0
MessageRequester("Erreur","Impossible d'ouvrir le fichier!!!",#PB_MessageRequester_Ok|#MB_ICONERROR)
EndIf
EndProcedure
;- Fermeture de la base
Procedure DB_CsvClose(Index.b)
CloseFile(Index)
EndProcedure
;- Ajout de champs à la fin de la base
Procedure DB_CsvCreateField(Position.b, Name.s)
Field.s = Chr(34) + Name + Chr(34) ; on ajoute les guillemets
FileSeek(0) : Temp$ = ReadString() ; lecture de la ligne des champs
If Len(Temp$) = 0 ; si la longueur est à 0
WriteString(Field) ; ecrit le champ tel quel
ElseIf Len(Temp$) > 0 ; sinon, si la longueur > 0
If FindString(Temp$,Field,0) = 0 ; et si le nom n'existe pas déjà
If Position = -1 ; si "Position" = -1
FileSeek(Len(Temp$)) ; déplace le pointeur à la fin
WriteString(";"+Field) ; écrit la valeur
Else ; sinon, si "Position" <> -1
; appelle la procedure d'insertion
DB_CsvInsertField(Position, Name)
EndIf
EndIf
EndIf
EndProcedure
;- Insertion de champs au milieu de la base
Procedure DB_CsvInsertField(Position.b, Name.s)
Field.s = Chr(34) + Name + Chr(34) + ";" ; on ajoute les guillemets
FileSeek(0) : Temp$ = ReadString() ; lecture de la ligne des champs
;** Appel de procedure Anti Neu-Neu ****************************************************
If Len(Temp$) = 0 ; Pour les neu-neu qui voudraient
DB_CsvCreateField(Position, Name) ; "Inserer" un champ dans une
EndIf ; base vide... ;o)
;**************************************************************************************
Start = 1 : NumChamps = 0 ; Initialise les variables
Repeat ;
pos = FindString(Temp$,";",Start) ; recherche le séparateur
If pos > 0 ; si il existe
AddElement(Valeur()) ; on stocke les valeurs dans la liste
Valeur()\Index = NumChamps ; N° du champ
Valeur()\Insertion = pos ; Position
EndIf
NumChamps + 1 : Start = pos +1 ;
Until pos = 0 ; jusqu'à la fin
SelectElement(Valeur(),Position -1)
InsPoint = Valeur()\Insertion
G_Tmp$ = Left(Temp$,InsPoint)
R_Tmp$ = Right(Temp$,Len(Temp$) - InsPoint)
If AllocateMemory(0,256,0)
*Pointer = MemoryID()
CopyMemoryString(G_Tmp$,@*Pointer)
CopyMemoryString(Field)
CopyMemoryString(R_Tmp$)
Temp$ = PeekS(MemoryID())
FileSeek(0)
WriteString(Temp$)
FreeMemory(0)
EndIf
EndProcedure
;/ Commandes de test
DB_CsvOpen(0,"Liens.csv") ; Ouvre la base, ou en crée une
DB_CsvCreateField(-1, "Champ 0") ; Insère 4 champs l'un à la suite de l'autre
DB_CsvCreateField(-1, "Champ 1")
DB_CsvCreateField(-1, "Champ 2")
DB_CsvCreateField(-1, "Champ 3")
; Insertion de champs : Le premier est le champ 0
DB_CsvCreateField(4, "Champ 4") ; Insère un champ à la position 4
DB_CsvCreateField(1, "Champ 5") ; Insère un champ à la position 1
DB_CsvClose(0)
Code : Tout sélectionner
DB_CsvClose() ; Ferme le fichier
DB_CsvCreateField() ; Crée un champ dans la base
DB_CsvInsertField() ; Insère un champ à une position donnée
DB_CsvOpen() ; Ouvre une base, ou en crée une
DB_CsvDeleteField() ; Supprime un champ
DB_CsvDeleteItem() ; Supprime une fiche
DB_CsvFindItem() ; Recherche une fiche
DB_CsvCountField() ; Retourne le nombre de champs
DB_CsvGetFieldIndex() ; Retourne l'index du champ sélectionné
DB_CsvGetFieldName() ; Retourne le nom du champ sélectionné
DB_CsvItemCount() ; Retourne le nombre de fiches
DB_CsvItemIndex() ; Retourne l'index de la fiche sélectionnée
DB_CsvItemValue() ; Retourne la valeur de la fichie (Champ/Fiche)
DB_CsvInsertItem() ; Insère une nouvelle fiche
DB_CsvMergeItems() ; Fusionne deux bases
DB_CsvReset() ; Réinitialise la base (Supprime Champs et Fiches)
DB_CsvResetItems() ; Supprime toutes les fiches
DB_CsvResetSelectedItem() ; Vide la fiche, sans l'effacer
DB_CsvSetFieldName() ; Change le nom d'un champ
DB_CsvSetItemValue() ; Inscrit une valeur dans une fiche (Ligne/Colonne)

Chris
