Copier fichier TXT / Aller Dernière Ligne / Trouver valeurs

Résolu
lipon67 Messages postés 8 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 mai 2005 - 2 mai 2005 à 09:38
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 - 4 mai 2005 à 14:59
Salut à tous, je suis actuellement en stage de fin d'étude en réseau informatique, et il me manque les connaissances en programmation pour cloturer une partie de mon projet. Je vous explique le topo, mon programme VB doit effectuer les étapes suivantes :

- Copier une liste de fichier dispo sur mon réseau vers un répertoire en local :

\\nomServeur1\logs\nomServeur1.tsv
\\nomServeur2\logs\nomServeur2.tsv
\\nomServeur3\logs\nomServeur3.tsv
\\nomServeur4\logs\nomServeur4.tsv
\\nomServeur5\logs\nomServeur5.tsv

à transferer vers d:\Analyse\nomServeur#.tsv

- Il faudra ensuite aller à la dernière ligne de ce fichier. Allure de la dernière ligne du fichier (selon l'OS du serveur) :

Sous NTsrv : date tab heure tab valeur1 tab valeur2 tab valeur3 tab valeur4 tab valeur5

Sous 2ksrv/2k3srv : "date heure "tab "valeur1" tab "valeur2" tab "valeur3" tab "valeur4" tab "valeur5"

tab = tabulation vu que le format TSV est en fait un fichier TXT avec l'option Tabulation Separated Values (d'où TSV).

On remarque aussi que sous NT4, Valeur1 est le 3ème membre de la ligne tandis que sous 2k/xp/2k3, on a d'une part des guillemets et d'autre part une date/heure qui ne font qu'un membre, ce qui ramène Valeur1 à la deuxieme place dans la ligne.

- affecter les variable :


Code:
,
----

ProPipo = Valeur1 'Charge processeur du serveur PIPO
MemPipo = Valeur2 'Mémoire Pages/sec du serveur PIPO
HddPipo = Valeur3 'Temps Disque du serveur PIPO
FrCPipo = Valeur4 'FreeSpace sur C: (serveur PIPO)
FrDPipo = Valeur5 'FreeSpace sur D: (serveur PIPO)

Je pense qu'on ne peut pas procéder avec une boucle pour la bonne et simple raison qu'il faut écrire les Valeur1...Valeur5 dans les variables ProPipo...FrDPipo avant de passer au fichier TSV suivant... dont les Valeur1...Valeur5 seront à inscrire dans d'autre variable vu que ces valeurs concernent un autre serveur...

