none
請教TXT檔的讀取和寫入 RRS feed

  • 問題

  • 我想請教一下

    如何讀取TXT檔中特定一行(特定的字串的那一行)並寫入文字

    TXT檔的內容是:

    -----------------

    XX,XXXX,XXX

    -----------------

    (以","分隔每個字串)

    先找到XX後在行末寫入文字

    之後再存檔

    2011年9月22日 上午 11:28

解答

  • 用讀寫資料流可以做

     

    我也剛接觸這部分 

     

    提供給你參考的原碼 你自己下去改吧

     

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            '-----------------------------------
            '變數path用來存放檔案路徑
            Dim path As String = My.Computer.FileSystem.CurrentDirectory & "\Talk.txt"
            '變數buffer用來存放要寫入的資料
            Dim buffer As String
            '將要寫入的資料設定給buffer
            buffer = InputBox("你說什麼", "你說什麼") & "|" + InputBox("我回什麼", "我回什麼") + vbCrLf
            '將buffer的值寫入到檔案中
            My.Computer.FileSystem.WriteAllText(path, buffer, True)
            '----------------------------------
        End Sub
    
        Public Function Array() As Long
            '-------------------------------------
            '假如 沒有字串 就不丟進來
            Dim hpin As String
            Dim buffer1 As String
            Dim path1 As String = My.Computer.FileSystem.CurrentDirectory & "\Talk1.txt"
    
            hpin = Len(TextBox1.Text)
            If hpin = 0 Then
                Exit Function
            End If
    
            Dim ps As Integer
            '-------------------------------------------------------------------------
            Dim intCount As Integer = 1
            For s = 1 To 12
    
    
    
    
                '----------------------------
                Dim c As Integer = 0
                Dim arlis As New ArrayList
                Dim arlis2 As New ArrayList
                Dim arlis3 As New ArrayList
                Dim arlis4 As New ArrayList
                arlis.Clear()
                arlis2.Clear()
                arlis3.Clear()
                arlis4.Clear()
    
    
                Dim Temp As String  ' 暫存檔請自行修改。
                Temp = Application.StartupPath & "\Talk.txt"   '取得啟動應用程式的可執行檔路徑,不包括檔名。Application.StartupPath
                'Try
    
                If File.Exists(Temp) Then '判斷檔案是否存在
                    Using sr As StreamReader = New StreamReader(Temp, System.Text.Encoding.Default)  '設定資料流讀取器 StreamReader
                        Dim con As Integer = 0
                        Dim m() As String = Nothing
    
    
    
    
                        Dim str As String = ""
                        While (sr.EndOfStream <> True)  ' 先判斷語句在資料庫存不存在  將資料庫語句加載進去
                            str = sr.ReadLine
                            m = str.Split("|")
                            arlis.Add(m(0))
                            arlis2.Add(m(1))
                            con = con + 1
    
                        End While          '如果存在 搜索到的話 取得結尾的值EndOfStream 丟出去
                        If arlis.IndexOf(Me.Controls("TextBox" & intCount).Text) <> -1 Then   '報告這個執行個體中指定 String 第一個符合項目的索引。
    
                            RichTextBox2.Text = RichTextBox2.Text & arlis2(arlis.IndexOf(Me.Controls("TextBox" & intCount).Text)) & vbCrLf
    
    
                        Else       '如果資料庫搜索不到
    
    
                            Dim nameq = From data In arlis Where data.IndexOf(Me.Controls("TextBox" & intCount).Text) <> -1 Select data   '比對對方的語句是否存在在資料庫Text內
                            For Each obj As String In nameq
                                arlis3.Add(obj)
                                arlis4.Add(arlis2(arlis.IndexOf(obj)))
                            Next
                            For x As Integer = 0 To arlis3.Count - 1
                                '-------------------------------------------------------------------------------------
                                If arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 2 Then  'Replace 取代這個執行個體中指定的 Unicode 字元或 String 的所有項目。
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
    
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 3 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 4 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 5 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 6 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & vbCrLf & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 7 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 8 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
    
                                End If
                                '---------------------------------------------------------------------------------------------
                            Next
                            If c = 0 Then
    
    
    
                                buffer1 = Me.Controls("TextBox" & intCount).Text + vbCrLf
                                My.Computer.FileSystem.WriteAllText(path1, buffer1, True)
    
                            End If
    
                        End If
    
                    End Using
    
                End If
    
                '------------------------------------------------------------------------------
                intCount += 1
                ' Me.Controls("TextBox" & intCount).Text = result
    
                ps = Len(Me.Controls("TextBox" & intCount).Text)
                If ps = 0 Then
                    Exit Function
                End If
    
    
    
            Next
            '----------------------------------------------------------
    
    
        End Function


    '---------------------------------------------------
    Button2_Click

     

    這個部分的程式碼 是用來寫資料進去TXT檔裡面的

    '------------------------------------------------------

    Array()

     

    這個部分 則是把TXT檔裡面的文字資料讀出來做判別。 你用這個框架下去改應該很快就完成了。



    • 已編輯 向恩 2011年9月22日 上午 11:38
    • 已標示為解答 張世澤 2011年9月23日 上午 10:00
    2011年9月22日 上午 11:37

