Les Snippets

Connexion

Fusionner (merger) plusieurs fichiers en un seul

Niveau requis pour utiliser/comprendre cette source : 1 ( Débutant )
Créé le 18/09/2007 13:23:50 et initié par PCPT [Liste]
Vue : 10544
Catégorie(s) : Fichier / Disque, Chaîne de caractères
Langages dispo pour ce code :
- VB6, VBA
- VB 2005
- C# 2.x



Langage : VB6 , VBA
Date ajout : 18/09/2007
Posté par PCPT [Liste]
Function MergeFiles(bDestroy As BooleanByVal sDestFile As String, ParamArray aSrcFiles() As Variant) As Boolean
'   bDestroy permet de  choisir si on supprimer les fichiers sources
'    sDestFile sera le fichier final.
'       ** si il  est vide, le premier fichier du tableau sera le fichier de  réception
'   aSrcFiles() contient les chemins des  fichiers à merger.
'       ** le code accepte  d'avoir un tableau dans le premier fichier de  source
    MergeFiles = False
'   tableau vide?  bye
    If UBound(aSrcFiles) = -1 Then Exit Function
'   le  paramarray contient-il des chemins, ou un tableau de chemin en 1er  index?
    Dim aSrc() As String
    Dim As Integer
    i = VarType(aSrcFiles(0))
    
    If (i = vbArray + vbString) Or (i = vbArray + vbVariant)  Then ' tableau (8192) de  string (8) ou de variant (12)
'       tableau  dimentionné?
        i = -1
        On Error Resume Next
        i = UBound(aSrcFiles(0))
        On Error GoTo 0
        If i = -1 Then Exit Function
        
'       on construit le tableau de  destination
        ReDim aSrc(LBound(aSrcFiles(0)) To UBound(aSrcFiles(0)))
        For i = LBound(aSrcFiles(0)) To UBound(aSrcFiles(0))
            aSrc(i) = CStr(aSrcFiles(0)(i))
        Next i
    ElseIf (i = vbString) Or (i = vbVariant) Then 'string (8) ou variant (12)
        ReDim aSrc(LBound(aSrcFiles) To UBound(aSrcFiles))
        For i = LBound(aSrcFiles) To UBound(aSrcFiles)
            aSrc(i) = CStr(aSrcFiles(i))
        Next i
    Else 'autre type,  bye
        Exit Function
    End If

'   le tableau est  créé, un fichier de destination?
    If LenB(sDestFile) = Then sDestFile = aSrc(LBound(aSrc))
'   un seul fichier? source = destination? bye
    If (sDestFile = aSrc(LBound(aSrc))) And (LBound(aSrc) = UBound(aSrc)) Then Exit Function

