none
請問如何將多個csv檔去先頭一行資料後轉成text檔 RRS feed

  • 問題

  • 各位大大您好:我第一次寫程式,請教如何將多個csv檔先去頭一行在轉成一個text檔存檔呢?感謝各位,因老闆要我寫一個這樣的程式,請告知我^^
    2006年4月19日 上午 08:09

解答

  • 請用 Dir 函數或 Directory 下的集合物件來取得所有的檔案,並用迴圈來包裝。

    檔案處理時,可以直接整個檔案讀入,之後用

    strAllLine = Mid(strAllLine, InStr(strAllLine, vbNewLine) + Len(vbNewLine))

    再寫入檔案或是指定給  RichTextBox.Text

    2006年4月19日 下午 12:13
    版主

所有回覆

  • 程式是老闆要用還是你要用?如果是你未來要幫老闆用,你可以用SQL Server的DTS來轉換資料,可以省去寫程式的時間。
    2006年4月19日 上午 09:19
    版主
  • 謝謝您的回答,是user跟老闆他們用的,我想問說如何設定在c:|file的資料夾的*。csv轉到richtext box上呢
     Try
                ' Create an instance of StreamReader to read from a file.
    '請問這行要如何寫才會讀全部的("c:\file\*.csv")呢
                Dim sr As StreamReader = New StreamReader("c:\file\*.csv")
                Dim line As String
                ' Read and display the lines from the file until the end
                ' of the file is reached.
                Do
                    Dim i As Integer

                    i = i + 1
                    If i > 1 Then
                        line = sr.ReadLine()
                    line=richtextbox1.text
                    End If
                Loop Until line Is Nothing
                sr.Close()
            Catch E As Exception
                ' Let the user know what went wrong.
                Console.WriteLine("The file could not be read:")
                Console.WriteLine(E.Message)
            End Try
    2006年4月19日 上午 09:40
  • 請用 Dir 函數或 Directory 下的集合物件來取得所有的檔案,並用迴圈來包裝。

    檔案處理時,可以直接整個檔案讀入,之後用

    strAllLine = Mid(strAllLine, InStr(strAllLine, vbNewLine) + Len(vbNewLine))

    再寫入檔案或是指定給  RichTextBox.Text

    2006年4月19日 下午 12:13
    版主
  • 謝謝您,請教

    strAllLine = Mid(strAllLine, InStr(strAllLine, vbNewLine) + Len(vbNewLine))這一行的意義是什麼呢?

    2006年4月20日 上午 05:47
  • 這行是假定你已經將檔案讀取到 strAllLine 變數內。

    ex.

    a,b,c,d
    1,2,3,4
    5,6,7,8
    ...

    在兩行之間會有個換行符號,可以記做 vbNewLine ,找到第一個換行符號後,從下個字元開始保留,當然沒保留的就被去掉了。所以只會剩下:

    1,2,3,4
    5,6,7,8
    ...

    2006年4月20日 上午 06:28
    版主
  • 再次請教您,我使用後中文字不能show出來也,謝謝

    Dim sr As StreamReader = New streamReader

                Dim strAllLine As String
                strAllLine = sr.ReadToEnd

                strAllLine = Mid(strAllLine, InStr(strAllLine, vbNewLine) + Len(vbNewLine))
                i.Text = strAllLine

     

    2006年4月20日 上午 07:45
  • 請教這樣寫可行嗎?

    Dim path As String = "C:\練習用\bin\king"
            Dim path1 As String = "C:\練習用\bin\yang"
            If Directory.Exists(path) = False Or Directory.Exists(path1) = False Then

                ' Create the directory.
                Directory.CreateDirectory(path)
                Directory.CreateDirectory(path1)
            End If


            Dim MyFile
            MyFile = Dir("C:\練習用\bin\king\*.txt")

            Dim Sr23 As StreamReader

            Do While MyFile <> -1    ' Start the loop.

                Sr23 = New StreamReader(MyFile, System.Text.UnicodeEncoding.UTF8)

    *無法指定myfile也

                Dim strAllLine As String
                strAllLine = Sr23.ReadToEnd

                '在兩行之間會有個換行符號,可以記做 vbNewLine ,找到第一個換行符號後,從下個字元開始保留,當然沒保留的就被去掉了。所以只會剩下:
                strAllLine = Mid(strAllLine, InStr(strAllLine, vbNewLine) + Len(vbNewLine))
                i.Text = strAllLine


                Directory.Move("C:\練習用\bin\king\", "C:\練習用\bin\yang\")
                Sr23.Close()


            Loop

    2006年4月20日 上午 08:07
  • Dir 函數只會傳回檔名,不會傳回路徑名,所以使用上應該注意

    Ex.

    strPath = "C:\練習用\bin\yang\"
    strFind = "*.txt"

    strFile = Dir(strPath & strFind)

    Do Until Len(strFile) = 0
       MyFile = strPath & strFile ' 你用 Dir 函數,為何 MyFile 會等於 -1 ?   

       ' 將檔案一次讀入

       strFile = Dir()
    Loop

    將檔案一次讀入的範例可參考:

    http://tlcheng.no-ip.com/TLCheng/Net/NetList.aspx?Action=Function&Module=16&Function=95

    若是你的檔案並非 UTF-8 ,不應透過 Encoding 轉碼。標準的 CSV 格式只有 ASCII 。

    2006年4月20日 上午 08:39
    版主