好的,因此對於一個實習項目,我正在使用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
測試標題
測試文本
整個過程。但當然,如果它是相同的日期,那麼它只是覆蓋它。那麼任何人都可以幫助我嗎?
那麼看,日期是唯一需要檢查,如果它是空白的。日期永遠不會是空的,因爲我有一個檢查。而且我知道我的代碼看起來很難維護,現在就是這樣。我只是在那裏獲得基本的功能,所以我可以清理它並使其看起來更好。另外,你能否在這些清單上提供鏈接?因爲我需要它與一個結構完全兼容。 – 2012-07-10 20:49:57
@RichardPaulicelli不要使用結構,請使用類。然後它就像'Dim myEntries As New List(JournalEntries)'一樣簡單,其中'JournalEntries'是您的類,具有日期,標題和文本屬性。那麼你不需要'Counter'變量。 – LarsTech 2012-07-10 20:55:27
非常感謝。當我完成這個項目時,我會嘗試使用它並看看它是如何工作的。但現在,我剛開始使用數據庫(我終於學會了xD),但非常感謝您的幫助! – 2012-07-23 13:36:16