Les Snippets

Connexion

insérer des données dans un fichier

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 02/03/2011 22:08:50 et initié par PCPT [Liste]
Date de mise à jour : 03/03/2011 07:41:58
Vue : 6435
Catégorie(s) : Fichier / Disque, Chaîne de caractères
Langage sélectionné : VBA
Langages dispo pour ce code :
- VB6, VBA
- Voir tous les langages pour ce code snippet



Langage : VB6 , VBA
Date ajout : 02/03/2011
Posté par PCPT [Liste]
DateMAJ : 03/03/2011
Private Function InsertBytes(ByVal sFileName As StringByRef baData() As ByteByVal lCursor As LongOptional ByVal iPacketSize As Integer = 512As Boolean
'sFileName      -> chemin du fichier
'baData         -> tableau à insérer, doit impérativement être dimensionné
'lCursor        -> position d'insertion. on considère l'insertion "avant" le caractère, donc en tout début pour "1", AVANT le dernier caractère pour filelen
'iPacketSize    -> taille du tampon à utiliser. pas de vérification, doit évidemment être positif
'retourne l'état de réussite
    Dim iNumFile As Integer            'numéro fichier
    Dim lFileLength As Long            'taille du fichier
    Dim baBuffer() As Byte             'tableau tampon
    Dim lBufferLength As Long          'taille du tampon courant
    Dim lPosStart As Long              'position début courante
    Dim lPosEnd As Long                'position début courante
    iNumFile = FreeFile
    On Local Error Resume Next
    Open sFileName For Binary Access Read Write As #iNumFile
    If Err.Number Then
        Err.Clear
    Else
        lFileLength = LOF(iNumFile)
        If (lCursor > lFileLength) Then
            lCursor = lFileLength + 1
        ElseIf (lCursor <= 0Then
            lCursor = 1
        End If
        If lFileLength = 0 Then
'                               fichier vide, pratique
            Put #iNumFile, , baData
        Else
'                               agrandissement du fichier avec les data finales ; utilisées comme tampon
            lPosStart = lFileLength + 1
            Seek #iNumFile, lPosStart
            Put #iNumFile, , baData
'                               dépassement fin de fichier = terminé
            If lCursor <= lFileLength Then
'                                          décalage des données de la fin jusqu'au point d'insertion
                lPosEnd = lPosStart + UBound(baData) + LBound(baData) + 1
                Do While Not lPosStart = lCursor
                    lBufferLength = iPacketSize
                    If lPosStart - lBufferLength < lCursor Then lBufferLength = lPosStart - lCursor
                    lPosStart = lPosStart - lBufferLength
                    lPosEnd = lPosEnd - lBufferLength
                    ReDim baBuffer(0 To lBufferLength - 1)
                    Seek #iNumFile, lPosStart
                    Get #iNumFile, , baBuffer
                    Seek #iNumFile, lPosEnd
                    Put #iNumFile, , baBuffer
                Loop
'                                          décalage OK, on peut insérer
                Seek #iNumFile, lCursor
                Put #iNumFile, , baData
                Erase baBuffer
            End If
        End If
        Close #iNumFile
        InsertBytes = True
    End If
End Function
Private Function InsertString(ByVal sFileName As StringByRef sData As StringByVal lCursor As LongAs Boolean
    If LenB(sData) > 0 Then InsertString = InsertBytes(sFileName, StrConv(sData, vbFromUnicode), lCursor)
End Function
Remarque :
cette méthode présente l'avantage de ne pas passer par un fichier tampon, impliquant un gain de performance
on peut ainsi insérer des données tant en fin de fichier (append), qu'en début qu'à toute autre position définie ; pour des données string ou tableau de byte

Snippets en rapport avec : Tableau, Fichier, Chaine, Données, Tampon



Codes sources en rapport avec : Tableau, Fichier, Chaine, Données, Tampon

{Visual Basic, VB6, VB.NET, VB 2005} CALCUL TABLEAU SOURCE DES DATA DANS UN FICHIER TEXTE
Le code permet d'expliquer d'ouvrir un fichier de data et manipuler les données : - notion double...

{C / C++ / C++.NET} GESTION DES NOTES D'UNE CLASSE
Cette application permet de gerer les notes d'une classe. On a utilisé la bibliotheque ncurses pour...

{PHP} RENVOI UN DOSSIER DE NOM UNIQUE ET ALÉATOIRE
Petite fonction permettant de renvoyer un dossier disponible de nom aléatoire dans le chemin précisé...

{Visual Basic, VB6, VB.NET, VB 2005} CRÉATION D'UN FICHIER À PARTIR DE PLUSIEURS FICHIER (POUR ÉVITER LES COPIER-COLLER)
le code colle plusieur fichier dans un seul en conservant les petits...

{Python} RECHERCHE DE CHAINES DANS UN REPERTOIRE AVEC IGU
Ce script est destiné à la recherche de fichiers qui contiennent une chaîne de caractère dans un ens...

{Python} RECHERCHE D'UNE CHAINE DANS DES FICHIERS
Ce script est destiné à la recherche de fichiers qui contiennent une chaîne de caractère dans un ens...

{Visual Basic, VB6, VB.NET, VB 2005} COMPRESSION
Fonction pour comprimer un tableau de byte...

{Visual Basic, VB6, VB.NET, VB 2005} REMPLACE UNE CHAINE DE CARACTÈRES PAR UNE AUTRE POUR TOUS LES FICHIERS SÉLECTIONNÉS (VBSCRIPT)
En fait, j'avais besoin d'automatiser le traitement des scripts du répertoire Sysvol. Rien de plus ...

{Visual Basic, VB6, VB.NET, VB 2005} RECHERCHE DE CHAÎNES DANS UN FICHIER TEXTE
Programme permettant de rechercher un chaine de longueur quelconque ( 1 à ... ) dans un fichier text...

{Delphi} CREER UN TYPE DE FICHIER ET LA GESTION QUI EN DECOULLE.
Rebonjour a tous! seconde source d'ajourd'hui pour repondre a un probleme posé sur le forum. Voic...