none
以 FileIO 匯入txt資料出錯 RRS feed

  • 問題

  • 我以 FileIO 匯入txt資料出錯,之前試都OK可以順利執行,但現在卻不行,我都沒有改過任何地方,不知道是怎麼了,整個程式目前只發現這個button3有問題,程式碼如下:(我是新手,麻煩複雜處稍做說明,謝謝)

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("新增文字文件.txt", System.Text.Encoding.GetEncoding(950))
          MyReader.TextFieldType = FileIO.FieldType.Delimited
          MyReader.SetDelimiters(" ")
          Dim currentRow As String()
          Dim c As Integer = 50
          Dim a As Integer = 0
          While Not MyReader.EndOfData
            While c = 100
              Try
                currentRow = MyReader.ReadFields()
                Dim currentField As String
                For Each currentField In currentRow
                  a = a + 1
                  c = c + (49.5 + 0.5 * ((-1) ^ a)) * ((-1) ^ a)
                  Me.Controls.Item("TextBox" & c.ToString).Text = currentField
                Next
              Catch ex As Microsoft.VisualBasic.
                    FileIO.MalformedLineException
                MsgBox("Line " & ex.Message &
                "is not valid and will be skipped.")
              End Try
            End While
          End While
        End Using
      End Sub
    

    程式可以執行,偵錯也都不會跳出來,但是按下這按鈕後,程式會變成「沒有回應」,我沒碰過這樣的問題,完全不知如何是好,謝謝幫忙!!!

     

     

    2011年3月19日 下午 02:06

解答

所有回覆

  • 會不會是檔案太大, 導致它一直在讀 ? 你有用工作管理員看一下程式的CPU使用量嗎 ?

    如果這是個需要長時的讀取, 建議你使用多緒的方法.

    簡單要入門多緒的話, 可以嘗試從 BackgroundWorker 類別 開始, 以下為一些參考文

    [BackgroundWorker 類別]

    [BackgroundWorker 元件概觀]

    [多執行緒初探--使用BackgroundWorker(1)]

    [多執行緒初探--使用BackgroundWorker(2)]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 iven00000000 2011年3月28日 上午 10:38
    • 已取消標示為解答 iven00000000 2011年3月28日 上午 10:38
    2011年3月19日 下午 02:50
    版主
  • Application.DoEvents 方法

    http://msdn.microsoft.com/zh-tw/library/system.windows.forms.application.doevents(VS.80).aspx

    或者文字格式不對、無內容,離不開迴圈...

    • 已提議為解答 白楓林 2011年3月20日 上午 07:33
    • 已取消提議為解答 iven00000000 2011年3月28日 上午 10:33
    • 已標示為解答 iven00000000 2011年3月29日 下午 07:48
    2011年3月19日 下午 03:15
  • 請問你的問題解決了嗎 ?
    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    2011年3月24日 下午 04:06
    版主
  • 依然無法解決問題

    txt中有內容 迴圈我自己看是可以離開(不知道是不是真的可以離開)

    至於文字格式我不知道需要什麼格式,不過,如果只是格式不對,應該不會出現這樣的問題吧?(不確定)

    插入 Application.DoEvents 似乎沒有改變

    2011年3月28日 上午 10:37
  • 我的檔案很小,只有20個數字和19個空格
    2011年3月28日 上午 10:38
  • 我剛剛自己試成功了 問題果然出在 迴圈

    我把它改成

     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
     Using MyReader As New Microsoft.VisualBasic.FileIO.TextFieldParser("新增文字文件.txt", System.Text.Encoding.GetEncoding(950))
      MyReader.TextFieldType = FileIO.FieldType.Delimited
      MyReader.SetDelimiters(" ")
      Dim currentRow As String()
     Dim c As Integer = 50
      Dim a As Integer = 0
      While Not MyReader.EndOfData Or c < n
      Try
       currentRow = MyReader.ReadFields()
       Dim currentField As String
       For Each currentField In currentRow
       a = a + 1
       c = c + (49.5 + 0.5 * ((-1) ^ a)) * ((-1) ^ a)
       Me.Controls.Item("TextBox" & c.ToString).Text = currentField
       Application.DoEvents()
       Next
      Catch ex As Microsoft.VisualBasic.
        FileIO.MalformedLineException
       MsgBox("Line " & ex.Message &
       "is not valid and will be skipped.")
      End Try
      End While
     End Using
     End Sub
    End Class
    


    我用

    While Not MyReader.EndOfData Or c < n
    

    這行把兩個 While 合併,這樣就OK了!


    2011年3月28日 上午 11:05