Mot trouvé dans fichier texte. Affichage dans textbox "Jusqu'à ligne vide".

Résolu
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012 - 18 déc. 2011 à 14:59
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012 - 21 déc. 2011 à 15:52
Bonjour,

Je me suis fabriqué un petit prog avec en haut un DateTimePicker.
Un textbox juste en dessous, et un bouton ajouter évènement.
Je tape donc mon évènement dans mon textbox, je valide et sa m'écris dans un fichier texte : date selectionné dans le DateTimePicker + texte écris dans le textbox.

Donc le logiciel vérifiera une fois (ou deux) par jours voir si un évènement est prévu ce jour, jusque là tout va bien.
Il detecte bien la date du jour et m'affiche ça dans un msgbox.
Seulement je ne parvient pas à ajouter des évènements multiligne, j'arrive uniquement à récupérer la ligne contenant la date recherché.

Voici le code :

        
Dim mot As String = Date.Now.Date 'le mot a chercher
        Dim tmp As String 'une variable temporaire
        Dim emplacement As String = "evenement.txt" 'l'emplacement du fichier

        FileOpen(1, emplacement, OpenMode.Input) 'on ouvre le fichier à analyser
        Do Until EOF(1) 'tant qu'on est pas à la fin du fichier:
            tmp = LineInput(1) 'on lis la ligne et on la stock dans la variable
            If ((InStr(tmp, mot)) > 0) Then 'on vérifie si le mot rechercher ne serais pas dans la ligne
                MsgBox(tmp) 'si oui alors on en fait part					
            End If

        Loop
        FileClose(1)


J'avais déjà rencontré un problème similaire mais dans un autre sens, mais je ne suis pas parvenu à l'adapter.
Comment pourrai-je adapter ceci ?

Dim depart = mot.IndexOf(vbCr & vbLf)
            messagebox.show(evenement.Substring(depart)


Pour qu'il face en sorte de m'afficher dans le msgbox, la date recherché + mon message (donc ma variable "tmp") jusqu'à une ligne vide, de sorte à ce que je puisse avoir des évènements multilignes.

Merci d'avance !

29 réponses

cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
19 déc. 2011 à 21:28
Bonsoir

Penses aussi que peut etre un jour tu voudras
améliorer et par ex corriger/annuler un/des messages
ou les messages apparus une date passée

dans ce cas il faudrait plutot une base de données
3
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 16:05
Et ma deuxième question est, comment supprimer la ligne que je viens d'afficher dans le textbox en cliquant sur oui ?

J'ai testé ceci :

Select MsgBox(tmp, vbYesNo) 'si oui alors on en fait part	
                    Case vbYes
                        emplacement.Replace(tmp, "")
                    Case vbNo
                        MsgBox("no")
                    Case Else
                        Me.Close()
                End Select


Mais ça ne fonctionne pas
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
18 déc. 2011 à 17:33
Salut
Bien joli
quelle est la structure de ton fichier txt ?
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 17:47
Salut,

Merci pour ta réponse.

Actuellement je récupère ceci :

18/12/11 Anniversaire de xx

19/12/11 Anniversaire de ShayW

Mais si j'écrivais ceci dans mon textbox :

Anniversaire de xx
Fête de la prog
Rdv avec le président

Je récupère uniquement la première ligne.

Donc si mon fichier final est comme ceci :

18/12/11 Anniversaire de xx
Fête de la prog
Rdv avec le président

19/12/11 Anniversaire de zz
Fête de la musique
Rdv avec moi

Et bien je souhaiterai récupéré le texte à partir de ma variable mot (la date) juste la ligne vide.
Nous sommes le 18, un messagebox m'affiche ceci :

18/12/11 Anniversaire de xx
Fête de la prog
Rdv avec le président
0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 déc. 2011 à 19:38
Bonjour,
Je crois bien que la solution est dans un tel cas réduite à sa portion congrue ===>>>
"Splitter" sur deux retour/ligne consécutifs
Pour chaque élément ainsi obtenu : "splitter" sur un seul retour/ligne lorsque les 8 prmiers caractères "représenteront" la date actuelle au format "dd/mm/yy"
Ce sera bien cher payer une lacune de réflexion avant de décider de la structure du fichier.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
18 déc. 2011 à 19:43
Bonsoir,

Commence par supprimer la référence Microsoft.VisualBasic et activer Option Strict dans les propriétés de ton projet.
Corrige les 8 erreurs et on verra après.
Note: vbCr & vbLf peut être remplacé par Environment.NewLine
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 déc. 2011 à 19:54
Bonjour, Banana32,

J'ajoute que dans un tel cas de figure :
1) une base de données (et son exploitation) serait plus performante
2) s'il n'en veux pas (de base de données) == Fichier texte structuré en nase de données
3) si le 2) lui échappe également : fichier de type ini
4) si le 3 lui échappe également : ===>>>
--- un répertoire/dossier ad hoc contenant uniquement des fichiers dont le nom est une date
--- dans chacun de ces fichiers ===>>> les évènements pour cette date

