Concaténer des fichier texte

Signaler
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008
-
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008
-
Salut,

J'ai plusieurs fichier texte et j'aurai voulu trouvu une méthode pour les concaténer dans un seul fichier, est-ce que quelqu'un aurait une piste?

15 réponses

Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
52
Salut,
Il te suffit de récupérer le contenu de tout les fichiers dans des tableaux et de faire un Tableau contenant ensuite TOUT les autre contenus.
Puis tu écrit dans un nouveau fichier et efface les anciens (ou non d'ailleurs)

@+: Ju£i?n
Pensez: Réponse acceptée
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
Dim text as string = ""
text &= IO.File.ReadAllText(fichier) ' fait ça pour tous les fichiers textes

IO.File.WriteAllText(fichier) ' on ecrit tout ...

bien sûr mon code n'est que pour les fichiers assez petit (on diras moins de 10 Mo ...) après faut des stringbuilders, voir des fichiers temp, ou alors tout simplement ecrire par parties ...
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
Je m'explique pour "tout simplement ecrire par parties" :

Using sr as new io.StreamReader(fichier1)
   Using sw as new IO.StreamWriter(nouveaufichier, true)
      Do until sr.endofstream
        sw.writeline(sr.readline)
      Loop
   End Using
End Using
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
salut,

tiens, ptit cadeau en VB6 :
http://www.codyx.org/snippet_fusionner-merger-plusieurs-fichiers-seul_454.aspx

je te laisse chercher sur Codyx pour adapter en VBS

++
PCPT  [AFCK]
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
ah ouais dsl : mes codes sont en VB.Net 2 ...
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonsoir à tous,

En simple vbs, le script pourrait se résumer à:

Option Explicit
Dim objFso, arrTmp(), strPath, strFileResult
ReDim arrTmp(0)
strPath = "D:\SCRIPTS\Fichiers" 'répertoire à analyser
strFileResult = "D:\SCRIPTS\resultat.txt"

Set objFso = CreateObject("Scripting.FileSystemObject")
Call FnSelectFiles(strPath, arrTmp)
Call FnWriteResult(arrTmp)

Set objFso = Nothing
MsgBox "script terminé"
'--------------------------------------------------
Function FnSelectFiles(strPath, arrTmp)
Dim objTextStream, strFile
For Each strFile in objFso.GetFolder(strPath).Files
    'selection extension txt
    If LCase(objFso.GetExtensionName(strFile.Name)) = "txt" Then
       Set objTextStream = objFso.OpenTextFile(strFile.Path, 1)
       Do While Not objTextStream.AtEndOfStream
          ReDim Preserve arrTmp(UBound(arrTmp) + 1)
          arrTmp(UBound(arrTmp)) = strFile.Name &vbTab& objTextStream.ReadLine
          'arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
       Loop
       objTextStream.Close
    End If
Next
Set objTextStream = Nothing
FnSelectFiles = arrTmp
End Function
'--------------------------------------------------
Function FnWriteResult(strTmp)
Dim objTextResult, i
Set objTextResult = objFso.OpenTextFile(strFileResult, 2, True)
For i = 1 to Ubound(strTmp)
    objTextResult.Write strTmp(i) &vbcrlf
Next
objTextResult.Close
Set objTextResult = Nothing
End Function
'--------------------------------------------------
Bonsoir PCPT,
Tu m'as enseigné, entre autres, le Preserve , donc je l'utilise !

@+.
jean-marc
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008

Salut,

tous d'abord merci pour vos réponse.
J'aurai d'autre petite question.
Tout d'abord j'ai testé le script à jean-marc et j'obtiens le résultat suivant :


Nasbe .txt Nasbe
Nasbe .txt 192.168.1.2 , 1
Marc.txt Marc
Marc.txt 192.168.1.3 , 1

Alors que mes fichiers scripts rendent les résultats suivant

Nasbe
192.168.1.2 , 1
Marc
192.168.1.3 , 1

1) Comment faire pour supprimer le Nasbe.txt?

2) Une autre question concernait mes fichiers scripts nasbe.txt et marc.txt.
Comment faire pour les exécuter au démarrage?

3) Ma troisième question était de pouvoir les supprimers lors d'un logout.
A quelle niveau dois-je le faire. En fait pour être plus clair, lorsque qu'un utilisateur se connecte, j'aimerai que son script soit exécuter (le script récupère l'adresse ip et le nom d'utilisateur et le place dans un dossier partagé) puis lorsque qu'il se délogue, j'aimerai pouvoir supprimer son fichier texte de ce dossier partager. Voilà ma question.

4) La dernière était de pouvoir exécuter le fichier de concaténation toute les 5sec a peu près. Comme cela j'aurai dans ce fichier tous les utilisateurs et les adresses ip des utilisateurs connecté. Quelqu'un aurait-il une piste a ce niveau là.

D'avance merci de pouvoir m'aider.
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonjour [auteurdetail.aspx?ID=693278 bernhardjo]
,

Hum , hum,
Point 1) il faut remplacer:
          arrTmp(UBound(arrTmp)) = strFile.Name &vbTab& objTextStream.ReadLine
          'arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
par
         arrTmp(UBound(arrTmp)) = objTextStream.ReadLine

