已知有ini檔案abc.ini
檔案內容為:
[section1]
key1=value1
key2=value2
[section2]
key1=value1
key2=value2
求一個洗掉的代碼,運行之后達到如下效果:
[section1]
key2=value2
[section2]
key1=value1
key2=value2
求求各位大佬不要再單純寫個0&或者""了,我要洗掉key1=value1,不只是洗掉value1
另外我自己嘗試寫null,報錯94,無效使用null。
自己的部分代碼如下,黃色的是報錯的:
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal Appname As String, ByVal KeyName As Any, ByVal NewString As Any, ByVal Filename As String) As Integer
Public Sub writeini(Filename$, SectionName$, KeyName$, Str$)
HandleIo = WritePrivateProfileString(SectionName$, KeyName$, Str$, Filename$)
End Sub
Private Sub Form_Unload(cancel As Integer)
Dim StrPath$
Dim i As Integer
Dim num As Integer
StrPath = App.Path & "\configDB.ini"
num = Val(ReadIni(StrPath, "Number", "diagnose_num"))
If 當前項.ListCount < num Then
For i = 0 To 當前項.ListCount - 1
Call writeini(StrPath, "diagnose", "diagnose" & i, 當前項.List(i))
Next i
For i = 當前項.ListCount To num - 1
If 當前項.List(i) = "" Then
Call writeini(StrPath, "diagnose", "diagnose" & i, Null)
Else
Exit For
End If
Next i
Else
For i = 0 To 當前項.ListCount - 1
Call writeini(StrPath, "diagnose", "diagnose" & i, 當前項.List(i))
Next i
End If
cancel = 0
End Sub
求大神回復!!!
uj5u.com熱心網友回復:
ini讀寫有很多成熟的模塊。搜索一下遍地都是可以參考下面這個
https://blog.csdn.net/zgqtxwd/article/details/2355572
uj5u.com熱心網友回復:
超簡單的啊。比如這樣就可以洗掉 [section1]節 下的Key1了,跟你的“預期效果”一樣。
Private Sub Command1_Click()
Dim StrPath$
StrPath = App.Path & "\configDB.ini"
Call WritePrivateProfileString("section1", "key1", ByVal 0 , StrPath)
End Sub
要注意: StrPath 的值,必須跟你想操作的ini檔案路徑一致。
若“不成功”的話,你除錯運行時,最好設定斷點確認一下,或者先“寫死路徑”進行試驗。
在編譯成exe的代碼中,才使用app.path相對路徑。
uj5u.com熱心網友回復:
不行呀,報錯,型別不匹配。
uj5u.com熱心網友回復:
文章中的方法我試了,寫“”的話沒有原來的欄位沒有發生任何變化,寫0&的話所有鍵值都變成了0,達不到洗掉key1的效果啊
uj5u.com熱心網友回復:
API函式:WritePrivateProfileString ,第2個引數,型別應該宣告為 String ,不是Any 。
uj5u.com熱心網友回復:
我明天試試,宣告成“Any”,傳字串,會報錯?
uj5u.com熱心網友回復:
寫入時鍵值項值為空即可清除 ="" 不是 Nulluj5u.com熱心網友回復:
'讀取與寫入組態檔用到的 APIPublic Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFilename As String) As Long
Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFilename As String) As Long
Public Function INIRead(iAppName As String, iKeyName As String, iFileName As String) As String
On Error Resume Next
Dim iStr$
iStr = String(255, Chr(0))
INIRead = Left(iStr, GetPrivateProfileString(iAppName, ByVal iKeyName, "", iStr, Len(iStr), iFileName))
End Function
Public Function INIWrite(iAppName As String, iKeyName As String, iKeyString As String, iFileName As String)
On Error Resume Next
Call WritePrivateProfileString(iAppName, iKeyName, iKeyString, iFileName)
End Function
上面代碼放到 .bas 其它表單呼叫即可
uj5u.com熱心網友回復:
Public Declare Function WritePrivateProfileStringA Lib "kernel32" (ByVal lpApplicationName As String, ByVal lpKeyName As string, ByVal lpString As Any, ByVal lpFilename As String) As Longpublic sub Writeini(Section as string, KeyName as string, Value as string,FilePath as string)
' 洗掉一條KEY記錄用vbnullstring
call WritePrivateProfileStringA(Section,KeyName,vbnullstring,FilePath)
end sub
uj5u.com熱心網友回復:
其實有簡單直接的方法:把你的 .ini 檔案作為普通文本檔案以 Input 方式打開,再打開一個 Output 方式臨時檔案。
用 Line Input 陳述句逐行讀取 .ini 內容,寫到臨時檔案中。
當讀入的是 key1=value1 時,跳過不寫。
完成后,Close 這兩個檔案。
洗掉舊的 ini 檔案,將臨時檔案改為它的檔案名。
uj5u.com熱心網友回復:
我來回復(已測驗):Private Declare Function writeprivateprofilestring Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long
Private Sub Command1_Click()
writeprivateprofilestring "section1", "key1", vbNullString, "d:\1\abc.ini"
End Sub
uj5u.com熱心網友回復:
Function Geti(key As String, Optional FileName As String = "", Optional dd As String = "0") As String
On Error Resume Next
Dim fini As String
fini = FileName
If IsMissing(FileName) Then FileName = App.EXEName
If fini = "" Then fini = App.EXEName
If right(fini, 4) <> ".ini" Then fini = fini & ".ini"
If InStr(fini, ":") = 0 Then fini = appDir & fini
Geti = GetINI(App.EXEName, key, dd, fini)
End Function
Function Seti(key As String, Val As String, Optional FileName As String = "")
Dim fini As String
If IsMissing(FileName) Then FileName = App.EXEName
If FileName = "" Then FileName = App.EXEName
fini = FileName
If right(fini, 4) <> ".ini" Then fini = fini & ".ini"
If InStr(fini, ":") = 0 Then fini = appDir & fini
SaveINI App.EXEName, key, Val, fini
End Function
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/31848.html
標籤:API
上一篇:查課表的代碼
下一篇:VB能不能被反編譯得到全部代碼?
