none
créer un tableau de string à partir d'une extraction de donnée RRS feed

  • 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.

    jeudi 22 décembre 2011 21:43

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.ObjectByVal e As System.EventArgsHandles 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
    Voir le profil de Xavier TALOUR sur LinkedIn
    • 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
    vendredi 23 décembre 2011 09:37
    Auteur de réponse
  •  

    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 :

    1. 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).
    2. Utiliser une liste de filmes plutôt qu'un tableau de string.
    3. Dans votre Structure film, utiliser des propriétés plutôt que des champs public.  
    4. 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.

    lundi 26 décembre 2011 13:21
    Auteur de réponse

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
    Voir le profil de Xavier TALOUR sur LinkedIn
    vendredi 23 décembre 2011 08:41
    Auteur de réponse
  • merci, mais je ne vois pas par où je pourrais commencer.

    Serait ce possible de récupérer les titres en utilisant mes splits?

    vendredi 23 décembre 2011 09:23
  • 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.ObjectByVal e As System.EventArgsHandles 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
    Voir le profil de Xavier TALOUR sur LinkedIn
    • 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
    vendredi 23 décembre 2011 09:37
    Auteur de réponse
  • 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.

    vendredi 23 décembre 2011 11:24
    Auteur de réponse
  • 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

     

    samedi 24 décembre 2011 09:05
  •  

    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 :

    1. 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).
    2. Utiliser une liste de filmes plutôt qu'un tableau de string.
    3. Dans votre Structure film, utiliser des propriétés plutôt que des champs public.  
    4. 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.

    lundi 26 décembre 2011 13:21
    Auteur de réponse
  • 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.

    lundi 26 décembre 2011 17:36