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)
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 ...
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
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 !
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à.
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
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.
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
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
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.
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