Concaténer des fichier texte

bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008 - 18 sept. 2007 à 10:55
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008 - 20 sept. 2007 à 11:17
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

jrivet Messages postés 7392 Date d'inscription mercredi 23 avril 2003 Statut Membre Dernière intervention 6 avril 2012 60
18 sept. 2007 à 11:14
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
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
18 sept. 2007 à 11:44
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 ...
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
18 sept. 2007 à 11:45
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
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
18 sept. 2007 à 13:26
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
18 sept. 2007 à 13:31
ah ouais dsl : mes codes sont en VB.Net 2 ...
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
18 sept. 2007 à 18:30
 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
0
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008
19 sept. 2007 à 08:48
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.
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
19 sept. 2007 à 11:55
 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
0
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008
19 sept. 2007 à 12:14
Je parlais de mon script qui génère un fichier texte. Comment faire pour le lancer au démarrage.
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
19 sept. 2007 à 12:36
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
0
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008
19 sept. 2007 à 13:36
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

++
0
allthew3 Messages postés 551 Date d'inscription samedi 8 janvier 2005 Statut Membre Dernière intervention 12 avril 2008 2
19 sept. 2007 à 19:07
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à)
0
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008
19 sept. 2007 à 19:31
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
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
19 sept. 2007 à 21:08
 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
0
bernhardjo Messages postés 31 Date d'inscription lundi 13 février 2006 Statut Membre Dernière intervention 11 juin 2008
20 sept. 2007 à 11:17
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
0
Rejoignez-nous