Est-ce que le caractère Tabulation peut être considéré comme splitter ? (cf :
http://www.vbfrance.com/code.aspx?id=20794)

Vu que sous NTSRV on n'a pas de guillemets et que sous 2kSRV/2k3SRV on en a, il faudra trouver les 'Valeur' et supprimer ensuite le premier et dernier caractère de 'Valeur' de 'valeur' si c'est un guillemet avec la fonction chr$(34).

PS : J'ai 8 serveurs à analyser donc une boucle peut aider mais n'est pas nécessaire.

- Générer une page HTML (j'y arrive) contenant le tableau dont une ligne est à écrire comme ceci :


Code:
,
----

PIPO="----, PIPO</td> " + ProPipo + ", " + MemPipo + ", " + HddPipo + ", " + FrCPipo + ", " + FrDPipo + ", \"

Print EnTete as #1 'pour avoir le haut du tableau (je ne me souviens plus de la commande exacte)
Print PIPO as #1 'contenu d'une ligne
Print BasTableau as #1'cloture le tableau </TD>

Merci beaucoup pour votre aide

Lipon67

5 réponses

lipon67 Messages postés 8 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 mai 2005
4 mai 2005 à 13:41
Ca y est, j'ai trouvé la solution !

Grâce aux nombreux posts sur le forum, aux sources disponibles sur le site (notamment http://www.vbfrance.com/code.aspx?ID=20794), et à l'aide de ceux qui ont bien voulu m'aider (crenaud76) j'ai réussi à écrire le code qu'il me fallait... il est là :

'************************************************************************************
' Fonction Asplit qui me servira à éclater ma ligne pour chercher les infos qu'il me faut
'************************************************************************************
Private Function ASplit(ByVal sWhat As String, ByRef sSeparators() As Variant) As Variant
Dim N As Long, L As Long
Dim vSep As Variant
Dim aOut() As Variant

ReDim aOut(0)
L = 1

For N = 1 To Len(sWhat)
For Each vSep In sSeparators
If Mid(sWhat, N, Len(CStr(vSep))) = CStr(vSep) Then
aOut(UBound(aOut)) = Mid(sWhat, L, N - L)
ReDim Preserve aOut(UBound(aOut) + 1)
L = N + 1
End If
Next
Next N

aOut(UBound(aOut)) = Mid(sWhat, L)

ASplit = aOut
End Function
'************************************************************************************





Private Sub Form_Load()
Dim texte As String 'sert à stocker le fichier tsv
Dim derligne As String 'recopie ma string texte pour la traiter
'Dim i As Long 'nécessaire si utilisation de la boucle mise en commentaire plus bas
'Dim T() As String 'nécessaire si utilisation de la boucle mise en commentaire plus bas





Open "c:\local.tsv" For Input As #22 'ouverture du fichier local.tsv pour la lecture





Do While Not EOF(22) 'jusqu'à la fin de mon fichier





Line Input #22, texte 'recopie la ligne en cours de lecture dans texte





Loop 'effectue la boucle --> texte contient alors la dernière ligne du fichier





derligne = texte 'utilisation de derLigne pour le traitement sur ma string





'MsgBox derligne 'pour vérifier en mode pas à pas que derLigne contient bien ce qu'on souhaite





'************************************************************************************
'boucle permettant d'afficher un après l'autre les champs de derligne (non utilisé donc commentaire)
'T = Split(derligne, Chr(34) + vbTab + Chr(34)) ' Eclate la ligne (séparateur guillemet tabulation guillemet)
'For i = 0 To UBound(T) ' Parcours tous les éléments du tableau
' MsgBox T(i) ' Affiche la i ème valeur de T, donc de la ligne
'(Attention, i commence à zéro)
'Next
'n'est pas utilisé dans mon programme car cette boucle donne la dernière valeur mais ne permet pas telle qu'elle est de stocker T(i) dans une variable différente à chaque passage dans la boucle
'************************************************************************************





'***** Utilisation de la fonction Asplit définie au début du code *****
Dim asSeparators() As Variant
Dim asTerms() As Variant





asSeparators = Array(Chr(34)) 'notre séparateur est "
asTerms = ASplit(derligne, asSeparators) 'ici on sépare derligne selon "





' renvoie :
MsgBox "FrCLocal : " + asTerms(3) 'nous donne le 3 ème membre de derligne (FreeSpace C)
MsgBox "FrDLocal : " + asTerms(5) 'FreeSpaceD





'***** Fin d'utilisation de la fonction Asplit *****





Close #22 'fermeture du fichier local.tsv





End Sub

___________________________

Pour tester mon code, il suffit de lancer l'analyseur de performance et de créer un journal de compteur. Ajouter les compteurs qu'il vous faut. Dans le format d'enregitrement, il faut mettre TSV (données séparées par tabulations). Ensuite il faut remplacer "c:\local.tsv" par l'emplacement de votre fichier TSV...
___________________________

Merci encore à tous ceux qui m'ont aidé... également à quelques membres de www.developpez.com où j'avais mis le même post !

a+
3
lipon67 Messages postés 8 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 mai 2005
2 mai 2005 à 11:16
Copie des fichiers :

FileCopy "[file://\\Serveur1\PerfLogs\Serveur1.tsv \\Serveur1\PerfLogs\Serveur1.tsv]", "D:\Analyse\Serveur1.tsv"

Ouverture d'un fichier pour consultation

Open Serveur1.tsv For Input As #10

Déjà ça de fait... reste encore d'autres choses à faire !
0
lipon67 Messages postés 8 Date d'inscription samedi 15 mai 2004 Statut Membre Dernière intervention 2 mai 2005
2 mai 2005 à 11:30
Replace (maDerniereLigne, """, "")

me permet de virer les guillemets dans une chaine de caractère... donc il me supprime tous les guillemets dans ma derniere ligne, de ce fait, la date et l'heure ne font plus un mais deux éléments. En passant par cette opération, on a converti un TSV généré sous 2k/2k3 au même format qu'un TSV généré sous NT... et ça nous simplifie le reste du programme... mais c'est toujours trop compliqué pour moi.

Dès que je trouve une solution, je la balance sur mon topic, comme ça les gens qui veulent m'aider savent à quel niveau j'en suis.

D'avance merci
0
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
2 mai 2005 à 17:25
Il doit te manquer des notions sur la fonction Split(), qui te permet d'éclater une ligne selon un séparateur donné (la tabulation pour toi) dans un tableau .
Ex :
Dim T() as string ' Déclare un tableau de string
Dim i as Long

T = Split(LaLigneàEclater, vbTab) ' Eclate la ligne
For i = 0 to UBound(T) ' Parcours tous els item du tableau
Msgbox T(i) ' Affiche la i ème valeur de T, donc de la ligne
'(Attention, i commence à zéro)
Next

Voila de quoi avancé un peu plus ...

Christophe R
0

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

Posez votre question
crenaud76 Messages postés 4172 Date d'inscription mercredi 30 juillet 2003 Statut Membre Dernière intervention 9 juin 2006 28
4 mai 2005 à 14:59
Pense à mettre une "réponse Accepté", histoire que le post passe en vert, cela facilite les recherche pour de futurs visiteurs du forum qui aurait le même problème que toi à la base ...

Christophe R
0
Rejoignez-nous