' correspond au Rem

Point 2) je ne comprends pas la question. Exécuter un .txt au démarrage ?

jean-marc
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008

Je parlais de mon script qui génère un fichier texte. Comment faire pour le lancer au démarrage.
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
39
pas de miracle avec VBS...
il faut passer par une autre "appli"

en l'occurence, pourquoi pas le planificateur de tâches, éventuellement
ou mettre le raccourci (action qui peut être générée) dans le menu/StartUp

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008

Merci bien pour ton aide.

Et comment faire maintenant pour supprimer le résultat du script (fichier .txt) qui se trouve dans un dossier partagé lorsque l'utilisateur se déconnecte ?

Et dernière petite question, comment fait pour qu'un script s'execute automatiquement toute les 5-10 secondes approximativemnt

++
Messages postés
551
Date d'inscription
samedi 8 janvier 2005
Statut
Membre
Dernière intervention
12 avril 2008
1
pour l'executer toutes les 5 secondes, fait une boucle infinie ...

pour le lancer à chaque démarrage, ajoute tout simplement une clé au registre windows (sous vista c'est un peu différent mais le principe est là)
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008

ok et comment faire sur ce script, car je j'aimerai qu'il concatène les données de fichier différent mais pas ceux qui porte le même nom. Or ici il concatene à chaque fois.

Option Explicit
Dim objFso, arrTmp(), strPath, strFileResult
ReDim arrTmp(0)
strPath = "[file://\\PC-DE-NASBE\Users\ \\PC-DE-NASBE\Users\ ]" 'répertoire à analyser
strFileResult = "[file://\\PC-DE-NASBE\Users\resultat.txt \\PC-DE-NASBE\Users\resultat.txt]"



Set objFso = CreateObject("Scripting.FileSystemObject")
Call FnSelectFiles(strPath, arrTmp)
Call FnWriteResult(arrTmp)



Set objFso = Nothing
MsgBox "script terminé"
'--------------------------------------------------
Function FnSelectFiles(strPath, arrTmp)
Dim objTextStream, strFile
For Each strFile in objFso.GetFolder(strPath).Files
    'selection extension txt
    If LCase(objFso.GetExtensionName(strFile.Name)) = "txt" Then
       Set objTextStream = objFso.OpenTextFile(strFile.Path, 1)
       Do While Not objTextStream.AtEndOfStream
          ReDim Preserve arrTmp(UBound(arrTmp) + 1)
          arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
 
          'arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
       Loop
       objTextStream.Close
    End If
Next
Set objTextStream = Nothing
FnSelectFiles = arrTmp
End Function
'--------------------------------------------------
Function FnWriteResult(strTmp)
Dim objTextResult, i
Set objTextResult = objFso.OpenTextFile(strFileResult, 2, True)
For i = 1 to Ubound(strTmp)
    objTextResult.Write strTmp(i) &vbcrlf
Next
objTextResult.Close
Set objTextResult = Nothing
End Function
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
26
 Bonsoir,

   If  LCase(objFso.GetExtensionName(strFile.Name)) = "txt" Then
       Set objTextStream = objFso.OpenTextFile(strFile.Path, 1)
       Do While Not objTextStream.AtEndOfStream
          ReDim Preserve arrTmp(UBound(arrTmp) + 1)
          arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
 
          'arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
       Loop
       objTextStream.Close
'ici ton fichier "strFile.Path" est traité, tu peux, donc,  faire un "objFso.MoveFile source, destination"
'ou un "objFso.DeleFile source"
    End If

jean-marc
Messages postés
31
Date d'inscription
lundi 13 février 2006
Statut
Membre
Dernière intervention
11 juin 2008

Salut,

J'ai pas trouvé l'astuce, en fait j'aimerai, a chaque fois que je lance mon script, que j'écrase (je remplace) le fichier.txt en place par le nouveau fichier. Comme ca, à chaque fois que je lance mon script, il concatène les fichiers dans le répertoire. Dans la situation dans laquelle je suis actuellement, je lance mon script, il concatène, ok mais si je le relance encore une fois, il va continuer a concaténer, ca fait des doublons dans mon fichier resultat.




strFileResult = "

[file://pc-de-nasbe/Users/resultat.txt
\\PC-DE-NASBE\Users\resultat.txt
]

"





J'espère que j'aurai été assez clair. Je te remercie déjà de tout ce que t'as pu m'aider. Bonne journée.



For Each strFile in objFso.GetFolder(strPath).Files
    'selection extension txt
    If LCase(objFso.GetExtensionName(strFile.Name)) = "txt" Then
       Set objTextStream = objFso.OpenTextFile(strFile.Path, 1)
       Do While Not objTextStream.AtEndOfStream
          ReDim Preserve arrTmp(UBound(arrTmp) + 1)
          arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
 
          'arrTmp(UBound(arrTmp)) = objTextStream.ReadLine
       Loop
       objTextStream.Close
    objFso.MoveFile strFileResult, strFileResult
  
  'ici ton fichier "strFile.Path" est traité, tu peux, donc,  faire un "objFso.MoveFile source, destination"
  'ou un "objFso.DeleFile source"



    End If
Next