2009-10-19 5 views
0

Использование VB6Замените проблему с именем файла?

В папке Возникают н количество текстовых файлов, имена файлов, как abc.mis-.txt, def.fin @ .txt, поэтому я хочу, чтобы переименовать имена файлов, как abcmis.txt, deffin.txt. Я использовал функцию для переименования.

Код

Dim filename3 As String 
filename3 = Dir$(txtSourceDatabaseFile & "\*.txt", vbDirectory) 
Do While filename3 <> "" 

«Функция для переименования

Dim strInput As String 
Dim stroutput As String 
Dim strChar As String 
Dim intChar As Integer 
Dim intLoop As Integer 
strInput = filename3 
For intLoop = 1 To Len(strInput) 
strChar = Mid$(strInput, intLoop, 1) 
intChar = Asc(strChar) 
If ((intChar >= 48) And (intChar <= 57)) Or _ 
((intChar >= 65) And (intChar <= 90)) Or _ 
((intChar >= 97) And (intChar <= 122)) Or _ 
(intChar = 95) Then 
stroutput = stroutput & strChar 
End If 
Next 

Name txtSourceDatabaseFile & "\" & filename3 As txtSourceDatabaseFile & "\" & stroutput & ".txt" 


filename3 = Dir$ 
Loop 

Над Coding работает, проблема я использую в то время как Conditon, поэтому он будет переименовать все файлы .txt, Он давая имена нравится

Для примера.

The first time giving a fileaname as abc in "stroutput" 
The second time giving a filename as abcdef in "Stroutput" 
..., 

Он также добавляет предыдущее имя файла, потому что я получаю имя файла во время цикла.

Как изменить код.

ответ

1

Переместите функцию в функцию VB6, которая принимает имя файла в качестве аргумента и возвращает новый, например:

Private Function GetTextOnlyFileName(ByVal strOldName as String) As String 
    Dim strTemp As String 
    Dim strChar As String 
    Dim intChar As Integer 
    Dim intLoop As Integer 
    For intLoop = 1 To Len(strOldName) 
     strChar = Mid$(strOldName, intLoop, 1) 
     intChar = Asc(strChar) 
     If ((intChar >= 48) And (intChar <= 57)) Or _ 
      ((intChar >= 65) And (intChar <= 90)) Or _ 
      ((intChar >= 97) And (intChar <= 122)) Or _ 
      (intChar = 95) Then 
     strTemp = strTemp & strChar 
     End If 
    Next 
    GetTextOnlyFileName = strTemp 
End Function 

Затем использовать что-то вроде этого, чтобы это получить новое имя файла:

Do While filename3 <> "" 
    strNewName = GetTextOnlyFileName(strFileName3) 
    'next rename the file to strNewName 


    'get name of next file 
Loop 

Однако, что вы хотите, если два разных файла исходного файла дают тот же самый переименованный? Например, в настоящее время [email protected] и ab @ cd @ ef.txt вернут то же самое.

Ваш код в настоящее время добавляет имя файла к предыдущему, потому что вы повторно используете одни и те же переменные снова и снова в своем цикле, не очищая предыдущие значения. Моя функция будет работать, но вы можете просто добавить строку strOutPut = "" после строки strInput = filename3, и это тоже должно работать.

Смежные вопросы