Board logo

標題: [發問] 用VBA操作txt檔案中(在特定位置輸入/輸出) [打印本頁]

作者: sasho    時間: 2010-7-22 15:58     標題: 用VBA操作txt檔案中(在特定位置輸入/輸出)

由於之前一直都把活頁簿當成資料庫來使用

但最近因為所需行數已經超出活頁簿的最大行數

所以想要把活頁簿當成資料庫的方式改成.txt檔

想請教板上各位前輩,要如何針對txt檔裡面的內容作操作呢?

舉例來說:

想將[attach]1930[/attach] 在最後一行加入其他資料變成[attach]1931[/attach]

但希望是能夠直接在第一個檔案轉成txt檔中操作(不再讀取到excel當中),

也就是要將記事本中的檔案由[attach]1932[/attach]變成[attach]1933[/attach]

可以請板上前輩指點一下嗎?謝謝
作者: kimbal    時間: 2010-7-22 22:12

改改第11行的檔名:
  1. Sub Read_text_File()

  2. Dim oFSO
  3. Set oFSO = CreateObject("Scripting.FileSystemObject")


  4. Dim itemCount As Long
  5. Dim lumSum As Long
  6. Dim filename As String

  7. filename = "c:\temp\readfile.txt"

  8. Set oFS = oFSO.OpenTextFile(filename)

  9. Do Until oFS.AtEndOfStream
  10. sText = oFS.ReadLine
  11. itemCount = UBound(Split(sText, ","))
  12. lumSum = lumSum + Int(Split(sText, ",")(itemCount))
  13. Loop
  14. oFS.Close

  15. Set oFS = oFSO.OpenTextFile(filename, 8, , 0)
  16. oFS.WriteLine
  17. oFS.Write String(itemCount, ",") & Trim(Str(lumSum))
  18. oFS.Close

  19. oFSO = Null
  20. End Sub
複製代碼

作者: luhpro    時間: 2010-7-22 22:21

本帖最後由 luhpro 於 2010-7-22 22:23 編輯

照看你的需求若使用 .txt 格式的文字檔來存取資料可能會有一些癥結點需要考慮進去.

1. 不適合單獨抓取某一行資料出來變更後再存入檔案.

因為 .txt 格式的文字檔案是一般所謂的循序檔,
亦即要讀取(或寫入)資料時需要 "從頭至尾" 讀取(或寫入). (PS. 每一次存取都要重複一次)
然而你的資料量很顯然的應該並不小,
那麼資料處理與讀寫的時間就不會少了,
而且頻繁的存取整個單一檔案,
硬碟可是比較容易出現壞軌的喔.

2. 那麼要使用.txt 格式的文字檔案較可行的方式,
就是程式開始時"從頭至尾"讀一次資料放在記憶體中,
修改時直接修改記憶體上的資料,
編輯作業結束前再一次"從頭至尾"將所有資料依序寫入檔案中.
須考慮的是資料要以何種形式放在記憶體上?
我想較可行的方式是使用鏈結串列.

3. 而若不堅持使用 .txt 文字檔案格式的話,
我會建議採用隨機檔,
亦即 "固定" 每一筆資料(Excel上的每一列 或 .txt 檔中的每一行)的大小,
然後每次編修時只讀取某一筆資料 -> 修改內容 -> 再存入該筆資料.

4. 還有一個方式是當資料筆數達到活頁簿最大容許量時再新增一個活頁簿來存放下一區塊的資料,
或是改存到另一個Excel檔內,
當然...處理與存取資料的公式會變的比較複雜.

5. 最後我可以想到的方式就是 花點錢改用 Access 來存放資料吧.
作者: sasho    時間: 2010-7-30 11:42

感謝 L大的建議

小弟目前使用第4個解決方案

後來想了一下,txt檔案的操作上真的相對困難

雖然我的需求只是用append將資料寫在最後面,然後再將他讀出來

所以寫入其實沒有太多問題,但一碰到要讀取就很麻煩了@@"

感謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)