史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   如何用VB寫讀CSV檔? (http://forum.slime.com.tw/thread155532.html)

sulein1122 2005-08-18 02:14 PM

如何用VB6.0寫讀CSV檔?
 
請問大大們,我手邊有一個CSV檔與一個commandbutton,按下CommandButton後出現一個開啟檔案的對話框(用來指定檔案路徑及檔案)後,將指定的csv檔資料讀進來,請問我該怎麼用VB實現呢@@?

劍痞憶秋年 2005-08-18 11:22 PM

Dim P As String
Dim III As Integer, JJJ As Integer
Dim JetTemp$
Dim AA$()

With CommonDialog1
.CancelError = True
.Flags = cdlOFNOverwritePrompt
.DialogTitle = "選擇儲存路徑及檔名"
.Filter = "Excel CSV File (*.csv)|*.csv"
.InitDir = "c:\"
.FileName = "Out" & ".CSV"
.ShowOpen
P = .FileName
End With

If Dir(P) = "" Then Exit Sub

III = FreeFile
Open P For Input As #III
Do While Not EOF(III)
Line Input #III, JetTemp$
AA() = Split(JetTemp, ",")
For JJJ = LBound(AA) To UBound(AA)
Debug.Print JJJ & "=" & AA(JJJ)
Next JJJ
Loop
Close #III

在迴圈中的 AA(JJJ) 即是 每一個櫚位值
試看看吧,再改成泥要的結果

sulein1122 2005-08-19 04:40 AM

謝謝大大解答..
最後實際上在run的時候,會變成循序讀檔在第一次的input時,就把所有的資料讀了進來,也就是所有csv資料都塞進去同一個變數之中,之後剩餘的參數都是空的 :dcft689kj

因此只好硬著頭便慢慢一步一步把資料給分解出來
dim point(1 To 256),sp
dim num,num1
.
.
Line Input #1, sp
.
For num = 1 To 256 '事先知道csv資料只有256筆
Do Until Mid(sp, num1, 1) = Chr(10) 'csv資料是以chr(10)隔開,若讀出資料不等於chr(10)則持續迴圈
point(num) = point(num) + Mid(sp, num1, 1)
'將SP內的資料由最左邊開始慢慢逐一取出並存進point(num)內
num1 = num1 + 1
Loop
num1 = num1 + 1
Next

最後run下來就可以把csv的資料慢慢分解回num(1 to 256)陣列之內

劍痞憶秋年 2005-08-19 12:16 PM

用 CHR(10) 做分格?!小弟以為 是用 "," 做分格

那要不要試試把偶那段程式碼的
AA() = Split(JetTemp, ",")
改成
AA() = Split(JetTemp, CHR(10))

再試試看


另外,泥那樣做也有點累

dim point() as string ==> 型別可視你的情況而定

那個迴圈可以試著改成
point() = Split(sp, CHR(10))

sulein1122 2005-08-19 02:17 PM

果然把AA() = Split(JetTemp, ",")改成AA() = Split(JetTemp, CHR(10))之後,讀檔就正常了^^
小弟學藝不精,竟然不知道還有Split()參數可以用,多花了不少時間把資料給解析出來 :dcft689kj
真是謝謝大大的指導 :ddrf567h:

劍痞憶秋年 2005-08-20 02:08 AM

引用:

作者: sulein1122
竟然不知道還有Split()參數可以用,多花了不少時間把資料給解析出來 :dcft689kj
真是謝謝大大的指導 :ddrf567h:

的確是如此啊,人生也是如此  :ddrf567h:
有時候當泥不知道一些好東西工具時,往往會多走很多冤枉路,還不一定會做好!!
做了半天效能還不如已經有的∼∼

split 以前偶也是不知道有這樣的東西,也是看人家用才慢慢學著用!!
還不錯用~~用的機會也是很多,像是解析參數啦、文字檔....!

指導不敢當,互相研究而己!! :bj375mg:

sulein1122 2005-08-22 12:25 PM

厚,差點沒被氣死(苦笑)
別人說我的程式跑起來有BUG,結果我去瞄了一下才發現..
程式去到別人那裡,再去讀CSV之後就掛掉..
原因是,人家的CSV竟然沒有分隔符號 :decfghi6:

吐吐苦水,後來就LINE INPUT到EOF(#FILE)直接讀,直接丟進陣列裡來用就行了 :dcft689kj

劍痞憶秋年 2005-08-22 03:04 PM

引用:

作者: sulein1122
厚,差點沒被氣死(苦笑)
別人說我的程式跑起來有BUG,結果我去瞄了一下才發現..
程式去到別人那裡,再去讀CSV之後就掛掉..
原因是,人家的CSV竟然沒有分隔符號 :decfghi6:

吐吐苦水,後來就LINE INPUT到EOF(#FILE)直接讀,直接丟進陣列裡來用就行了 :dcft689kj

是喔,沒分隔符號,(有沒有可能是不可視的字元)
真的沒分隔符號就真的沒辦法了∼∼(沒 分隔符號的 CSV ==> 那不就是亂七八糟的 Data)

不過這倒是劣者沒注意到的問題,所以再 SPLIT 之前最好先 用 INSTR 檢查一下字串中有沒有這個 SPLIT 函式的第二個參數(=分隔字元),再做 SPLIT ,不然會不知道怎麼回事∼∼ :dcft689kj

sulein1122 2005-08-22 03:19 PM

啊,我沒有說清楚..
早上驗證程式的時候,人家丟出來的雖然是同一個CVS檔
不過有趣的是,對方給我的是用CHR(10)作分隔,而自己的呢,卻是使用分行符號當資料的分隔
害我在那邊瞧了老半天,程式明明沒有問題..
後來再查去CVS才曉得這個烏龍..

害我一進門就被人理直氣壯的叫去DEBUG..真是讓人哭笑不得 :dcft689kj


所有時間均為台北時間。現在的時間是 04:28 AM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1