所有回覆

  • 用讀寫資料流可以做

     

    我也剛接觸這部分 

     

    提供給你參考的原碼 你自己下去改吧

     

      Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            '-----------------------------------
            '變數path用來存放檔案路徑
            Dim path As String = My.Computer.FileSystem.CurrentDirectory & "\Talk.txt"
            '變數buffer用來存放要寫入的資料
            Dim buffer As String
            '將要寫入的資料設定給buffer
            buffer = InputBox("你說什麼", "你說什麼") & "|" + InputBox("我回什麼", "我回什麼") + vbCrLf
            '將buffer的值寫入到檔案中
            My.Computer.FileSystem.WriteAllText(path, buffer, True)
            '----------------------------------
        End Sub
    
        Public Function Array() As Long
            '-------------------------------------
            '假如 沒有字串 就不丟進來
            Dim hpin As String
            Dim buffer1 As String
            Dim path1 As String = My.Computer.FileSystem.CurrentDirectory & "\Talk1.txt"
    
            hpin = Len(TextBox1.Text)
            If hpin = 0 Then
                Exit Function
            End If
    
            Dim ps As Integer
            '-------------------------------------------------------------------------
            Dim intCount As Integer = 1
            For s = 1 To 12
    
    
    
    
                '----------------------------
                Dim c As Integer = 0
                Dim arlis As New ArrayList
                Dim arlis2 As New ArrayList
                Dim arlis3 As New ArrayList
                Dim arlis4 As New ArrayList
                arlis.Clear()
                arlis2.Clear()
                arlis3.Clear()
                arlis4.Clear()
    
    
                Dim Temp As String  ' 暫存檔請自行修改。
                Temp = Application.StartupPath & "\Talk.txt"   '取得啟動應用程式的可執行檔路徑,不包括檔名。Application.StartupPath
                'Try
    
                If File.Exists(Temp) Then '判斷檔案是否存在
                    Using sr As StreamReader = New StreamReader(Temp, System.Text.Encoding.Default)  '設定資料流讀取器 StreamReader
                        Dim con As Integer = 0
                        Dim m() As String = Nothing
    
    
    
    
                        Dim str As String = ""
                        While (sr.EndOfStream <> True)  ' 先判斷語句在資料庫存不存在  將資料庫語句加載進去
                            str = sr.ReadLine
                            m = str.Split("|")
                            arlis.Add(m(0))
                            arlis2.Add(m(1))
                            con = con + 1
    
                        End While          '如果存在 搜索到的話 取得結尾的值EndOfStream 丟出去
                        If arlis.IndexOf(Me.Controls("TextBox" & intCount).Text) <> -1 Then   '報告這個執行個體中指定 String 第一個符合項目的索引。
    
                            RichTextBox2.Text = RichTextBox2.Text & arlis2(arlis.IndexOf(Me.Controls("TextBox" & intCount).Text)) & vbCrLf
    
    
                        Else       '如果資料庫搜索不到
    
    
                            Dim nameq = From data In arlis Where data.IndexOf(Me.Controls("TextBox" & intCount).Text) <> -1 Select data   '比對對方的語句是否存在在資料庫Text內
                            For Each obj As String In nameq
                                arlis3.Add(obj)
                                arlis4.Add(arlis2(arlis.IndexOf(obj)))
                            Next
                            For x As Integer = 0 To arlis3.Count - 1
                                '-------------------------------------------------------------------------------------
                                If arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 2 Then  'Replace 取代這個執行個體中指定的 Unicode 字元或 String 的所有項目。
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
    
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 3 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 4 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 5 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 6 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & vbCrLf & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 7 Then
    
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
                                ElseIf arlis3(x).Replace(Me.Controls("TextBox" & intCount).Text, "").Length <= 8 Then
    
                                    RichTextBox2.Text = RichTextBox2.Text & arlis4(x) & vbCrLf
                                    c = 1
    
                                End If
                                '---------------------------------------------------------------------------------------------
                            Next
                            If c = 0 Then
    
    
    
                                buffer1 = Me.Controls("TextBox" & intCount).Text + vbCrLf
                                My.Computer.FileSystem.WriteAllText(path1, buffer1, True)
    
                            End If
    
                        End If
    
                    End Using
    
                End If
    
                '------------------------------------------------------------------------------
                intCount += 1
                ' Me.Controls("TextBox" & intCount).Text = result
    
                ps = Len(Me.Controls("TextBox" & intCount).Text)
                If ps = 0 Then
                    Exit Function
                End If
    
    
    
            Next
            '----------------------------------------------------------
    
    
        End Function


    '---------------------------------------------------
    Button2_Click

     

    這個部分的程式碼 是用來寫資料進去TXT檔裡面的

    '------------------------------------------------------

    Array()

     

    這個部分 則是把TXT檔裡面的文字資料讀出來做判別。 你用這個框架下去改應該很快就完成了。



    • 已編輯 向恩 2011年9月22日 上午 11:38
    • 已標示為解答 張世澤 2011年9月23日 上午 10:00
    2011年9月22日 上午 11:37
  • 您好

    txt 檔案內容很大嗎? 假如檔案內容很少的話,透過 StreamReader 從檔案讀取文字

    使用 File.ReadAllLines 方法 (String) 讀取每行資料,使用 regex 或是 string.IndexOf 等方法找出符合條件的行

    在行末加入資料後,使用 StreamWriter 儲存檔案


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年9月22日 下午 12:01
    版主
  • FAQ

    http://social.msdn.microsoft.com/Search/zh-TW/?Refinement=112&query=csv


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2011年9月22日 下午 12:08
  • 非常謝謝您!!

    這是我要的!!

    感謝大大

    2011年9月23日 上午 10:00