VB寫入txt檔的文件格式?

Home Home
引用 | 編輯 benzgigi
2008-03-07 02:44
樓主
推文 x0
請問各位大大~
小弟將text1.text 和 text2.text寫到txt中,
由於text1和text2的字數是會變動的,

打開文件檔會發現格式變成
123; 456;
32123; 78910;

但是我希望打開文件檔的 ..

訪客只能看到部份內容,免費 加入會員



獻花 x0
引用 | 編輯 Freelife
2008-03-07 08:26
1樓
  
設定統一的字串長度,如果長度是5~
寫檔的時候,長度不足5的,就補空白~
這樣應該可以了~

獻花 x0
引用 | 編輯 benzgigi
2008-03-07 12:54
2樓
  
下面是引用Freelife於2008-03-07 08:26發表的 :
設定統一的字串長度,如果長度是5~
寫檔的時候,長度不足5的,就補空白~
這樣應該可以了~

我也有這樣想~
但是我寫max=10
結果沒有效果~
是要寫在text_change
還是要寫在cmd_click
還是不能單獨寫max=10
謝謝~

Private Sub sure_Click()
Open "\xxx\test.txt" For Append As #1
MaxLengh = 10 '不知道是不是這樣用
Str1 = Text2.Text + ";" + Text1.Text + ";"
Print #1, Str1
Close #1
End Sub

獻花 x0
引用 | 編輯 overing
2008-03-09 15:07
3樓
  
...你好像有點搞錯了 表情

Private Sub sure_Click()
  Open "\xxx\test.txt" For Append As #1
    MaxLengh = 10 '不知道是不是這樣用 <-只寫這行根本就沒有"使用它"當然沒用
    Str1 = Text2.Text + Space(MaxLengh - Len(Text2.Text)) + ";" + _
          Text1.Text + Space(MaxLengh - Len(Text1.Text)) + ";"
    Print #1, Str1
  Close #1
End Sub

"_" :將敘述延伸到下一行
Space(N) 函數 :填充N個空白字元
Len(Str) 函數 :計算Str字串的長度(字元數)

這樣應該就能達到你要的了...
讀的時候記得用字串變數接收 然後以";"為依據

加油~~ 表情

獻花 x1
引用 | 編輯 benzgigi
2008-03-09 16:32
4樓
  
我照你說的方式真的可以做出來了~
定義text1和text2的最大長度就可以分別+上space
不過後來發現中文字被當成一個字元~
我是用*2的方式讓中文字被當成兩個字元來算,
所以格式上在中文就可以變整齊了~
但是英文本來就是一個字元,*2之後格式又會變成怪怪的~
只能用全形英文....
我覺得應該用定義中文字為兩個字元,英文字為一個字元的方式~
但是卻不知道該怎麼定義~
麻煩大大指導~
謝謝大大


Private Sub sure_Click()
Open "\xxx\test.txt" For Append As #1
  MaxLengh = 10 '不知道是不是這樣用 <-只寫這行根本就沒有"使用它"當然沒用
  Str1 = Text2.Text + Space(MaxLengh - Len(Text2.Text)) + ";" + _
      Text1.Text + Space(MaxLengh - Len(Text1.Text)) + ";"
  Print #1, Str1
Close #1
End Sub


另外test.txt本身裡面有個;
當我print #1,str1的時候
文件內容會變成
;
123   ;456   ;

我希望變成寫入456 789的時候,
格式為
123   ;456   ;
456   ;789   ;
;

再寫入下一比新資料時,888 999的時候
格式為
123   ;456   ;
456   ;789   ;
888   ;999   ;
;

不知道應該是print要改,還是Open "\xxx\test.txt" For Append As #1 紅字部分要改~
謝謝大大指導~真的很感謝!!

獻花 x0
引用 | 編輯 overing
2008-03-10 07:44
5樓
  
中文字的話可以把 Len(字串) 改成用 LenB(字串)
這樣他傳回的數字就是以位元組計算的...

Print Len("Abc") '印出3
Print Len("Abc") '印出3

Print LenB("Abc") '印出3
Print LenB("Abc") '印出6

