史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2005-08-18, 02:14 PM   #1
sulein1122
註冊會員
 
sulein1122 的頭像
榮譽勳章
UID - 43104
在線等級: 級別:12 | 在線時長:206小時 | 升級還需:15小時級別:12 | 在線時長:206小時 | 升級還需:15小時
註冊日期: 2003-02-27
VIP期限: 2010-07
住址: 桃源吉第
文章: 136
精華: 0
現金: 0 金幣
資產: 17574881 金幣
預設 如何用VB6.0寫讀CSV檔?

請問大大們,我手邊有一個CSV檔與一個commandbutton,按下CommandButton後出現一個開啟檔案的對話框(用來指定檔案路徑及檔案)後,將指定的csv檔資料讀進來,請問我該怎麼用VB實現呢@@?
sulein1122 目前離線  
送花文章: 0, 收花文章: 11 篇, 收花: 16 次
回覆時引用此帖
舊 2005-08-18, 11:22 PM   #2 (permalink)
長老會員
 
劍痞憶秋年 的頭像
榮譽勳章
UID - 15
在線等級: 級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時
註冊日期: 2002-12-06
住址: 步雲崖
文章: 280
精華: 0
現金: 15847 金幣
資產: 20867 金幣
預設

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) 即是 每一個櫚位值
試看看吧,再改成泥要的結果
__________________
一切有為法 如夢幻泡影
如露亦如電 應作如是觀
劍痞憶秋年 目前離線  
送花文章: 150, 收花文章: 33 篇, 收花: 130 次
回覆時引用此帖
舊 2005-08-19, 04:40 AM   #3 (permalink)
註冊會員
 
sulein1122 的頭像
榮譽勳章
UID - 43104
在線等級: 級別:12 | 在線時長:206小時 | 升級還需:15小時級別:12 | 在線時長:206小時 | 升級還需:15小時
註冊日期: 2003-02-27
VIP期限: 2010-07
住址: 桃源吉第
文章: 136
精華: 0
現金: 0 金幣
資產: 17574881 金幣
預設

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

因此只好硬著頭便慢慢一步一步把資料給分解出來
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)陣列之內
sulein1122 目前離線  
送花文章: 0, 收花文章: 11 篇, 收花: 16 次
回覆時引用此帖
舊 2005-08-19, 12:16 PM   #4 (permalink)
長老會員
 
劍痞憶秋年 的頭像
榮譽勳章
UID - 15
在線等級: 級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時
註冊日期: 2002-12-06
住址: 步雲崖
文章: 280
精華: 0
現金: 15847 金幣
資產: 20867 金幣
預設

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

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

再試試看


另外,泥那樣做也有點累

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

那個迴圈可以試著改成
point() = Split(sp, CHR(10))
劍痞憶秋年 目前離線  
送花文章: 150, 收花文章: 33 篇, 收花: 130 次
回覆時引用此帖
舊 2005-08-19, 02:17 PM   #5 (permalink)
註冊會員
 
sulein1122 的頭像
榮譽勳章
UID - 43104
在線等級: 級別:12 | 在線時長:206小時 | 升級還需:15小時級別:12 | 在線時長:206小時 | 升級還需:15小時
註冊日期: 2003-02-27
VIP期限: 2010-07
住址: 桃源吉第
文章: 136
精華: 0
現金: 0 金幣
資產: 17574881 金幣
預設

果然把AA() = Split(JetTemp, ",")改成AA() = Split(JetTemp, CHR(10))之後,讀檔就正常了^^
小弟學藝不精,竟然不知道還有Split()參數可以用,多花了不少時間把資料給解析出來
真是謝謝大大的指導
sulein1122 目前離線  
送花文章: 0, 收花文章: 11 篇, 收花: 16 次
回覆時引用此帖
舊 2005-08-20, 02:08 AM   #6 (permalink)
長老會員
 
劍痞憶秋年 的頭像
榮譽勳章
UID - 15
在線等級: 級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時
註冊日期: 2002-12-06
住址: 步雲崖
文章: 280
精華: 0
現金: 15847 金幣
資產: 20867 金幣
預設

引用:
作者: sulein1122
竟然不知道還有Split()參數可以用,多花了不少時間把資料給解析出來
真是謝謝大大的指導
的確是如此啊,人生也是如此 
有時候當泥不知道一些好東西工具時,往往會多走很多冤枉路,還不一定會做好!!
做了半天效能還不如已經有的∼∼

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

指導不敢當,互相研究而己!!
劍痞憶秋年 目前離線  
送花文章: 150, 收花文章: 33 篇, 收花: 130 次
回覆時引用此帖
舊 2005-08-22, 12:25 PM   #7 (permalink)
註冊會員
 
sulein1122 的頭像
榮譽勳章
UID - 43104
在線等級: 級別:12 | 在線時長:206小時 | 升級還需:15小時級別:12 | 在線時長:206小時 | 升級還需:15小時
註冊日期: 2003-02-27
VIP期限: 2010-07
住址: 桃源吉第
文章: 136
精華: 0
現金: 0 金幣
資產: 17574881 金幣
預設

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

吐吐苦水,後來就LINE INPUT到EOF(#FILE)直接讀,直接丟進陣列裡來用就行了
sulein1122 目前離線  
送花文章: 0, 收花文章: 11 篇, 收花: 16 次
回覆時引用此帖
舊 2005-08-22, 03:04 PM   #8 (permalink)
長老會員
 
劍痞憶秋年 的頭像
榮譽勳章
UID - 15
在線等級: 級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時級別:31 | 在線時長:1096小時 | 升級還需:56小時
註冊日期: 2002-12-06
住址: 步雲崖
文章: 280
精華: 0
現金: 15847 金幣
資產: 20867 金幣
預設

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

吐吐苦水,後來就LINE INPUT到EOF(#FILE)直接讀,直接丟進陣列裡來用就行了
是喔,沒分隔符號,(有沒有可能是不可視的字元)
真的沒分隔符號就真的沒辦法了∼∼(沒 分隔符號的 CSV ==> 那不就是亂七八糟的 Data)

不過這倒是劣者沒注意到的問題,所以再 SPLIT 之前最好先 用 INSTR 檢查一下字串中有沒有這個 SPLIT 函式的第二個參數(=分隔字元),再做 SPLIT ,不然會不知道怎麼回事∼∼
劍痞憶秋年 目前離線  
送花文章: 150, 收花文章: 33 篇, 收花: 130 次
回覆時引用此帖
舊 2005-08-22, 03:19 PM   #9 (permalink)
註冊會員
 
sulein1122 的頭像
榮譽勳章
UID - 43104
在線等級: 級別:12 | 在線時長:206小時 | 升級還需:15小時級別:12 | 在線時長:206小時 | 升級還需:15小時
註冊日期: 2003-02-27
VIP期限: 2010-07
住址: 桃源吉第
文章: 136
精華: 0
現金: 0 金幣
資產: 17574881 金幣
預設

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

害我一進門就被人理直氣壯的叫去DEBUG..真是讓人哭笑不得
sulein1122 目前離線  
送花文章: 0, 收花文章: 11 篇, 收花: 16 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為台北時間。現在的時間是 06:45 AM


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


SEO by vBSEO 3.6.1