Страницы: 1
RSS
Замена запятых на точки в большом количестве txt файлов
 
Здравствуйте! Столкнулся с такой проблемой. Имеется множество txt файлов(у каждого свое название) с данными. Как заменить стоящую в них запятую в качестве разделителя целой и дробной части на точку при помощи макроса? Ибо при открытии этих файлов при помощи макроса он воспринимает запятую как разделитель разрядов и число 18,456 превращается в 18456. Заранее благодарю за помощь!
 
Добрый день.
В  текстовом редакторе notepad++ есть возможность осуществить замену в файлах указанной папки. Можно и регулярки использовать, что бы не все точки менять, а тольк среди цифр.
 
Сергей Киселев, здравствуйте
Цитата
Сергей Киселев: при открытии этих файлов при помощи макроса он воспринимает запятую как разделитель разрядов
Открывайте (wb.OpenText) с другими разделителями
Изменено: Jack Famous - 20.09.2022 11:08:53
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Dim objFSO As Object, objFolder As Object, objFile As Object  Sub Get_All_File_from_SubFolders() Dim sFolder As String
With Application.FileDialog(msoFileDialogFolderPicker)
If .Show = False Then Exit Sub
sFolder = .SelectedItems(1)
End With
sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator) Application.ScreenUpdating = False
Set objFSO = CreateObject("Scripting.FileSystemObject") GetSubFolders sFolder
Set objFolder = Nothing
Set objFSO = Nothing
Application.ScreenUpdating = True
End Sub
Private Sub GetSubFolders(sPath)
Dim sPathSeparator As String, sObjName As String
Dim wb As Workbook
Set objFolder = objFSO.GetFolder(sPath)
For Each objFile In objFolder.Files
If Replace(objFile.Name, objFSO.GetBaseName(objFile), "") Like ".txt"Then  
Set wb = Application.Workbooks.Open(sPath & objFile.Name)
End If
Next For Each objFolder In objFolder.SubFolders GetSubFolders objFolder.Path & Application.PathSeparator Next
End Sub

Я понимаю, что нужно открывать с другими разделителями, но пока не могу понять, как применить это для нескольких файлов.
В своё время нашёл на просторах интернета такой код для открытия txt файлов в папках и подпапках. Нельзя ли его как нибудь доработать, чтобы запятые он при открытии воспринимал как разделители целой и дробной части?
 
Цитата
написал:
Имеется множество txt файлов(у каждого свое название) с данными
допустим. а где их искать?  
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
Sub ReplaceComma()
    Dim aFiles As Variant
    aFiles = ShowFileDialog()
    If IsEmpty(aFiles) Then Exit Sub
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim vFile As Variant
    For Each vFile In aFiles
        ReplaceCommaInFile vFile, fso
    Next
End Sub

Private Sub ReplaceCommaInFile(ByVal sFile As String, fso As Object)
    Dim ss As String
    With fso.OpenTextFile(sFile, 1)
        If Not .Atendofstream Then ss = .ReadAll
        .Close
    End With
    ss = Replace(ss, ",", ".")
    With fso.CreateTextFile(sFile, True)
        .Write ss
        .Close
    End With
End Sub

Private Function ShowFileDialog() As Variant
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        '.Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        .Filters.Add "Text files", "*.txt", 1 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path & "\"
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        Dim arr As Variant
        ReDim arr(1 To .SelectedItems.Count)
        For lf = 1 To .SelectedItems.Count
           arr(lf) = .SelectedItems(lf) 'считываем полный путь к файлу
        Next
        ShowFileDialog = arr
    End With
End Function

 
Код
Sub ReplaceComma()
    Dim aFiles As Variant
    aFiles = ShowFileDialog()
    If IsEmpty(aFiles) Then Exit Sub
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    Dim sBuff As String
    sBuff = ThisWorkbook.FullName & ".txt"
    
    Dim vFile As Variant
    For Each vFile In aFiles
        ReplaceCommaInFile vFile, fso, sBuff
    Next
End Sub

Private Sub ReplaceCommaInFile(ByVal sFile As String, fso As Object, sBuff As String)
    
    Dim ss As String
    Dim ts As Object
    Set ts = aaa.OpenTextFile(sFile, 1)
    Dim tb As Object
    Set tb = fso.CreateTextFile(sBuff, True)
    With ts
        Do
            If .Atendofstream Then Exit Do
            ss = .Read(100000)
            ss = Replace(ss, ",", ".")
            tb.Write ss
        Loop
        .Close
    End With
    tb.Close
    Kill sFile
    Name sBuff As sFile
End Sub

Private Function ShowFileDialog() As Variant
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
    'так же можно без oFD
    'With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = True
        .Title = "Выбрать файлы" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        '.Filters.Add "Excel files", "*.xls*;*.xla*", 1 'устанавливаем возможность выбора только файлов Excel
        .Filters.Add "Text files", "*.txt", 1 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path & "\"
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
        If .Show = 0 Then Exit Function 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        Dim arr As Variant
        ReDim arr(1 To .SelectedItems.Count)
        For lf = 1 To .SelectedItems.Count
           arr(lf) = .SelectedItems(lf) 'считываем полный путь к файлу
        Next
        ShowFileDialog = arr
    End With
End Function

Изменено: МатросНаЗебре - 21.09.2022 16:54:12 (Для больших файлов.)
Страницы: 1
Наверх