Public Const PA_Version_Plan_d_action = "001" ' Version actuelle du plan d'action Public Const PA_Fichier_Plan_d_action = "c:\PA.txt" ' Chemin du plan d'action (Variable à l'avenir ?) Public Type Action 'Les champs commençant par z donne la taille du champ suivant (sauf si taille figées) Numéro_action As String * 12 'Numéro unique de l'action Numéro_depp As String Problème As String Cause As String Action_à_faire As String Responsable_action As String 'login du pilote Délai As String Durée As String 'Durée prévue de l'action Délai_replanifié As String Daté_réalisation As String Avancement As String 'Pourcentage : de 0 à 100 Commentaire As String Créateur As String 'Nom de celui qui a créér l'action Date_création As String 'Date de la création de l'action Efficacité As String Vérif_faite_par As String Vérif_faite_le As String Vérif_Commentaire As String Catégorie1 As String Catégorie2 As String Catégorie3 As String Catégorie4 As String End Type Public Function Ouvrir_Fichier_lecture(nom_fichier, numéro) On Error Resume Next boucle = 0 Do Open nom_fichier For Binary Access Read Lock Read As numéro If Err.Number = 0 Then Exit Do 'Pas d'erreur : on quitte desc = Err.Description Err.Clear 'On efface l'erreur précédente boucle = boucle + 1 If boucle = 5 Then Exit Do '5 tentatives : on quitte avec une erreur t = Now + TimeValue("00:00:02") 'Sinon on attend 2 secondes et on réessaye Do While t > Now: Loop Loop If boucle = 5 Then Charger_Fichier = desc 'On retourne la description de l'erreur Else Charger_Fichier = "" End If End Function Public Function Ouvrir_Fichier_ecriture(nom_fichier, numéro) On Error Resume Next boucle = 0 Do Open nom_fichier For Binary Access Write Lock Write As numéro If Err.Number = 0 Then Exit Do 'Pas d'erreur : on quitte desc = Err.Description Err.Clear 'On efface l'erreur précédente boucle = boucle + 1 If boucle = 5 Then Exit Do '5 tentatives : on quitte avec une erreur t = Now + TimeValue("00:00:02") 'Sinon on attend 2 secondes et on réessaye Do While t > Now: Loop Loop If boucle = 5 Then Charger_Fichier = desc 'On retourne la description de l'erreur Else Charger_Fichier = "" End If End Function Public Function PA_Supprimer_action(num_action) Dim longeur As String * 12 'On ouvre le fichier 'On ouvre le fichier 2 erreur2 = Ouvrir_Fichier_ecriture(PA_Fichier_Plan_d_action, 2) erreur = Ouvrir_Fichier_lecture(PA_Fichier_Plan_d_action, 1) 'Si on a une erreur If erreur <> "" Or erreur2 <> "" Then 'On a une erreur PA_Supprimer_action = erreur Exit Function End If ' On lit le fichier en entier tampon$ = String$(LOF(1), " ") Get #1, , tampon$ append ' On cherche l'action concernée ' On retrouve le numéro de la dernière action ajoutée octet = 13 'On boucle jusquà trouver le numéro trouvé = False Do pos_ini = octet 'On passe la version de l'action octet = octet + Len(PA_Version_Plan_d_action) 'On lit la longeur de l'action lgr val(Mid(tampon$, octet, Len(longeur))): octet octet + Len(longeur) 'On lit le numéro de l'action num = val(Mid(tampon$, octet, 12)) If num = num_action Then 'On tient notre action 'On copie le début début$ = String$(pos_ini - 1, " ") Get #1, 1, début$ 'On copie la fin fin$ = String$(LOF(1) - (pos_ini + 3 + 12 + lgr), " ") Get #1, pos_ini + 3 + 12 + lgr, fin$ 'On ferme le fichier 1 Close #1 'On colle le début Put #2, 1, début$ 'On colle la fin Put #2, , fin$ MsgBox fin$ s = Seek(2) Put #2, , "STOP!!!!!!!!!!!!" trouvé = True Exit Do End If 'On lit l'action octet = octet + lgr Loop While octet <= Len(tampon) Close #2 Close #1 'On retourne un message si erreur If trouvé = False Then PA_Supprimer_action = "L'action n'a pas été trouvée" Else PA_Supprimer_action = "" End If End Function
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionPublic Function PA_Ajouter_action(a As Action) ' Retourne false si pb, sinon retourne le numéro de l'action Dim num_action As String * 12 Dim longeur As String * 12 'On ajoute l'action 'Routine erreur d'ouverture + vérif fichier présent erreur = Ouvrir_Fichier(PA_Fichier_Plan_d_action, 1) 'Si on a une erreur If erreur <> "" Then 'On a une erreur PA_Ajouter_action = erreur Exit Function End If ' On retrouve le numéro de la dernière action ajoutée Get #1, 1, num_action ' et on l'incrémente c = val(num_action) + 1 num_action = Str$(c) a.Numéro_action = num_action Put #1, 1, num_action ' On met la version de l'action Put #1, LOF(1) + 1, PA_Version_Plan_d_action 'On met la longeur de l'action longeur = Str$(LenB(a)) Put #1, , longeur posini = Seek(1) ' On met l'action Put #1, , a pos = Seek(1) longeur = pos - posini Put #1, posini - Len(longeur), longeur Close #1 ' Tout c'est bien passé, on retourne le numéro de l'action PA_Ajouter_action = num_action End Function
For files opened in Binary mode, all of the Random rules apply, except:
· The Len clause in the Open statement has no effect. Put writes all variables to disk contiguously; that is, with no padding between records.
· For any array other than an array in a user-defined type, Put writes only the data. No descriptor is written.
· Put writes variable-length strings that are not elements of user-defined types without the 2-byte length descriptor. The number of bytes written equals the number of characters in the string.
l'instruction Put (en mode binary) ajoute systématiquement à la fin: non, idem, il suffit de définir "pos" dans l'instruction put #1,pos,données.
Public Const PA_Version_Plan_d_action = "001" ' Version actuelle du plan d'action Public Const PA_Fichier_Plan_d_action = "c:\PA.txt" ' Chemin du plan d'action (Variable à l'avenir ?) Public Type Action 'Les champs commençant par z donne la taille du champ suivant (sauf si taille figées) Numéro_action As String * 12 'Numéro unique de l'action Numéro_depp As String Problème As String Cause As String Action_à_faire As String Responsable_action As String 'login du pilote Délai As String Durée As String 'Durée prévue de l'action Délai_replanifié As String Daté_réalisation As String Avancement As String 'Pourcentage : de 0 à 100 Commentaire As String Créateur As String 'Nom de celui qui a créér l'action Date_création As String 'Date de la création de l'action Efficacité As String Vérif_faite_par As String Vérif_faite_le As String Vérif_Commentaire As String Catégorie1 As String Catégorie2 As String Catégorie3 As String Catégorie4 As String End Type Public Function Ouvrir_Fichier_lecture(nom_fichier, numéro) On Error Resume Next boucle = 0 Do If Dir(nom_fichier & "bloquer") <> "" Then 'Le fichier est bloqué pour l'instant, on boucle Else Open nom_fichier For Binary Access Read Lock Read As numéro If Err.Number = 0 Then Exit Do 'Pas d'erreur : on quitte desc = Err.Description Err.Clear 'On efface l'erreur précédente End If boucle = boucle + 1 If boucle = 5 Then Exit Do '5 tentatives : on quitte avec une erreur t = Now + TimeValue("00:00:02") 'Sinon on attend 2 secondes et on réessaye Do While t > Now: Loop Loop If boucle = 5 Then Charger_Fichier = desc 'On retourne la description de l'erreur Else Charger_Fichier = "" End If End Function Public Function Ouvrir_Fichier_ecriture(nom_fichier, numéro) On Error Resume Next boucle = 0 Do If Dir(nom_fichier & "bloquer") <> "" Then 'Le fichier est bloqué pour l'instant, on boucle Else Open nom_fichier For Binary Access Write Lock Write As numéro If Err.Number = 0 Then Exit Do 'Pas d'erreur : on quitte desc = Err.Description Err.Clear 'On efface l'erreur précédente End If boucle = boucle + 1 If boucle = 5 Then Exit Do '5 tentatives : on quitte avec une erreur t = Now + TimeValue("00:00:02") 'Sinon on attend 2 secondes et on réessaye Do While t > Now: Loop Loop If boucle = 5 Then Charger_Fichier = desc 'On retourne la description de l'erreur Else Charger_Fichier = "" End If End Function Public Function Bloquer_Fichier_ecriture(nom_fichier, numéro) Open nom_fichier & "bloquer" For Output As numéro Print #numéro, "bloquer" Close numéro End Function Public Function Débloquer_Fichier_ecriture(nom_fichier) Kill (nom_fichier & "bloquer") End Function Public Function PA_Ajouter_action(a As Action) ' Retourne false si pb, sinon retourne le numéro de l'action Dim num_action As String * 12 Dim longeur As String * 12 'On ajoute l'action 'Routine erreur d'ouverture + vérif fichier présent erreur = Ouvrir_Fichier(PA_Fichier_Plan_d_action, 1) 'Si on a une erreur If erreur <> "" Then 'On a une erreur PA_Ajouter_action = erreur Exit Function End If ' On retrouve le numéro de la dernière action ajoutée Get #1, 1, num_action ' et on l'incrémente c = val(num_action) + 1 num_action = Str$(c) a.Numéro_action = num_action Put #1, 1, num_action ' On met la version de l'action Put #1, LOF(1) + 1, PA_Version_Plan_d_action 'On met la longeur de l'action longeur = Str$(LenB(a)) Put #1, , longeur posini = Seek(1) ' On met l'action Put #1, , a pos = Seek(1) longeur = pos - posini Put #1, posini - Len(longeur), longeur Close #1 ' Tout c'est bien passé, on retourne le numéro de l'action PA_Ajouter_action = num_action End Function Public Function PA_Supprimer_action(num_action) Dim longeur As String * 12 'On ouvre le fichier erreur = Ouvrir_Fichier_lecture(PA_Fichier_Plan_d_action, 1) 'Si on a une erreur If erreur <> "" Then 'On a une erreur Close #1 PA_Supprimer_action = erreur Exit Function End If 'On bloque le fichier erreur = Bloquer_Fichier_ecriture(PA_Fichier_Plan_d_action, 3) 'Si on a une erreur If erreur <> "" Then 'On a une erreur Close #1 PA_Supprimer_action = erreur Exit Function End If ' On lit le fichier en entier tampon$ = String$(LOF(1), " ") Get #1, , tampon$ ' On cherche l'action concernée ' On retrouve le numéro de la dernière action ajoutée octet = 13 'On boucle jusquà trouver le numéro trouvé = False Do pos_ini = octet 'On passe la version de l'action octet = octet + Len(PA_Version_Plan_d_action) 'On lit la longeur de l'action lgr val(Mid(tampon$, octet, Len(longeur))): octet octet + Len(longeur) 'On lit le numéro de l'action num = val(Mid(tampon$, octet, 12)) If num = num_action Then 'On tient notre action 'On copie le début début$ = String$(pos_ini - 1, " ") Get #1, 1, début$ 'On copie la fin fin$ = String$(LOF(1) - (pos_ini + 3 + 12 + lgr), " ") Get #1, pos_ini + 3 + 12 + lgr, fin$ 'On ferme le fichier 1 Close #1 'On ouvre le fichier 2 erreur2 = Ouvrir_Fichier_ecriture(PA_Fichier_Plan_d_action & "tmp", 2) If erreur2 <> "" Then sdf = 1 'On colle le début""" Put #2, 1, début$ 'On colle la fin Put #2, , fin$ trouvé = True Exit Do End If 'On lit l'action octet = octet + lgr Loop While octet <= Len(tampon) Close #2 Close #1 Kill PA_Fichier_Plan_d_action ' on supprime le fichier du plan d'action Name PA_Fichier_Plan_d_action & "tmp" As PA_Fichier_Plan_d_action ' on renomme le fichier temporaire Débloquer_Fichier_ecriture (PA_Fichier_Plan_d_action) ' et on le débloque 'On retourne un message si erreur If trouvé = False Then PA_Supprimer_action = "L'action n'a pas été trouvée" Else PA_Supprimer_action = "" End If End Function