Utilisation collection List(Of String) [Résolu]

cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 28 mars 2015 à 14:34 - Dernière réponse : Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention
- 28 mars 2015 à 18:20
Bonjour le forum,

Toujours dans la translation d'un script vbs en .Net, je rencontre un problème sur les collections.

Le script ci-dessous ne me semble pas optimisé.

       ' Déclaration des variables
Dim MyList As New List(Of String)
Dim MyLine As New List(Of String)
Dim parts() As String
Dim test() As String

' Récupération des lignes du fichier et création de la collection
Try
MyList = System.IO.File.ReadAllLines(Form1.PathTeam & MyCustomer & Form1.PathPDP & Form1.FileProdJobVTOM, _
System.Text.Encoding.Default).ToList
For Each items As String In MyList
parts = items.Split(New Char() {Convert.ToChar(10)}, StringSplitOptions.RemoveEmptyEntries)
'Me.RichTextBox1.AppendText(Environment.NewLine & parts(0))
test = items.Split(New Char() {Convert.ToChar(59)}, StringSplitOptions.RemoveEmptyEntries)
For Each list As String In test
'Me.RichTextBox1.AppendText(Environment.NewLine & list.ToString)
' ICI il y aura insertion des élements dans un fichier Excel via OleDbDataAdapter
Next
Next
Catch ex As Exception
Me.RichTextBox1.AppendText(Environment.NewLine & _
"Erreur traitement du fichier vtom_plan_prod_app" & Environment.NewLine & ex.Message)
Exit Sub
End Try

MyList.RemoveAt(0)
MyList.Sort()
Me.RichTextBox1.AppendText(Environment.NewLine & MyList.Count & Environment.NewLine)
Me.RichTextBox1.AppendText(Environment.NewLine & MyList(0))
Me.RichTextBox1.SelectionStart = Me.RichTextBox1.Text.Length


Merci de vos suggestions,
jean-marc
Afficher la suite 

6 réponses

Répondre au sujet
Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 28 mars 2015 à 15:14
0
Utile
Bonjour,

Peux tu mettre un exemple du fichier pour nous éviter de le reconstituer?
Tu veux optimiser le nombre de lignes, le temps d'exécution, ou autre?


Commenter la réponse de Whismeril
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 28 mars 2015 à 15:22
0
Utile
Bonjour Whismeril,

Merci de ton intérêt !!!

Le fichier texte est un export de VTOM de type csv (;)
1ère ligne (à omettre) :
App Clef unique;Produit;Environnement;Application;Serveur;Heure Debut;Heure Fin;App Predecesseur;App Successeur;Ressource(s);Commentaire;Mode Execution;Heure;;;

2ème ligne :
BASCULE_EXPLOIT;VTOM;exploitation;BASCULE_EXPLOIT;localhost;14:00:00;23:59:59;;;;Bascule de la date

Dans le script, j'ai mis MyList.RemoveAt(0) pour ne pas prendre en compte la 1ère ligne du fichier texte (header).

jean-marc
Commenter la réponse de cs_JMO
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 28 mars 2015 à 15:49
0
Utile
Whismeril,

Pour répondre à tes questions:

Suis-je obligé de passer par 2 boucles pour pouvoir écrire le contenu du fichier texte dans mon fichier excel ???

VB.Net est apparemment plus rapide que mon script vbs !!!

Pour l'optimisation du script, je créé des fonctions pour éviter les répétitions.

jean-marc
Commenter la réponse de cs_JMO
Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - Modifié par Whismeril le 28/03/2015 à 18:20
0
Utile
Ok, déjà quelques "améliorations" (à mon sens)

Tout en haut de ta classe (avant public class...., tu mets
Imports System.IO

Ce qui te permettras d'utiliser tous les outils de cet espace de nom, sans l'écrire en entier à chaque fois.
MyList = System.IO.File.ReadAllLines(Form1.PathTeam & MyCustomer & Form1.PathPDP & Form1.FileProdJobVTOM, _
                                                  System.Text.Encoding.Default).ToList

devient
MyList = File.ReadAllLines(Form1.PathTeam & MyCustomer & Form1.PathPDP & Form1.FileProdJobVTOM, _
                                                  System.Text.Encoding.Default).ToList


Si tu veux "sauter" un n enregistrements en début de liste, plutôt que RemoveAt, utilise Skip.


Ensuite ton cas plus précisément.
VB.Net est un langage (tout) objet, la difficulté quand on passe de VB6 ou VBS à VB.Net c'est de changer de philosophie mais pas de "nom" ni "présentation générale".

C'est pourquoi je conseille toujours de passer à C# plutôt que VB.Net.

Donc tu devrais utiliser un objet métier, et chaque ligne de ton fichier est une instance de cet objet.

Tu écris une classe, chaque propriétés correspond à une colonne de ton csv.
Dans la méthode New (le constructeur), tu mets en paramètres la ligne entière.
C'est ici que tu pourras faire un split, garder au besoin le tableau dans un variable privée et répartir les données dans les différentes propriétés.

Par la suite si tu as besoin de l'heure de début du 50 eme enregistrement, se sera

maListe(49).HeureDebut
'ou
maLigne = maListe(49)
monHeure = maLigne.HeureDebut


Pour l'export vers excel il y a possibilité de faire une page xml, voir ce tuto https://msdn.microsoft.com/fr-FR/vstudio/Video/bb927708, la vidéo n'est plus regardable en ligne mais tu peux toujours la télécharger. Pour le coup en VB c'est mieux, je n'ai pas encore trouvé comment faire pareil en C#.

Je cherche aussi comment facilement écrire directement au format 2007 ou supérieur. Voir https://msdn.microsoft.com/fr-fr/library/office/hh180830(v=office.14).aspx

Modérer m'amène à intervenir dans de nombreux posts, mais les seuls langages que je connaisses sont le C# et un peu de VB. Pour vos codes pensez à la coloration.
Réponse trouvée ->Question Résolue
Commenter la réponse de Whismeril
cs_JMO 1838 Messages postés jeudi 23 mai 2002Date d'inscription 1 avril 2018 Dernière intervention - 28 mars 2015 à 17:57
0
Utile
1
Merci Whismeril pour le temps consacré à ses recherches ainsi que pour tes préconisations.

Je teste et reviendrai sur ce post pour le clôturer.

@+.
jean-marc
Whismeril 11406 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 avril 2018 Dernière intervention - 28 mars 2015 à 18:20
Ce sont des recherches que j'ai faites pour moi au départ ;-)
Commenter la réponse de cs_JMO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.