Здравствуйте! Сразу говорю я в VBA - ноль. Необходимо массово заменить текст в файлах (VBA) (~800 файлов). Файл 1.txt. "Фирма", "ООО Рога и Копыта" на "Фирма","ООО ТРС" и т .д.
Как это можно сделать в VBA?
Спасибо
Здравствуйте! Сразу говорю я в VBA - ноль. Необходимо массово заменить текст в файлах (VBA) (~800 файлов). Файл 1.txt. "Фирма", "ООО Рога и Копыта" на "Фирма","ООО ТРС" и т .д.
Нужно смотреть как данные в файле выглядят. То как Вы написали, приводит к такому алгоритму: ищем ищем пару подстрок, заключенную в кавычки и разделенную запятой, заменяем её. Это если под Фирма понимается подстрока Фирма. Но что-то я не уверен. Потом, если файлы текстовые, то можно и утилиты использовать по пакетной замене текста. В принципе и макросами можно, но нужно определить откуда брать имена файлов. Например, есть список, или все файлы в одной папке и т.д.
Нужно смотреть как данные в файле выглядят. То как Вы написали, приводит к такому алгоритму: ищем ищем пару подстрок, заключенную в кавычки и разделенную запятой, заменяем её. Это если под Фирма понимается подстрока Фирма. Но что-то я не уверен. Потом, если файлы текстовые, то можно и утилиты использовать по пакетной замене текста. В принципе и макросами можно, но нужно определить откуда брать имена файлов. Например, есть список, или все файлы в одной папке и т.д.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Выкладыаю файл. Да все файлы в одной папке. Юдик да скачивал много разных программ + пробовал Notepad. Не получилось. Идёт обработка, но внутри ничего менялось. Заранее спасибо.
Выкладыаю файл. Да все файлы в одной папке. Юдик да скачивал много разных программ + пробовал Notepad. Не получилось. Идёт обработка, но внутри ничего менялось. Заранее спасибо.cobra77777
что значит другое название, откуда его брать? Оно одно для всех файлов или как? И вопрос с кодировкой файлов остается открытым. Я читабельный текст только с помощью Штирлица получил, но как это провернуть для кучи файлов не знаю. Так что первоочередной вопрос получение нормального текста в кодировке ANSI
что значит другое название, откуда его брать? Оно одно для всех файлов или как? И вопрос с кодировкой файлов остается открытым. Я читабельный текст только с помощью Штирлица получил, но как это провернуть для кучи файлов не знаю. Так что первоочередной вопрос получение нормального текста в кодировке ANSI Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
В дополнение: не знаю насколько "много программ вы пробовали", но я иногда для выполнения подобных задач использую Advanced Find and Replace. Вполне вменяемая утилита, если немного разобраться, тем более, с поддержкой RegEx.
В дополнение: не знаю насколько "много программ вы пробовали", но я иногда для выполнения подобных задач использую Advanced Find and Replace. Вполне вменяемая утилита, если немного разобраться, тем более, с поддержкой RegEx.AndreTM
Sub Мяу() Dim arr() As String, s As String, i As Integer Dim ss As String s = "C:\Users\OFIS\Documents\!!\00367304.173" With CreateObject("ADODB.Stream") .Type = 2 .Mode = 3 .Charset = "CP866" 'исходная кодировка .Open .LoadFromFile s ss = .ReadText arr = Split(ss, vbCrLf) For i = 0 To UBound(arr) arr(i) = arr(i) & " Мяу" Next i ss = Join(arr, vbCrLf) .Position = 0 .WriteText ss .SaveToFile "C:\Users\OFIS\Documents\!!\003673041.173", 2 .Close End With End Sub
Sub Мяу() Dim arr() As String, s As String, i As Integer Dim ss As String s = "C:\Users\OFIS\Documents\!!\00367304.173" With CreateObject("ADODB.Stream") .Type = 2 .Mode = 3 .Charset = "CP866" 'исходная кодировка .Open .LoadFromFile s ss = .ReadText arr = Split(ss, vbCrLf) For i = 0 To UBound(arr) arr(i) = arr(i) & " Мяу" Next i ss = Join(arr, vbCrLf) .Position = 0 .WriteText ss .SaveToFile "C:\Users\OFIS\Documents\!!\003673041.173", 2 .Close End With End Sub
Public Sub main() Dim sFolder As String, sFiles As String, str1$ Dim arr() As String, s As String, i As Integer Dim ss As String Dim RegExp Dim strKav As String, str2$, str3$ Dim arrStr
Set RegExp = CreateObject("VBScript.RegExp") With RegExp .Global = True 'Нужны все совпадения .IgnoreCase = True 'Регистр неважен .Pattern = strKav & "ООО.+?" & strKav End With 'диалог запроса выбора папки с файлами 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 sFiles = Dir(sFolder & "*.txt*") Do While sFiles <> ""
s = sFolder & sFiles Application.StatusBar = "Processing file: " & sFiles With CreateObject("ADODB.Stream") .Type = 2 .Mode = 3 .Charset = "CP866" 'исходная кодировка .Open .LoadFromFile s
ss = .ReadText arr = Split(ss, vbCrLf)
For i = 0 To UBound(arr) str1 = arr(i) str1 = RegExp.Replace(str1, str3) arrStr = Split(str1, ",") If UBound(arrStr) > 0 Then str1 = Replace(str1, arrStr(0), "", 1, 1) str1 = arrStr(0) & "," & str2 & str1 End If arr(i) = str1 Next i
ss = Join(arr, vbCrLf) .Position = 0 .WriteText ss .SaveToFile s, 2 .Close End With sFiles = Dir
Loop Application.ScreenUpdating = True
End Sub
[/vba]
Ну вот совместно с кодом RAN, [vba]
Код
Public Sub main() Dim sFolder As String, sFiles As String, str1$ Dim arr() As String, s As String, i As Integer Dim ss As String Dim RegExp Dim strKav As String, str2$, str3$ Dim arrStr
Set RegExp = CreateObject("VBScript.RegExp") With RegExp .Global = True 'Нужны все совпадения .IgnoreCase = True 'Регистр неважен .Pattern = strKav & "ООО.+?" & strKav End With 'диалог запроса выбора папки с файлами 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 sFiles = Dir(sFolder & "*.txt*") Do While sFiles <> ""
s = sFolder & sFiles Application.StatusBar = "Processing file: " & sFiles With CreateObject("ADODB.Stream") .Type = 2 .Mode = 3 .Charset = "CP866" 'исходная кодировка .Open .LoadFromFile s
ss = .ReadText arr = Split(ss, vbCrLf)
For i = 0 To UBound(arr) str1 = arr(i) str1 = RegExp.Replace(str1, str3) arrStr = Split(str1, ",") If UBound(arrStr) > 0 Then str1 = Replace(str1, arrStr(0), "", 1, 1) str1 = arrStr(0) & "," & str2 & str1 End If arr(i) = str1 Next i
ss = Join(arr, vbCrLf) .Position = 0 .WriteText ss .SaveToFile s, 2 .Close End With sFiles = Dir