2012-07-10 84 views
1

好的,因此對於一個實習項目,我正在使用Streamwriters和Streamreaders撰寫期刊。Vb.net期刊計劃問題

我必須到您可以在其中創建名稱,用戶名和密碼的帳戶。我也有它在創建帳戶時在其中創建人名中的txt文件的位置。現在,他們登錄並將它們帶到雜誌頁面。期刊頁面的大部分內容都有日期條目的日期,期刊的標題和日記條目文本本身。

我遇到的問題是,當您單擊按鈕創建/編輯日記條目時,它會通過檢查該日記是否存在的子例程(意思是該日期已有一個)或不。如果它不存在,那麼它應該在文本文件的底部創建一個新的。如果它確實存在,那麼它應該編輯日誌駐留在文本文件中的行。

代碼:

Private Sub CreateBtn_Click(sender As System.Object, e As System.EventArgs) Handles CreateBtn.Click 

    Errors = "" 

    Dim TempCounter As Integer = 0 

    If TitleTxt.Text = "" Then 

     Errors = "You must enter a title." & vbCrLf 

    End If 


    If JournalTextRtxt.Text = "" Then 

     Errors &= "You must enter an entry for the journal." 

    End If 

    If Errors <> "" Then 

     MessageBox.Show("There's an error in creating/editing your journal." & vbCrLf & "Error(s):" & vbCrLf & Errors, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error) 

    Else 

     JournalDate = DateTimePicker1.Value 
     JournalTitle = TitleTxt.Text 
     JournalText = JournalTextRtxt.Text 

     arrJournalEntries(TempCounter).TheDate = JournalDate 
     arrJournalEntries(TempCounter).Title = JournalTitle 
     arrJournalEntries(TempCounter).JournalEntry = JournalText 



     CheckAndWrite() 

    End If 

End Sub 

Private Sub CheckAndWrite() 

    Dim Reader As New StreamReader(MyName & ".txt", False) 
    Dim Sline As String = Reader.ReadLine 

    Counter = 0 

    Do Until (Sline Is Nothing) 'Perform the code until the line in the text file is blank 

     If Not Sline Is Nothing Then 'If the line in the text file is NOT blank then 

      For i As Integer = 1 To 3 

       Select Case i 

        Case 1 

         arrJournalEntries(Counter).TheDate = Sline 
         Sline = Reader.ReadLine 


        Case 2 

         arrJournalEntries(Counter).Title = Sline 
         Sline = Reader.ReadLine 

        Case 3 

         arrJournalEntries(Counter).JournalEntry = Sline 
         Sline = Reader.ReadLine 

       End Select 

      Next 
     End If 

     JournalDate = arrJournalEntries(Counter).TheDate 

     Time = DateTimePicker1.Value 

     MsgBox("Journal Date = " & JournalDate & vbCrLf & "Today's Date = " & Time) 


     If Time = JournalDate Then 

      JournalFound = True 

     Else 

      Counter += 1 

      JournalFound = False 

     End If 

    Loop 


    Reader.Close() 

    Try 

     If Sline Is Nothing Or JournalFound = False Then 

      MsgBox("Your journal is now going to be created.") 

      JournalDate = DateTimePicker1.Value 
      JournalTitle = TitleTxt.Text 
      JournalText = JournalTextRtxt.Text 

      arrJournalEntries(Counter).TheDate = JournalDate 
      arrJournalEntries(Counter).Title = JournalTitle 
      arrJournalEntries(Counter).JournalEntry = JournalText 

      Dim Writer As New StreamWriter(MyName & ".txt", True) 

      Do Until (arrJournalEntries(Counter).TheDate = Nothing) 

       Writer.WriteLine(arrJournalEntries(Counter).TheDate) 
       Writer.WriteLine(arrJournalEntries(Counter).Title) 
       Writer.WriteLine(arrJournalEntries(Counter).JournalEntry) 


       Counter += 1 

      Loop 

      Writer.Close() 


     End If 

     If JournalFound = True Then 

      MsgBox("Your journal is now going to be edited.") 

      JournalDate = DateTimePicker1.Value 
      JournalTitle = TitleTxt.Text 
      JournalText = JournalTextRtxt.Text 


      arrJournalEntries(Counter).TheDate = JournalDate 
      arrJournalEntries(Counter).Title = JournalTitle 
      arrJournalEntries(Counter).JournalEntry = JournalText 


      Dim Writer As New StreamWriter(MyName & ".txt", True) 

      Do Until (arrJournalEntries(Counter).TheDate = Nothing) 

       Writer.WriteLine(arrJournalEntries(Counter).TheDate) 
       Writer.WriteLine(arrJournalEntries(Counter).Title) 
       Writer.WriteLine(arrJournalEntries(Counter).JournalEntry) 


       Counter += 1 

      Loop 

      Writer.Close() 


     End If 

    Catch ex As Exception 

     MessageBox.Show("An error has occured" & vbCrLf & vbCrLf & "Original Error:" & vbCrLf & ex.ToString) 

    End Try 



End Sub` 

這就是發生的歷史是,它不僅在第一時間誤寫入的問題。當它應該說它將要編輯時,它不會,它只是說創建。但它只是添加到文件中。用當前日期按下按鈕3次後。並且標題是「測試標題」,並且日誌條目文本是「測試文本」。這是發生了什麼。

這應該只是

2012年7月10日下午3時52分08秒

測試題

測試文字

2012年7月10日3 :52:08 PM

測試標題

測試文本

整個過程。但當然,如果它是相同的日期,那麼它只是覆蓋它。那麼任何人都可以幫助我嗎?

回答

1

你只過濾由日期的陣列,因此它看起來就像你有一個約會的對象,但沒有標題或文本:

Do Until (arrJournalEntries(Counter).TheDate = Nothing) 

「快速」的解決辦法:

Do Until (arrJournalEntries(Counter).TheDate = Nothing) 
    If arrJournalEntries(Counter).Title <> String.Empty Then 
    Writer.WriteLine(arrJournalEntries(Counter).TheDate) 
    Writer.WriteLine(arrJournalEntries(Counter).Title) 
    Writer.WriteLine(arrJournalEntries(Counter).JournalEntry) 
    End If 
    Counter += 1 
Loop 

請考慮擺脫陣列,並使用List(of JournalEntry)來代替。您的代碼看起來很難保持其當前狀態。

+0

那麼看,日期是唯一需要檢查,如果它是空白的。日期永遠不會是空的,因爲我有一個檢查。而且我知道我的代碼看起來很難維護,現在就是這樣。我只是在那裏獲得基本的功能,所以我可以清理它並使其看起來更好。另外,你能否在這些清單上提供鏈接?因爲我需要它與一個結構完全兼容。 – 2012-07-10 20:49:57

+0

@RichardPaulicelli不要使用結構,請使用類。然後它就像'Dim myEntries As New List(JournalEntries)'一樣簡單,其中'JournalEntries'是您的類,具有日期,標題和文本屬性。那麼你不需要'Counter'變量。 – LarsTech 2012-07-10 20:55:27

+0

非常感謝。當我完成這個項目時,我會嘗試使用它並看看它是如何工作的。但現在,我剛開始使用數據庫(我終於學會了xD),但非常感謝您的幫助! – 2012-07-23 13:36:16