En bref : tout sauf son approche actuelle

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Utilisateur anonyme
18 déc. 2011 à 20:04
Bonsoir ucfoutu,
Il y a aussi la sérialisation des données dans un xml (facile à mettre en oeuvre). Ce xml pourra faire office de base de donnée pour des quantités de données peu ou moyennement importantes.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
18 déc. 2011 à 20:18
Oui, banana32, oui : tout sauf son approche actuelle.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 23:35
Bonsoir à vous et merci pour vos réponses.
En activant option strict je n'ai qu'une erreur car ce code la :

Dim depart = mot.IndexOf(vbCr & vbLf)
            messagebox.show(evenement.Substring(depart)


N'est pas dans mon code, et il est plein d'erreur car c'est un des essais que j'ai fait.
En ce qui concerne le choix de structure et de format de fichier(txt) ça fonctionne très bien comme ça.
L'erreur est là ---> Dim mot As String = Date.Now.Date 'le mot a chercher
Pourtant il fait bien ce que je lui demande.

Voici mon code complet :

Imports System.IO

Public Class Form1
    Dim TargetFile As IO.StreamWriter
    Dim DernierPoint As Point
    Dim MouMouseDown As Boolean


    Private Sub diminuer_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles diminuer.MouseLeave
        diminuer.BackgroundImage = My.Resources.diminuer
    End Sub

    Private Sub diminuer_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles diminuer.MouseMove
        diminuer.BackgroundImage = My.Resources.diminuerOn
    End Sub

    Private Sub agrandir_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles agrandir.MouseLeave
        agrandir.BackgroundImage = My.Resources.agrandir
    End Sub

    Private Sub agrandir_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles agrandir.MouseMove
        agrandir.BackgroundImage = My.Resources.agrandirOn
    End Sub

    Private Sub fermer_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles fermer.MouseLeave
        fermer.BackgroundImage = My.Resources.fermer
    End Sub

    Private Sub fermer_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles fermer.MouseMove
        fermer.BackgroundImage = My.Resources.fermerOn
    End Sub

    Private Sub diminuer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles diminuer.Click
        Me.WindowState = FormWindowState.Minimized
    End Sub

    Private Sub fermer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles fermer.Click
        Close()
    End Sub

    Private Sub agrandir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles agrandir.Click
        If Me.WindowState = FormWindowState.Normal Then
            Me.WindowState = FormWindowState.Maximized
        ElseIf Me.WindowState = FormWindowState.Maximized Then
            Me.WindowState = FormWindowState.Normal
        End If
    End Sub


    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        MouMouseDown = True
        DernierPoint = New Point(e.X, e.Y)
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If MouMouseDown Then
            Me.Location = New Point(Me.Left - (DernierPoint.X - e.X), Me.Top - (DernierPoint.Y - e.Y))
        End If
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        MouMouseDown = False
    End Sub

  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Timer1.Interval = 10000
        Timer1.Start()
        TextBox1.Focus()
        TextBox1.Select()
    End Sub




    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

    End Sub


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Try
            TargetFile = New IO.StreamWriter("evenement.txt", True)
        Catch
            MessageBox.Show("Erreur")
        End Try
        Try
            TargetFile.Write(DateTimePicker1.Value)
            TargetFile.Write(" " & TextBox1.Text)
            TargetFile.WriteLine(vbNewLine)
        Catch
            MessageBox.Show("Error")
        End Try
        TargetFile.Close()
        TextBox1.Clear()
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        MsgBox(System.IO.File.ReadAllText("evenement.txt"))
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

        Dim mot As String = Date.Now.Date 'le mot a chercher
        Dim tmp As String 'une variable temporaire
        Dim emplacement As String = "evenement.txt" 'l'emplacement du fichier

        FileOpen(1, emplacement, OpenMode.Input) 'on ouvre le fichier à analyser
        Do Until EOF(1) 'tant qu'on est pas à la fin du fichier:
            tmp = LineInput(1) 'on lis la ligne et on la stock dans la variable
            If ((InStr(tmp, mot)) > 0) Then 'on vérifie si le mot rechercher ne serais pas dans la ligne

                Select Case MsgBox(tmp & vbNewLine & vbNewLine & "Supprimer cet évènement?", MsgBoxStyle.OkCancel) 'si oui alors on en fait part	
                    Case vbOK
                        emplacement.Replace(tmp, "")
                        MsgBox("ok")
                    Case Else

                End Select

            End If

        Loop
        FileClose(1)

    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        Try
            TargetFile = New IO.StreamWriter("evenement.txt", False)
        Catch
            MessageBox.Show("Erreur")
        End Try
        Try
            TargetFile.WriteLine()
        Catch
            MessageBox.Show("Error")
        End Try
        TargetFile.Close()
        TextBox1.Clear()
    End Sub


    Private Sub CheckBox1_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckBox1.CheckedChanged
        Dim key As Microsoft.Win32.RegistryKey
        If CheckBox1.Checked = True Then

            key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
            key.SetValue("LecteurTakam", Application.StartupPath + "\LecteurTakam.exe")
        ElseIf CheckBox1.Checked = False Then
            key = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Run", True)
            key.DeleteValue("LecteurTakam")
        End If

    End Sub
End Class


NHenry tu dis de faire un fichier par date, j'y avais pensé, mais comme j'ai reussi à tout faire en un fichier, j'ai préféré.

Au pire je peux faire des évènements en une ligne c'est pas trop le soucis, c'est toujours des programmes personnel, mais je vais tout de même continuer de chercher.

Je vous dis au jus.
Merci.
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 23:38
En fait si je fait Date.Now il me met l'heure avec, hors je ne veux que la date.
0
Utilisateur anonyme
18 déc. 2011 à 23:53
c'est toujours des programmes personnel

Ca ne t'empêches pas de prendre les bonnes habitudes en tant que débutant.
Tu n'as pas supprimé la référence Microsoft.VisualBasic (obsolète mais activée par défaut pour compatibilité avec le traducteur de code vb6)

Bonne prog.
0
Utilisateur anonyme
18 déc. 2011 à 23:55
Utilise Date.Now.ToShortDateString
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 23:58
Merci pour cette info ça fonctionne tout aussi bien.
En ce qui concerne supprimé la référence visual basic, si tu parle de décoché cette case ça m'affiche 14 erreurs.
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
18 déc. 2011 à 23:58
Ou alors tu parles du power pack ?
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
19 déc. 2011 à 00:00
Je n'ai pas d'erreur la dessus, pourtant la ligne n'est pas supprimé.

emplacement.Replace(tmp, "")
                        MsgBox("ok")
0
Utilisateur anonyme
19 déc. 2011 à 00:02
Non il s'agit bien des 14 erreurs
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
19 déc. 2011 à 00:04
Serais tu m'expliquer pourquoi ce sont des erreurs alors que le tout fonctionne au top ?

ps: Je ne contredis pas ce que tu dis c'est à titre d'information.

Merci
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
19 déc. 2011 à 00:05
Erreur 5 'EOF' n'est pas déclaré. La fonctionnalité d'E/S de fichier est disponible dans l'espace de noms 'Microsoft.VisualBasic'. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 109 18 LecteurTakam
Erreur 14 'FileClose' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 124 9 LecteurTakam
Erreur 3 'FileOpen' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 108 9 LecteurTakam
Erreur 7 'InStr' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 111 18 LecteurTakam
Erreur 6 'LineInput' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 110 19 LecteurTakam
Erreur 2 'MsgBox' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 99 9 LecteurTakam
Erreur 8 'MsgBox' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 113 29 LecteurTakam
Erreur 13 'MsgBox' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 116 25 LecteurTakam
Erreur 11 'MsgBoxStyle' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 113 94 LecteurTakam
Erreur 4 'OpenMode' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 108 34 LecteurTakam
Erreur 1 'vbNewLine' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 90 34 LecteurTakam
Erreur 9 'vbNewLine' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 113 42 LecteurTakam
Erreur 10 'vbNewLine' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 113 54 LecteurTakam
Erreur 12 'vbOK' n'est pas déclaré. Il peut être inaccessible en raison de son niveau de protection. C:\Users\Laura\Desktop\LecteurTakam\LecteurTakam\Form1.vb 114 26 LecteurTakam
0
KcHeY Messages postés 261 Date d'inscription dimanche 23 mai 2004 Statut Membre Dernière intervention 22 septembre 2012
19 déc. 2011 à 00:08
Deux erreurs supprimées en remplaçant MsgBox par Messagebox.Show (dsl NHenrey je recommencerai plus lol)

Il m'avais conseillé de prendre l'habitude de mettre messagebox.show à la place de msgbox, et c'est vrai que comme c'est plus rapide je prend les mauvaises, habitude.
0
Rejoignez-nous