台灣最大程式設計社群網站
線上人數
916
 
會員總數:242664
討論主題:187629
歡迎您免費加入會員
討論區列表 >> VB6 >> 關於檔案隨機存取模式
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於檔案隨機存取模式
價值 : 50 QP  點閱數:156 回應數:9

樓主

Jeffery
門外漢
0 5
104 13
發送站內信

各位好, 我想提問一個初學者(自學)問題, 因工作需求而得學VB.
關於檔案隨機存取, 我還是無法理解及用法(seek, get, put)
假設有一個txt檔, 內容如下:
12345
67890
abcde
fghij

總共四行, 以neter作為換行動作

如果今天我想要以隨機存取模式來處理, 例如: 從第二行(67890)讀取, 每讀一行就加入至ListBox
我該怎做, 傻傻搞不懂~

/*我是這樣寫, 結果竟會是給我空白, 完全不是我想的那樣


但還是錯誤, 不是說seek可用來指定位置嗎? 這樣到底出在哪裡? 另外為什須指定LEN, 如果未指定或數字太小, 編譯執行就馬上出現"Bad record length", 為何會說記錄長度不對?
另外寫入方式, 如想以該指定的行數作寫入, 一次寫一行的話, 又該如何做? 難道只要將get改為put就行嗎?

還請各位VB6的高手指導與告知...我在網路上找的資料都太過少, 甚至都沒解釋用法及完整作法...讓我實在是無法理解


以前我都是寫C#, C#簡單到不行, 我只要去指定seek就可以隨意處理讀取或修改...
現在以C#或C觀念去弄, 結果不行

搜尋相關Tags的文章: [ VB6 ] , [ 檔案隨機存取模式 ] ,
本篇文章發表於2018-03-23 10:21
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
最有價值解答

Ader Chen
檢舉此回應

如果不介意改用 FileSystemObject 的話, 供參考:

本篇文章回覆於2018-03-23 13:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

Jeffery
檢舉此回應
Ader Chen, 你好

你這方式, 我有看過類似的作法.
這比較像是物件檔案的作法, 也與我曾學過的C#超級像.
我也能理解這樣的實作方式, 雖然在針對每一種程式語言的世界裡, 只要弄懂一種做法既可.

感謝你提供的方法.

但目前所在的公司, 所使用的VB版本更舊, 絕非.NET, 因此才想搞懂我提的那種方式.
畢竟公司非軟體業, 又是在老舊公司廠, 系統也沒那麼先進, 我只能苦笑~
本篇文章回覆於2018-03-23 15:03
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

Ader Chen
檢舉此回應

為防誤會, 小提醒: 1樓的程式碼在 VB6 跑過的喔, (好像不用改也可以直接貼到 VB.NET)
我們公司也是必須使用 VB6 維護舊專案, 新的案子才會使用 .NET.

其他參考:
http://blog.xuite.net/hwtang/notes/23618734-VB%E8%AE%80%E5%8F%96%E6%96%87%E5%AD%97%E6%AA%94%E7%9A%84%E6%96%B9%E6%B3%95%28%E4%BD%BF%E7%94%A8FileSystemObject%29
本篇文章回覆於2018-03-23 15:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

Jeffery
檢舉此回應
有跑過, 只是非我想要的結果.
所以才會提問是為什麼~
本篇文章回覆於2018-03-23 17:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

Ader Chen
檢舉此回應
?
我用記事本開新的檔案, 輸入下列內容再存檔:
12345
67890
abcde
fghij

然後用1樓的程式讀取、加入 List1,正常啊.
你執行的情況有甚麼問題?
會不會是來源檔的換行字元不同?
第 9 行 Lines = Split(TS.ReadAll, vbCrLf)
其中的 vbCrLf 是一般 Windows 軟體常用的換行字元,
試試換成 vbCr 或 vbLf 看看.
Unix 系統可能是 vbLf
Mac 系統可能是 vbCr
本篇文章回覆於2018-03-23 18:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
作者回應

Jeffery
檢舉此回應
執行結果會變成 全空白, 甚至我不去定義len會導致錯誤
關於你所提供的filesystemobject方式是OK的, 我也了解你提供的寫法, 這滿像C# file物件作法.
所以我才會無法理解及它的用法出錯的原因是為什
本篇文章回覆於2018-03-26 08:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
回應

Ader Chen
檢舉此回應

Random 和 Seek、Get 通常用於二進位檔案,
若用於文字檔要自行計算紀錄長度、注意防止 Seek超出檔案長度、注意中文/英文byte長度不同...等問題, 很麻煩地.
參考:
http://www.office-cn.net/tw/access-function/150.html
本篇文章回覆於2018-03-26 09:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
回應

Ader Chen
檢舉此回應

文字檔不使用 Seek, 改用 Line Input 可省略計算 CrLf、中英文長度、防止超出檔案長度等問題:

本篇文章回覆於2018-03-26 09:18
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

Jeffery
檢舉此回應


看來只能這樣完了, 你說得很有理, 真的用那種方式很難玩又麻煩~
後來詢問其他同事, 他們說基本上根本不用這些語法, 反而最常用fileSystemObject方式~
而且也比較直觀, 用法又跟.Net或C#差異不大~
感謝您撥空跟我討論這些~
本篇文章回覆於2018-03-26 09:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.