台灣最具影響力的-資訊專家社群 - 讓您成為最有價值的IT專業人才
線上人數
2219
 
會員總數:229136
接案會員:6761
文章總數:2320
討論主題:175201
歡迎您免費加入會員
討論區列表 >> VB.NET >> 關於記事本(.txt)內容清除

[變換順序]
[我要回覆]
1


回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於記事本(.txt)內容清除
價值 : 50 QP  點閱數:3523 回應數:10

點圖分享到Plurk吧!
樓主

麥克
門外漢
0 2
74 4
發送站內信

請問各位前輩:

小弟我要將文字檔(.txt)的內容讀取並寫入資料庫
在讀取完畢後,希望刪掉文字檔中讀取過的資料

文字檔(.txt)內容如下:
9,9,9,9,9,9
8,8,8,8,8,8
7,7,7,7,7,7
6,6,6,6,6,6
5,5,5,5,5,5

讀取的部分我沒問題了(程式碼入下)




但是執行刪除的部分有個問題,
在 intRowsAffected = objCmd.ExecuteNonQuery 的地方
出現 「此 ISAM 不支援在連結資料表中刪除資料。」 的錯誤 (程式碼如下)



我只是將SQL的語法 由SELECT 改為DELET 就不行了
(類似的方式 SELECT and DELETE 我對SQL Server的資料表做 讀取+刪除 ,可以執行)


是VB.net不能支援文字檔(.txt)的刪除嗎?
請問有方法可以解決嗎?

本篇文章發表於2011-05-02 17:17
什麼是iT Power資訊報 2010年藍色小舖認證專家風雲榜完全名單
10樓
回應

史努比
檢舉此回應
1."其實我二個程式在已同一台電腦上,所以應該無法使用「 TCP或UDP 傳送訊息」"

同一台電腦一樣可以發送網路訊息給自己, 沒限制一定要二台以上的電腦才能發送TCP或UDP訊息

2. 您的作法我覺得可以再簡單一點, 反正VB.Net端是自己寫的, 為什麼不在資料寫入後把檔案刪除呢?


本篇文章回覆於2011-05-13 15:56
--未登入的會員無法查看對方簽名檔--
9樓
作者回應

麥克
檢舉此回應
我最後的解決方式為:

首先,文字檔的資料內容加上一組識別碼
LabVIEW送來的資料寫入文字檔,每次寫入都「完全覆蓋」先前的內容
VB.net每次讀取時,判別第一列資料的識別碼是否重覆

若識別碼不重複,則將文字檔內所有資料寫入資料庫
因此,必須控制LabVIEW每次送來的資料量,避免VB.net無法「一次搞定」


最後,還是感謝各位前輩的建議!!


本篇文章回覆於2011-05-13 15:46
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

麥克
檢舉此回應
To:
「史努比」
1.「能用文字檔傳送資料, 代表您的二個程式應該是在區域網路內」
其實我二個程式在已同一台電腦上,所以應該無法使用「 TCP或UDP 傳送訊息」
2.「再開一個同名新檔案放在原處」
這有點像我最後的做法,詳細說明我稍後回覆

「JoJo」
1.如果LabVIEW直接送到資料庫是最理想的,但我不確定LabVIEW可否做到(因為LabVIEW不是我寫的,對方是說他沒寫過資料庫,所以才用txt當緩衝轉到VB.net寫入)
2.「文字檔以日、時、分、秒區隔,以您覺得剛好的大小來運作」,這是否與「QQ的乖乖餃」提出的概念相同!?
3.「每筆數據為一個文字檔」,因為資料量龐大,無法採用此方法

謝謝各位大大的建議,
最後我已有解決的方案了(如下回覆)


本篇文章回覆於2011-05-13 15:35
--未登入的會員無法查看對方簽名檔--
7樓
不錯的參考

JoJo
檢舉此回應
1. LabVIEW直接把資料送到資料庫。
2. 文字檔以日、時、分、秒區隔,以您覺得剛好的大小來運作。
3. 每筆數據為一個文字檔,檔案命名原則為年月日+流水號,程式以某目錄下,依流水號檔名順序,檔案內容送到資料庫。
以上三種方式,參考試試...


