1

好的,所以对于实习项目,我正在与 streamwriters 和 streamreaders 一起制作日记。

我必须到哪里可以创建一个具有名称、用户名和密码的帐户。当您创建帐户时,我还拥有它以该人的姓名创建一个 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

测试标题

测试文本

整个过程。但当然,如果它是相同的日期,那么它只会覆盖它。那么有人可以帮助我吗?

4

1 回答 1

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

请考虑摆脱数组并改用 a List(of JournalEntry)。您的代码在当前状态下看起来很难维护。

于 2012-07-10T20:37:34.793 回答