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 : 6912
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

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

{Visual Basic, VB6, VB.NET, VB 2005} BART VOTRE BUREAU DANS UNE BARRE
Regroupez 20 icones dans une barre de travail afin de liberer un peu votre bureau. Cette barre se lo...

{JAVA / J2EE} BANANA SPLIT
Un outil qui permet de couper de gros fichiers et de les recoller ensuite. utile pour deplacer un gr...

{Visual Basic, VB6, VB.NET, VB 2005} MULTI THREAD AVEC AFFICHAGE
J'ai développé cette source afin de faire du multi-thread et d'afficher des données à partir de chac...

{JAVA / J2EE} NOMBRE D'OCCURENCE D'UNE CHAINE DE CARACTÈRE DANS TOUS LES FICHIERS AVEC LES ENTÊTES SPÉCIFIÉS CONTENU DANS UN DOSSIER
Le titre est assez explicite. Il s'agit d'un petit bout de code renvoyant le nombre de fois qu'une c...

{Python} LE MOT LE PLUS LONG PAR DICO
mon premier programme python un peu élaboré, Il ouvre un dico de mots, demande à l'utilisateur la su...

{C# / C#.NET} PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD
Cette classe permet d'ouvrir un document word, d'écrire des données à la suite d'un signet, de le fu...

{C / C++ / C++.NET} COMPRESSION FICHIERS ALGORITHME HUFFMAN C
Voila , le code essaye de compresser les donnees selon l'algorithme de huffman en essayant de constr...

{PHP} GESTIONNAIRE DE FICHIERS | MYSQL PHP 5.X {NEMENTON PHP MANAGER V0.5}
Voici pour ma première contribution un gestionnaire de fichiers et de base de données sous MySQL en ...

{C# / C#.NET} INFILESEEKER
L’outil de recherche de Windows XP offre une option de recherche d’un texte dans le cont...