'    création du buffer
    Dim sBuffer As String, FF As Integer, sFile As String
    sBuffer = vbNullString
    For i = LBound(aSrc) To UBound(aSrc)
        On Error Resume Next
            sFile = vbCrLf
            FF = FreeFile
            Open aSrc(i) For Input As #FF
                sFile = Input(LOF(FF), #FF)
            Close #FF
            If bDestroy Then Kill aSrc(i)
        On Error GoTo 0
        
        sBuffer = sBuffer & sFile
    Next i
'   enregistre le buffer
    FF = FreeFile
    Open sDestFile For Output As #FF
        Print #FF, sBuffer
    Close #FF
'   fin
    sBuffer = vbNullString
    sFile = vbNullString
    Erase aSrc
    MergeFiles = True
End Function
'
'
'    =====================
'   EXEMPLE  D'UTILISATION
'    =====================
'
'
Private Sub Exemple()
    Dim sFile1 As String
    Dim sFile2 As String
    Dim aFiles0() As String
    Dim aFiles1(To 1As String
    Dim aFiles2() As Variant
    
    sFile1 = "C:\Fichier1.txt"
    sFile2 = "C:\Fichier2.txt"
    aFiles1(0) = sFile1
    aFiles1(1) = sFile2
    aFiles2 = Array()

'   1  fichier
    Debug.Print MergeFiles(False"", sFile1)                   'FAUX
'   2 fichiers (paramarray  utilisé)
    Debug.Print MergeFiles(False"", sFile1, sFile2)           'VRAI
'   0 fichier (tableau  string pas initialisé, paramarray pas utilisé)
    Debug.Print MergeFiles(False"", aFiles0)                  'FAUX
    
'   2 fichiers  (tableau string, paramarray pas utilisé)
    Debug.Print MergeFiles(False"C:\Fichier3.txt", aFiles1)   'VRAI
'   0 fichier (tableau variant pas initialisé, paramarray pas  utilisé)
    Debug.Print MergeFiles(False"", aFiles2)                  'FAUX
    aFiles2 = Array(sFile1, sFile2)
'   2 fichiers (tableau variant, paramarray pas  utilisé)
    Debug.Print MergeFiles(False"", aFiles2)                  'VRAI
End Sub

Langage : VB 2005
Date ajout : 06/11/2008
Posté par jrivet [Liste]
'exemple d'utilisation 'en passant plusieurs fichier    MessageBox.Show (MergeFiles(False, "C:\Test.txt", True, "C:\Checkplus\Chkp.dat", "C:\Checkplus\Alarm.dat").ToString) 'en passant un répertoire    MessageBox.Show (MergeFiles(False, "C:\Test.txt", True, "C:\Checkplus\").ToString) Public Function MergeFiles(ByVal bDestroy As Boolean, ByVal sDestFile As String, ByVal ClearIfExists As Boolean, ByVal ParamArray aSrcFiles() As String) As Integer    Dim FNames As String()    Dim FReader As StreamReader    Dim NbrMerged As Integer = 0    'Tableau vide, on sort sans rien faire    If aSrcFiles.Length = 0 Then Return NbrMerged    'si on souhaite repartir d'un fichier vierge    If ClearIfExists And File.Exists(sDestFile) Then File.Delete (sDestFile)    'suivant le cas on remplis les nom de fichiers avec soit    If Directory.Exists(aSrcFiles(0)) Then        '1= les fichiers contenus dans le répertoire        FNames = Directory.GetFiles(aSrcFiles(0))    Else        '2= les fichiers passés en parametres        FNames = aSrcFiles    End If    For Each Fpath As String In FNames        'Si le fichier source existe        If File.Exists(Fpath) Then            'on le charge            FReader = File.OpenText(Fpath)            'on le place à la fin du fichier de destination            File.AppendAllText(sDestFile, FReader.ReadToEnd)            'On le supprime si nécessaire            If bDestroy Then File.Delete (Fpath)            'on incrément le nombre de fichiers traité            NbrMerged += 1        End If    Next    Return NbrMerged End Function
By Renfield
Remarque :
Petite variante .NET
Langage : C# 2.x
Date ajout : 07/11/2008
Posté par jrivet [Liste]
        /// <summary>
        /// Fusionne plusieur fichier en un seul
        /// NOTE:  pour plus de "confort" on ajoutera Using System.IO
        /// </summary>
        /// <param name="bDestroy">True = Supprimer les fichiers sources</param>
        /// <param name="sDestFile">Chemin du fichier de destination</param>
        /// <param name="clearIfExists">True = Fichier de destination existe alors il sera supprimer</param>
        /// <param name="aSrcFiles">Tableau de string contenant soit plusieur fichiers soit un SEUL nom de répertoire</param>
        /// <returns>Le nombre de fichier fusionnés</returns>
        public int MergeFiles(bool DestroySrc, string DestFile, bool ClearIfExists, string[] SrcFiles)
        {
            System.IO.StreamReader FReader;
            string[] FNames;
            int NbrMerged = 0;
            //Tableau de source vide on sort sans rien faire
            if (SrcFiles.Length == 0)
            {
                return NbrMerged;
            }
            //Si on souhaite repartire d'un fichier vierge
            if ((ClearIfExists && System.IO.File.Exists(DestFile)))
            {
                System.IO.File.Delete(DestFile);
            }
            // suivant le cas on remplis les nom de fichiers avec soit
            if (System.IO.Directory.Exists(SrcFiles[0]))
            {
                //1 - les fichiers contenus dans le répertoire
                FNames = System.IO.Directory.GetFiles(SrcFiles[0]);
            }
            else
            {
                //2 - les fichiers passés en paramètre
                FNames = SrcFiles;
            }
            foreach (string FPath in FNames)
            {
                //Si le fichier existe
                if (System.IO.File.Exists(FPath))
                {
                    //On le charge
                    FReader = new System.IO.StreamReader(FPath, System.Text.Encoding.GetEncoding("iso-8859-1"));
                    //On l'ajoute à la fin du fichier de destiantion
                    System.IO.File.AppendAllText(DestFile, FReader.ReadToEnd());
                    //On supprime le fichie rajouté si nécessaire
                    if (DestroySrc)
                    {
                        System.IO.File.Delete(FPath);
                    }
                    //On incrémente le nombre de fichiers fusionné.
                    NbrMerged++;
                    FReader.Close();
                    FReader.Dispose();
                }
            }
            return NbrMerged;
        }
                    //Exemple d'utilisation
            //1 - en passant plusieurs fichier
            MessageBox.Show(MergeFiles(false, @"C:\TestC.txt", true, new string[] { @"C:\Test\1.dat", @"C:\Test\2.dat" }).ToString());
            //2 - en passant un répertoire
            MessageBox.Show(MergeFiles(false, @"C:\TestC.txt", true, new string[] { @"C:\Test\" }).ToString());
Remarque :
Version C# du même snippet.

Snippets en rapport avec : Fichiers, Fusionner, Merger, Plusieurs



Codes sources en rapport avec : Fichiers, Fusionner, Merger, Plusieurs

{Visual Basic, VB6, VB.NET, VB 2005} FUSIONNER LES DONNÉES DES FEUILLES DE PLUSIEURS CLASSEURS EXCEL EN UN SEUL CLASSEUR
Ce code regroupe les données des feuilles de plusieurs classeurs Excel enregistrés dans le même doss...

{JAVA / J2EE} RENAME-MOAR
Programme permettant de renommer plusieurs fichiers d'un répertoire sélectionné. On peut : - Ch...

{Delphi} EXEMPLES DE THREADS
L'objectif final est de suivre la progression en temps réel de traitements longs. Cet objectif n'est...

{Visual Basic, VB6, VB.NET, VB 2005} CALCULER LA TAILLE D'UN DOSSIER ET SER SOU_RÉPÉRTOIRES VERSION 2
Viola pour calculer la taille d'un répértoire j'ai envoyé un code ("CALCULER LA TAILLE D'UN DOSSIER ...

{Visual Basic, VB6, VB.NET, VB 2005} ECLATER UN CLASSEUR EXCEL EN AUTANT DE FICHIERS QUE DE FEUILLES
Cette procédure éclate le classeur actif en plusieurs fichiers (ou classeurs selon la terminologie e...

{Visual Basic, VB6, VB.NET, VB 2005} CALCULER LA TAILLE D'UN DOSSIER ET SER SOU_RÉPÉRTOIRES
Viola pour calculer la taille d'un répértoire j'ai utilisé cette sub: Calculer_LaTaille_du_répértoi...

{Visual Basic, VB6, VB.NET, VB 2005} MAGIC FILE NAME : RENOMMEZ VOS FICHIERS AUTOMAGIQUEMENT !
Magic File Name est un petit outil pour renommer tous vos fichiers selon les critères choisis. Comme...

{Visual Basic, VB6, VB.NET, VB 2005} EXTRAIRE UNE IMAGE CODÉE EN B64 D'UNE PAGE.HTM
Bonjour Ce Classeur est une approche de la façon d' EXTRAIRE des ELEMENTS (texte, Image...) d'une P...

{Visual Basic, VB6, VB.NET, VB 2005} RECHERCHE & SAUVEGARDE DES FICHIERS PAR LEURS EXTENSIONS
C est un Vbscript pour rechercher des fichiers par leurs extensions et de les organiser en les copia...

{Visual Basic, VB6, VB.NET, VB 2005} FILE2COMPARE: COMPARAISON DE DEUX FICHIERS LIGNE PAR LIGNE
C'est un programme écrit en Vbscript avec une interface en HTA pour simplifier à l'utilisteur final ...