Utilisation collection List(Of String)

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 28 mars 2015 à 14:34
Whismeril Messages postés 19087 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juillet 2024 - 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
A voir également:

5 réponses

Whismeril Messages postés 19087 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juillet 2024 658
28 mars 2015 à 15:14
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?


cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 mars 2015 à 15:22
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
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 mars 2015 à 15:49
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
Whismeril Messages postés 19087 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juillet 2024 658
Modifié par Whismeril le 28/03/2015 à 18:20
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

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

Posez votre question
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
28 mars 2015 à 17:57
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 Messages postés 19087 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 12 juillet 2024 658
28 mars 2015 à 18:20
Ce sont des recherches que j'ai faites pour moi au départ ;-)
0
Rejoignez-nous