Print LenB("中文字Abc") '印出9
(三個中文字跟三個半型英文字 2 x 3 + 1 x 3 = 9)

這樣~~試試看 表情

至於另一個問題的話
如果你的總資料量不大
可以試著在要寫入新增的資料之前
先把檔案中所有的資料讀進來
然後跟你要新增的資料做整理
整理好了一起輸出覆蓋掉原檔案

獻花 x1
引用 | 編輯 benzgigi
2008-03-11 00:16
6樓
  
LenB果然是解決了我的問題~
後來翻書的時候~
意外的也看到了這函數的介紹~

不過第二個問題還是想不出來怎麼寫~
open txt是把文件檔打開,
那該如何把文件檔裡面的資料先讀到暫存?
如果檔案越來越大~
讀暫存和寫入資料的速度和時間就會變多了吧?
那如果這樣的方法對舊PC來說會不會等下系統負荷當機了@@
還是有語法是可以開啟txt先執行上一行文字的動作,
例如我每次把資料寫進去
123 ;456 ;
321 ;654 ;
;

下次就可以先刪除 ;
再繼續寫
123 ;456 ;
321 ;654 ;
888 ;999 ;
;

不知道這樣的邏輯是否可以有方法寫出來~

謝謝大大的解惑~

Open "\xxx\test.txt" For Append As #1
Text1.MaxLength = 8
Text2.MaxLength = 20
If Text1.MaxLength - LenB(Text1.Text) > 8 Then
Str1 = Text2.Text + Space(Text2.MaxLength - LenB(Text2.Text)) + ";" + _
Text1.Text + Space(Text1.MaxLength - Len(Text1.Text)) + ";"
Print #1, Str1
Close #1
Else
  MsgBox "字串過長...."
  Close #1
End If
End Sub

我目前是這樣寫~
但是我覺得我的IF都沒有作用~
不管我text1得字串換算是不是>8
他都會跳message
然到 if 後面不能那樣寫嗎??
謝謝~

獻花 x0
引用 | 編輯 overing
2008-03-11 08:24
7樓
  
蠻納悶為什麼最後要多留一個 ";"
既然這份檔案是只有你的程式在讀取的話
那麼應該做好格式管理
讓程式能方便進行讀取

複製程式
Open fileName For 'mode' As #name

mode 就我知道的有三種 Input / Output / Append
Input 將檔案內容讀入
Output 將檔案複寫
Append 附加至檔尾

三種的使用範例與詳細差異可以參考這個網站的教學
http://vb.ncis.com.tw/
左邊[入門群組]底下的[VB6/VBA新手教學]項目

可以再寫入檔案或是程式執行前
先利用 Input 模式將檔案內容讀入
複製程式
Dim buffer() As String
Static i As Integer
Open fileName For Input As #1
    Do While EOF(1)
        i = i + 1
        ReDim Preserve buffer(i)
        Input #1, buffer(i) '視情況適當的切割內容
    Loop
Close #1
然後檢查檔案內容格式是否為你所要的
是的話輸出的時候就可以用 Append 模式直接將你的新資料附加在檔尾
如果不是, 則將資料整理成你要個格式後用 Output 模式連同你的新資料
一起輸出覆蓋掉原來的檔案

限制字串長度的部分...
複製程式
If Text1.MaxLength - LenB(Text1.Text) > 8 Then
邏輯不太對...請再想一下看看 (大小於?)表情

TextBox 的 MaxLength 屬性是用來在程式執行期間限制使用者 KeyIn 到 TextBox 當中的長度
只是判斷方式類似 Len() 所以可能不能符合你需求
所以你應該自己宣告個變數(或常數)放你要求的長度然後把 If 改寫成
複製程式
If LenB(Text1.Text) < '你宣告的變數' Then
    '寫檔
Else
    '顯示長度超過的警告
End If


獻花 x1
引用 | 編輯 三仙
2008-03-21 03:58
8樓
  
OVERING 大大實在太厲害了
對問題的解惑也很熱心 表情

獻花 x0
引用 | 編輯 overing
2008-03-21 10:36
9樓
  
唉牙~別這麼說嘛~
版上大大也是很多的
只是他們比較忙
再說這是分享的快樂阿~

獻花 x0