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 : 7494
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...

{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...

{PHP} LISTAGE DE FICHIERS
Ce code source permet de lister les fichiers et dossier d'un répertoire sur un serveur. Uploader de...

{Visual Basic, VB6, VB.NET, VB 2005} [VBS] PROTECTION DE VOS DONNÉES PERSONNELLES PAR LES FICHIERS SYSTÈMES DESKTOP.INI
C'est un Ancien script que j'ai réalisé il y a longtemps dans le but de protéger mes fichiers et mes...

{Delphi} LECTEUR DE FICHIER MULTIMÉDIA RIFF
Le format RIFF (Resource Interchange File Format) est très utilisé dans le monde multimédia. Sa simp...

{JAVA / J2EE} KIT DE FICHIERS DE PROGRAMMATION
C'est un ensemble de fichiers qui peuvent être facilement ajouté à vos projets. Ils sont déversifié...

{JAVA / J2EE} SUPPRIMER LES # DES COPIER-COLLER DE CS
Avez vous déjà remarqué que quand on fait un copier coller d'une classe qu'on visionne sur ce site, ...

{C / C++ / C++.NET} TEMPLATES C/C++ POUR VS 2010
Je reprends le principe des versions 2005 et 2008. http://www.cppfrance.com/code.aspx?ID=44835 Le ...

{PHP} CLASS UPLOAD DE FICHIER EN PHP
Ce petit script vous permet d'envoyer des fichiers dans votre serveur via un formulaire. Ce script e...