本篇文章回覆於2011-05-06 10:45
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

史努比
檢舉此回應
1.放棄文字檔改用 TCP或UDP 傳送訊息吧,
反正已處理過的訊息您不想保留, 就直接用網路實作類似MSN的傳訊方式反而簡單,
能用文字檔傳送資料, 代表您的二個程式應該是在區域網路內, 可以省去很多網路斷線處理的程式碼

2.如果還是只想用文字檔, 那也不用想太多把檔案開啟來一行一行清掉要怎麼做之類的
把舊檔案直接刪掉或是改名後, 再開一個同名新檔案放在原處就可以了, 何必執著一定要用 "Delete From XXXX"
這樣的語法來刪除?





本篇文章回覆於2011-05-06 09:38
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

麥克
檢舉此回應
To:
「P陳」謝謝你提供,「文字檔是一個循序檔,是不能修改、刪除」的意見
「展翔研究室」感謝你的意見,你說的概念我大概懂,感覺可行。不過我還很蔡,詳細的指令我正在研究中...
「QQ的乖乖餃」也謝謝你的「處理文字檔比較好的方式是一口氣循序搞定他」

我實際的用途是為了接收來自另一個程式(LabView)的數據資料
初步規劃是該程式先把數據資料存成文字檔(.txt)
我再以VB.net不斷讀取,送到資料庫
且我們這2個程式要不斷的執行~~~(因為是監控設備的data)

但是會有資料重覆讀取與txt檔容量有限的問題...
所以才想刪除txt中讀過的資料

因此無法做到「一次搞定文字檔」

另外想請問,
實務上,我的情況是不是有更好的解決方式?


本篇文章回覆於2011-05-06 02:14
--未登入的會員無法查看對方簽名檔--
4樓
不錯的參考

QQ的乖乖餃
捐贈 VP 給 QQ的乖乖餃 檢舉此回應
處理文字檔比較好的方式是一口氣循序搞定他
這種使用類資料庫的寫法會很沒有效率

若是不方便一次處理完
那應該思考
"產生的時候就產生比較小的文字檔"
或是
"產生的時候就每隔N筆資料產生一個文字檔", N 為一個一次能處理完的合理數字

且若非用文字檔不可, 也可以盡量使每一筆資料的大小一樣
這樣方便使用隨機檔方式來處理, 速度可快很多


本篇文章回覆於2011-05-04 01:05
--未登入的會員無法查看對方簽名檔--
3樓
C# accessing memory map file
上一篇回文的方法只是將要刪的文字變為空白, 你可以再自行變通一下。

另一種方式是用memory map file方式, 將檔案內容讀入Memory, 做新增/修改/刪除後再寫回檔案。
可以看連結內提到的CodeProject article.


本篇文章回覆於2011-05-04 00:50
--未登入的會員無法查看對方簽名檔--
2樓
不錯的參考

展翔研究室
捐贈 VP 給 展翔研究室 檢舉此回應
比較有效率的方式是用隨機存取方式開啟文字檔(用FileStream class),然後用它的Seek()方法直接移到要刪除的文字列, 然後用空白來取代該列的每一個字元(用WriteByte()方法), 然後再FLUSH後再關檔。當然前提是你要預先知道要刪除的列在檔案中的所在偏移位置, 一個方法是可以建立一個B-Tree記錄每一列內容, 你要刪除某一列時先去查這一個B-Tree, 得知該列的偏移位置, 就可以用Seek方法快速查閱了。


本篇文章回覆於2011-05-04 00:42
--未登入的會員無法查看對方簽名檔--
1樓
最有價值解答

P陳
檢舉此回應
文字檔是一個循序檔,是不能修改、刪除的,(硬要修刪的話是再產生一個檔案,1.將資料讀入記憶體 2.資料刪修 3.刪除該檔案 4.再輸出文字檔)
所以您如要刪除全部的資料最簡單的辦法是 再產生一個空的文字檔即可


本篇文章回覆於2011-05-02 20:18
--未登入的會員無法查看對方簽名檔--
[變換順序]
1
 

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