2013-03-11 4 views
0

Mon enseignant souhaite donc que la classe recherche un nom d'auteur dans un fichier et affiche toutes les informations sur cet auteur dans une zone de texte comme une étiquette de publipostage.Comment rechercher un fichier texte dans Visual basic

Voici mon code j'ai ajouté une image ci-dessous. Je suis vraiment perdu en ce qui concerne l'obtention du programme pour prendre la chaîne Authors et chercher un autre fichier. Je peux afficher le nom de l'auteur de façon optimale, mais comment chercher un autre fichier pour ce nom et afficher les informations sur cette ligne à propos de l'auteur?

Imports System.IO 

Public Class Form1 
' CSCI 6 
' Alex Smutny 
' Lab #3 
' 
' DATE: 3/1/2013 

Dim SR As IO.StreamReader 

' initial start spot for the record Count 
Dim RecordCount As Integer = 0 
Dim Author As String = File.ReadAllText("Authors.txt") 



Private Sub btnQuit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles quitBtn.Click 
    ' Properly Exits the application. 

    Me.Close() 
End Sub 

Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles closeBtn.Click 
    readBtn.Text = "Read" 
    SR.Close() 

    ' Changes the button statuses Locked or unlocked and sets default settings. 
    openBtn.Enabled = True 
    quitBtn.Enabled = True 
    readBtn.Enabled = False 
    closeBtn.Enabled = False 
    SearBtn.Enabled = False 

    RecordCount = 0 

    recordNum.Clear() 
    bookNum.Clear() 
    isbnNum.Clear() 
    bookTitle.Clear() 
    authorName.Clear() 
    bookPrice.Clear() 
    bookQuanity.Clear() 
    reorderPoint.Clear() 

End Sub 

Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles openBtn.Click 
    ' Sets the file to read from and opens it. 
    SR = IO.File.OpenText("Books.Txt") 

    ' Changes the status of the buttons again now that the File is open and ready to read. 

    openBtn.Enabled = False 
    quitBtn.Enabled = False 
    readBtn.Enabled = True 
    closeBtn.Enabled = True 
    SearBtn.Enabled = True 

End Sub 

Private Sub btnRead_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles readBtn.Click 
    'Changes the Read button to say next because it makes more since. 
    readBtn.Text = "Next" 
    ' Setting all the variables. 
    Dim srIndex1 As Integer = 18 
    Dim srTitle As Integer 
    Dim srAuthor As Integer 
    Dim srPrice As Integer 
    Dim srDPrice As Double 
    Dim srData As String 
    Dim srLength As Integer 


    If SR.Peek() = -1 Then 
     MessageBox.Show("End of file") 
    Else 
     ' Starts to read 
     srData = SR.ReadLine 

     ' Increment counter by 1. 
     RecordCount = RecordCount + 1 

     ' Determine the record length. 
     srLength = srData.Length 

     ' gets the book number 
     bookNum.Text = srData.Substring(0, 3) 

     ' ISBN number 
     isbnNum.Text = srData.Substring(4, 13) 

     ' Book title 
     For srTitle = 1 To srLength Step 1 
      If srData.Substring(srIndex1 + srTitle, 1) = "," Then 
       bookTitle.Text = srData.Substring(srIndex1, srTitle) 
       srIndex1 = srIndex1 + srTitle + 1 
       srTitle = srLength + 1 
      End If 
     Next 

     ' Book Author 
     For srAuthor = 1 To srLength Step 1 
      If srData.Substring(srIndex1 + srAuthor, 1) = "," Then 
       authorName.Text = srData.Substring(srIndex1, srAuthor) 
       srIndex1 = srIndex1 + srAuthor + 1 
       srAuthor = srLength + 1 
       Author = authorName.Text 
      End If 
     Next 

     ' Book Price 
     For srPrice = 1 To srLength Step 1 
      If srData.Substring(srIndex1 + srPrice, 1) = "," Then 
       srDPrice = CDbl(srData.Substring(srIndex1, srPrice)) 
       bookPrice.Text = srDPrice.ToString("C") 
       srIndex1 = srIndex1 + srPrice + 1 
       srPrice = srLength + 1 
      End If 
     Next 

     ' Quanity 
     bookQuanity.Text = srData.Substring(srIndex1, 2) 
     srIndex1 = srIndex1 + 3 

     ' Reorder Point 
     reorderPoint.Text = srData.Substring(srIndex1, 2) 

    End If 

    ' record count 
    recordNum.Text = RecordCount 

End Sub 



Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    openBtn.Enabled = True 
    quitBtn.Enabled = True 
    readBtn.Enabled = False 
    closeBtn.Enabled = False 
    SearBtn.Enabled = False 


End Sub 

Private Sub SearBtn_Click(sender As System.Object, e As System.EventArgs) Handles SearBtn.Click 
    SR = IO.File.OpenText("Authors.Txt") 

    SR.Close() 
    readBtn.Text = "Restart" 
    RecordCount = 0 
    SR = IO.File.OpenText("Books.Txt") 
End Sub 

End Class

Program

Auteurs fichier http://pastebin.com/t7C8ye9e Livres Fichier http://pastebin.com/y6DNyUFd

donc mon but est de simplement obtenir l'information pour l'auteur en cours et obtenir de l'autre fichier et supprimez tous les espaces de fin et affichez-le simplement comme une étiquette de publipostage.

Répondre

0

Il existe de nombreux moyens de le faire. Supposons, pour l'instant, qu'il y ait un auteur par ligne. Si c'est le cas, vous pouvez obtenir la chaîne entière avec My.Computer.FileSystem.ReadAllText() et utiliser String.Split(Environment.NewLine) pour le diviser sur chaque nouvelle ligne. En tout cas, vous devez avoir un moyen de séparer chaque auteur de la liste. String.Split renvoie un tableau d'objets String. Vous pouvez ensuite parcourir le tableau pour déterminer si un terme correspond à la recherche. Voici un exemple de boucle for.

'... search term given in param 

'... after loading text file 
Dim StrArr() As String 

StrArr = AuthorsString.Split(Environment.NewLine) 
Dim i as Integer 

For i=0 to StrArr.Length - 1 Step 1 

If StrArr(i).toLower = SearchTerm.toLower Then 

'String is a match! Case insensitivity should make it a little easier for  the user. 

End If 

Next 

Faites-moi savoir si vous avez des questions.