Visual Basic 删除算法不起作用
Visual Basic Delete Algorithm Doesn't work
这是对之前未回答的问题的复述。
我有一个记录和一个包含记录集合的文件。我想从该文件中删除一条记录。该算法应从文件中获取要删除的记录,将记录标记为删除,将记录重新保存到文件,然后将标记为删除的记录中的所有记录 APART 复制到成为主文件的新临时文件中。
出了什么问题:由于某种原因,算法仍然复制标记为删除的记录,除非没有正确的字段。它会将字段变为空白,但出于某种原因仍将其粘贴在新文件中。
我会单步执行代码,只看代码运行 有4条记录时FilePut
方法三次(显示4条记录中只有3条被复制到新的文件和一个如预期的那样被删除)但是当文件被加载到报告中时它仍然包含一个空白记录。这毫无意义,没有人能够解决我的问题!
Dim n As Integer = 1
Dim TempDir As String = CurDir() & "\Temp.dat"
RecordNumber = Trim(Val(Mid(lstResultReport.Text, 1, 3)))
FileGet(4, ResultRecord, RecordNumber)
ResultRecord.TournamentName = "DELETE"
FilePut(4, ResultRecord, RecordNumber)
FileClose(4)
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord))
FileOpen(5, TempDir, OpenMode.Random, , , Len(ResultRecord))
For n = 1 To LOF(4) / Len(ResultRecord)
FileGet(4, ResultRecord, n)
If Trim(ResultRecord.TournamentName) <> "DELETE" Then
FilePut(5, ResultRecord, n)
End If
Next
FileClose(4)
FileClose(5)
Kill(ResultsFilePath)
FileCopy(TempDir, ResultsFilePath)
Kill(TempDir)
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord))
UPDATE 有趣的是,当我删除文件中的最后一条记录时,该算法起作用了。
我的意思是:
dim newPosition as integer ' !!!
newPosition = 1 ' !!!
For n = 1 To LOF(4) / Len(ResultRecord)
FileGet(4, ResultRecord, n)
If Trim(ResultRecord.TournamentName) <> "DELETE" Then
FilePut(5, ResultRecord, newPostion)
newPostion = newPosition + 1 ' !!!
End If
Next
这是对之前未回答的问题的复述。
我有一个记录和一个包含记录集合的文件。我想从该文件中删除一条记录。该算法应从文件中获取要删除的记录,将记录标记为删除,将记录重新保存到文件,然后将标记为删除的记录中的所有记录 APART 复制到成为主文件的新临时文件中。
出了什么问题:由于某种原因,算法仍然复制标记为删除的记录,除非没有正确的字段。它会将字段变为空白,但出于某种原因仍将其粘贴在新文件中。
我会单步执行代码,只看代码运行 有4条记录时FilePut
方法三次(显示4条记录中只有3条被复制到新的文件和一个如预期的那样被删除)但是当文件被加载到报告中时它仍然包含一个空白记录。这毫无意义,没有人能够解决我的问题!
Dim n As Integer = 1
Dim TempDir As String = CurDir() & "\Temp.dat"
RecordNumber = Trim(Val(Mid(lstResultReport.Text, 1, 3)))
FileGet(4, ResultRecord, RecordNumber)
ResultRecord.TournamentName = "DELETE"
FilePut(4, ResultRecord, RecordNumber)
FileClose(4)
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord))
FileOpen(5, TempDir, OpenMode.Random, , , Len(ResultRecord))
For n = 1 To LOF(4) / Len(ResultRecord)
FileGet(4, ResultRecord, n)
If Trim(ResultRecord.TournamentName) <> "DELETE" Then
FilePut(5, ResultRecord, n)
End If
Next
FileClose(4)
FileClose(5)
Kill(ResultsFilePath)
FileCopy(TempDir, ResultsFilePath)
Kill(TempDir)
FileOpen(4, ResultsFilePath, OpenMode.Random, , , Len(ResultRecord))
UPDATE 有趣的是,当我删除文件中的最后一条记录时,该算法起作用了。
我的意思是:
dim newPosition as integer ' !!!
newPosition = 1 ' !!!
For n = 1 To LOF(4) / Len(ResultRecord)
FileGet(4, ResultRecord, n)
If Trim(ResultRecord.TournamentName) <> "DELETE" Then
FilePut(5, ResultRecord, newPostion)
newPostion = newPosition + 1 ' !!!
End If
Next