Meilleur auteur de réponses
créer un tableau de string à partir d'une extraction de donnée

Question
-
Bonjour, je voudrais créer un tableau de string à partir d’une base de texte. Ma base de texte est la suivante :
Crash (2004/I) 2004
The Shawshank Redemption (1994) 1994
Iron Man (2008) 2008
Avatar (2009) 2009
The Lord of the Rings: The Two Towers (2002) 2002
The Green Mile (1999) 1999
V for Vendetta (2006) 2006
J’ai fais un systeme IO et un split pour pouvoir récupérer juste les titres des films avec ce code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Do Until lesfilms.Peek = -1
Dim ofilm As String = lesfilms.ReadLine
Dim a As String = ofilm.Split("(")(0)
ListBox1.Items.Add(a)
Loop
lesfilms.Close()
End Sub
Je voudrais savoir s’il existe un algorithme pour pouvoir créer un tableau de film à partir de ça.
Réponses
-
Pascal,
Oui c'est complément possible par exemple comme vous avez fait ...
Imports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListFilms As New ArrayList Using oFilms As New StreamReader("C:\films.txt") Do Until oFilms.Peek = -1 Dim ofilm As String = oFilms.ReadLine Dim a As String = ofilm.Split("(")(0) ListFilms.Add(a) Loop End Using ' ' Lecture de la collection ' For Each oLectfilm As String In ListFilms Console.WriteLine(oLectfilm) Next End Sub End Class
- RESULTAT
Crash
The Shawshank Redemption
Iron Man
Avatar
The Lord of the Rings: The Two Towers
The Green Mile
V for Vendetta
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Proposé comme réponse TroxsaEditor vendredi 23 décembre 2011 09:37
- Marqué comme réponse Ciprian Duduiala mercredi 28 décembre 2011 13:52
-
Bonjour,
Le constat qui me sort de ce que vous présentez est que vous suivez la bonne démarche pour résoudre votre problème. Seulement je vous suggères les choses suivantes :
- Si vous avez la main sur le fichier, le mieux est de séparer vos champs par un séparateur standard (tabulation ou point-virgule).
- Utiliser une liste de filmes plutôt qu'un tableau de string.
- Dans votre Structure film, utiliser des propriétés plutôt que des champs public.
- Séparer toutes les opérations sur les filmes (Chargement, Modification, Sauvegarde) dans une classe manger à part.
Voici une autre présentation de votre structure film :
Public Structure Film Public Property Titrefilm As String Public Property Acteur As String Public Property Resum As String Public Property Actrice As String Public Property Annee As Integer End Structure
Voici une classe qui vous permettra de gérer vos filme, il lui suffira juste de passer le chemin de votre fichier et lui renseigner le séparateur de vos champs dans le fichiers. Cette classe pourra vous servir comme base d'implémentation, elle est bien sur à compléter :Public Class FilmsManager Private _settings As FilmsFileSettings Private _films As List(Of Film) Public ReadOnly Property Films As IList(Of Film) Get If Me._films Is Nothing Then Me.Load() End If Return Me._films End Get End Property Public Sub New(settings As FilmsFileSettings) Me._settings = settings End Sub Public Sub Load() Me._films = New List(Of Film) Dim filmsLines As String() = System.IO.File.ReadAllLines(Me._settings.Path) For Each line In filmsLines Dim fields = line.Split(Me._settings.FieldsSeparator) Dim film As Film = New Film With film .Titrefilm = fields(0) 'Remplire les autres champs selon leurs ordres dans le fichier End With Me._films.Add(film) Next End Sub Public Sub Save() 'Convertir les filmes en lignes respectant le format est les sauvegarder dans le fichier End Sub End Class Public Structure FilmsFileSettings Public Property Path As String Public Property FieldsSeparator As String End Structure
Pour récupérer ou manger généralement vos filmes il vous suffit de faire les instructions suivantes :Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim settings As FilmsFileSettings = New FilmsFileSettings() With settings .Path = "C:\films.txt" 'Le chemin de votre fichier .FieldsSeparator = ";" 'Le séparateur de vos champs End With Dim filmsManager As FilmsManager = New FilmsManager(settings) Dim filmes = filmsManager.Films End Sub
On sera là pour vous aider pour compléter vos classes.
Bien cordialement.
- Marqué comme réponse Ciprian Duduiala mercredi 28 décembre 2011 13:52
Toutes les réponses
-
Bonjour,
Vous voulez savoir comment faire un tableau avec votre liste ?
il vous faut System.Collections il ne vous reste qu'a choisir votre mode de fonctionnement, je voterais pour ArrayList pour ne pas trop changer le code que vous avez fait
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
-
-
Pascal,
Oui c'est complément possible par exemple comme vous avez fait ...
Imports System.IO Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim ListFilms As New ArrayList Using oFilms As New StreamReader("C:\films.txt") Do Until oFilms.Peek = -1 Dim ofilm As String = oFilms.ReadLine Dim a As String = ofilm.Split("(")(0) ListFilms.Add(a) Loop End Using ' ' Lecture de la collection ' For Each oLectfilm As String In ListFilms Console.WriteLine(oLectfilm) Next End Sub End Class
- RESULTAT
Crash
The Shawshank Redemption
Iron Man
Avatar
The Lord of the Rings: The Two Towers
The Green Mile
V for Vendetta
Cordialement,
Xavier TALOUR
Alias Troxsa SendMail
- Proposé comme réponse TroxsaEditor vendredi 23 décembre 2011 09:37
- Marqué comme réponse Ciprian Duduiala mercredi 28 décembre 2011 13:52
-
Bonjour,
La difficulté est qu'on a l'impression que vous présentez une solution plutôt qu'une question !!!
Sinon pouvez vous expliquer votre problème indépendement de vote implémentation.
C'est quoi un filme pour vous ?
Que représente les 3 champs de la ligne filme : Titre, Année est c'est quoi le champs qui est entre parenthèse ?
Cordialement.
-
en fait je dois réaliser un projet. J'ai des fichiers textes d'acteurs, d'actrices, de films et de resumés de ces films.
Mon idée et de faire une structure film:
public structure film
dim titrefilm as string
dim acteur as string
dim resume as string
dim actrice as string
dim année as integer
end structure
et ensuite créer mon tableau de film dim basefilm() as film en remplissant le film.titre par le split que j'ai fais au dessus.
mais dans un premier temps j'essaie de récupérer simplement les titres des films dans un tableau sans passer par une structure, je verrai ensuite pour la structure
-
Bonjour,
Le constat qui me sort de ce que vous présentez est que vous suivez la bonne démarche pour résoudre votre problème. Seulement je vous suggères les choses suivantes :
- Si vous avez la main sur le fichier, le mieux est de séparer vos champs par un séparateur standard (tabulation ou point-virgule).
- Utiliser une liste de filmes plutôt qu'un tableau de string.
- Dans votre Structure film, utiliser des propriétés plutôt que des champs public.
- Séparer toutes les opérations sur les filmes (Chargement, Modification, Sauvegarde) dans une classe manger à part.
Voici une autre présentation de votre structure film :
Public Structure Film Public Property Titrefilm As String Public Property Acteur As String Public Property Resum As String Public Property Actrice As String Public Property Annee As Integer End Structure
Voici une classe qui vous permettra de gérer vos filme, il lui suffira juste de passer le chemin de votre fichier et lui renseigner le séparateur de vos champs dans le fichiers. Cette classe pourra vous servir comme base d'implémentation, elle est bien sur à compléter :Public Class FilmsManager Private _settings As FilmsFileSettings Private _films As List(Of Film) Public ReadOnly Property Films As IList(Of Film) Get If Me._films Is Nothing Then Me.Load() End If Return Me._films End Get End Property Public Sub New(settings As FilmsFileSettings) Me._settings = settings End Sub Public Sub Load() Me._films = New List(Of Film) Dim filmsLines As String() = System.IO.File.ReadAllLines(Me._settings.Path) For Each line In filmsLines Dim fields = line.Split(Me._settings.FieldsSeparator) Dim film As Film = New Film With film .Titrefilm = fields(0) 'Remplire les autres champs selon leurs ordres dans le fichier End With Me._films.Add(film) Next End Sub Public Sub Save() 'Convertir les filmes en lignes respectant le format est les sauvegarder dans le fichier End Sub End Class Public Structure FilmsFileSettings Public Property Path As String Public Property FieldsSeparator As String End Structure
Pour récupérer ou manger généralement vos filmes il vous suffit de faire les instructions suivantes :Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim settings As FilmsFileSettings = New FilmsFileSettings() With settings .Path = "C:\films.txt" 'Le chemin de votre fichier .FieldsSeparator = ";" 'Le séparateur de vos champs End With Dim filmsManager As FilmsManager = New FilmsManager(settings) Dim filmes = filmsManager.Films End Sub
On sera là pour vous aider pour compléter vos classes.
Bien cordialement.
- Marqué comme réponse Ciprian Duduiala mercredi 28 décembre 2011 13:52
-
Merci! mais avant de pouvoir utiliser ce code, je voudrais pouvoir faire un truc assez simple.
Voilà donc mon fichier film en texte:
et mon fichier texte de resume:
Crash (2004/I)
Several stories interweave during two days in Los Angeles involving a collection of inter-related characters, a police detective with a drugged out mother and a thieving younger brother, two car thieves who are constantly theorizing on society and race, the white district attorney and his irritated and pampered wife, a racist white veteran cop (caring for a sick father at home) who disgusts his more idealistic younger partner, a successful Hollywood director and his wife who must deal with the racist cop, a Persian-immigrant father who buys a gun to protect his shop, a Hispanic locksmith and his young daughter who is afraid of bullets, and more.
----------------------The Shawshank Redemption (1994)
Andy Dufresne is a young and successful banker whose life changes drastically when he is convicted and sentenced to life imprisonment for the murder of his wife and her lover. Set in the 1940's, the film shows how Andy, with the help of his friend Red, the prison entrepreneur, turns out to be a most unconventional prisoner.
After the murder of his wife, hotshot banker Andrew Dufresne is sent to Shawshank Prison, where the usual unpleasantness occurs. Over the years, he retains hope and eventually gains the respect of his fellow inmates, especially longtime convict "Red" Redding, a black marketeer, and becomes influential within the prison. Eventually, Andrew achieves his ends on his own terms.
----------------------
Iron Man (2008)
Tony Stark is the complete playboy who also happens to be an engineering genius. While in Afghanistan demonstrating a new missile, he's captured and wounded. His captors want him to assemble a missile for them but instead he creates an armored suit and a means to prevent his death from the shrapnel left in his chest by the attack. He uses the armored suit to escape. Back in the U.S. he announces his company will cease making weapons and he begins work on an updated armored suit only to find that Obadiah Stane, his second in command at Stark industries has been selling Stark weapons to the insurgents. He uses his new suit to return to Afghanistan to destroy the arms and then to stop Stane from misusing his research.
----------------------donc avec ce code j'affiche dans une listbox les films à disposition:
Dim lesfilms As New System.IO.StreamReader("C:\Users\Pascal\Desktop\PROJET\moviesShort.txt")
Dim lesresumes As New System.IO.StreamReader("C:\Users\Pascal\Desktop\PROJET\plotShort.txt")
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Do Until lesfilms.Peek = -1
Dim ofilm As String = lesfilms.ReadLine
Dim a As String = ofilm.Split("(")(0)
ListBox1.Items.Add(a)
Loop
lesfilms.Close()
End Sub
Donc ce que je voudrais faire c'est que, lorsque selectionne un film dans ma listbox, cela affiche dans une autre listbox le resume de ce film.