есть текстовые файлы (много) =) в которых есть строки типа lengh=1000 hi=500 и т.д.. (текст в файлах идёт строками) хотелось бы чтобы excel выбрал эти строки и к цифрам в них прибавил или вычел ну например 9
есть текстовые файлы (много) =) в которых есть строки типа lengh=1000 hi=500 и т.д.. (текст в файлах идёт строками) хотелось бы чтобы excel выбрал эти строки и к цифрам в них прибавил или вычел ну например 9saintus
Ну, Вы бы хоть один свой txt-файл (фрагмент) приложили и Excel-файл, в который нужно выводить данные. Или нам самим придумывать, как файлы называются, где лежат и куда Excel должен выбирать из них данные?
Ну, Вы бы хоть один свой txt-файл (фрагмент) приложили и Excel-файл, в который нужно выводить данные. Или нам самим придумывать, как файлы называются, где лежат и куда Excel должен выбирать из них данные?Alex_ST
так.. я неправильно изъяснился.. извиняюсь за столько некачественно поставленный вопрос..) не надо никуда выбирать данный, надо делать замену. так. вот к примеру файл 1.txt лежит да хоть на рабочем столе в нем текст
goodwin copr a=1500 d= c=5600 lengh=1000 hi=500
хотелось бы чтобы в нем изменилось только 2 параметра на +4 (именно на + или - т.е применялась формула) и получилось
goodwin copr a=1500 d= c=5600 lengh=1004 hi=504
вот и всё сохранилось в том же 1.txt либо я могу их объединить в один большоооой файл засунуть в лист excel но там тоже нужна процедура по поиску нужных строк и желательно применение формулы на цифры в данной строке.
так.. я неправильно изъяснился.. извиняюсь за столько некачественно поставленный вопрос..) не надо никуда выбирать данный, надо делать замену. так. вот к примеру файл 1.txt лежит да хоть на рабочем столе в нем текст
goodwin copr a=1500 d= c=5600 lengh=1000 hi=500
хотелось бы чтобы в нем изменилось только 2 параметра на +4 (именно на + или - т.е применялась формула) и получилось
goodwin copr a=1500 d= c=5600 lengh=1004 hi=504
вот и всё сохранилось в том же 1.txt либо я могу их объединить в один большоооой файл засунуть в лист excel но там тоже нужна процедура по поиску нужных строк и желательно применение формулы на цифры в данной строке.saintus
Set outFile = fso.CreateTextFile(MyPath & "2.txt")
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
outFile.Close
MsgBox "OK", vbInformation
[/vba] сохранить текст как название.vbs, положить на "хоть на рабочий стол", даблкликнуть. Создастся файл 2.txt - но это только для теста, можно в коде 2.txt заменить на 1.txt.
Ну тогда к примеру такой код VBS:
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") MyPath = Left(WScript.ScriptFullName, (Len(WScript.ScriptFullName)) - (Len(WScript.ScriptName)))
Set outFile = fso.CreateTextFile(MyPath & "2.txt")
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
outFile.Close
MsgBox "OK", vbInformation
[/vba] сохранить текст как название.vbs, положить на "хоть на рабочий стол", даблкликнуть. Создастся файл 2.txt - но это только для теста, можно в коде 2.txt заменить на 1.txt.Hugo
шикарно!!! а можно чтобы он когда все строки исходного файла посмотрел и заменил, исходный текстовый файл удалил, а путь и имя исходного текстового файла дал новому текстовому файлу. и чтобы он так делал с директориями а не с отдельными ткстшками))
а то я в этих самоучителях уже погряз, спасибо за нормальный код, есть на что посмотреть есть в чем разобраться!..
шикарно!!! а можно чтобы он когда все строки исходного файла посмотрел и заменил, исходный текстовый файл удалил, а путь и имя исходного текстового файла дал новому текстовому файлу. и чтобы он так делал с директориями а не с отдельными ткстшками))
а то я в этих самоучителях уже погряз, спасибо за нормальный код, есть на что посмотреть есть в чем разобраться!..saintus
Я ведь написал - можно в коде 2.txt заменить на 1.txt Будет писать в тот же файл, из которого взял данные. Но есть риск, что если в этот миг вырубится комп - всё пропадёт. Можно конечно прописать переименование файлов в конце кода - но лениво
Чтоб перебирать все файлы папки - это тоже несложно добавить.
Вот:
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("D:\TMP\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) arrstr = Split(ts.ReadAll, vbCrLf) ts.Close
Set outFile = fso.CreateTextFile(AFile.Path)
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
outFile.Close
End If Next
MsgBox "OK", vbInformation
[/vba]
Я ведь написал - можно в коде 2.txt заменить на 1.txt Будет писать в тот же файл, из которого взял данные. Но есть риск, что если в этот миг вырубится комп - всё пропадёт. Можно конечно прописать переименование файлов в конце кода - но лениво
Чтоб перебирать все файлы папки - это тоже несложно добавить.
Вот:
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("D:\TMP\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) arrstr = Split(ts.ReadAll, vbCrLf) ts.Close
Set outFile = fso.CreateTextFile(AFile.Path)
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
Hugo ты гений, мало того ты понял меня)) так ты ещё и решил мою проблему) эх конечно бы добавить несколько ограничение (типо если присутствует текст blub то ничего изменять ненадо) , но и так вообще отлично!!.. этот текст можно выбрать за ранее. огромное спасибо!
Hugo ты гений, мало того ты понял меня)) так ты ещё и решил мою проблему) эх конечно бы добавить несколько ограничение (типо если присутствует текст blub то ничего изменять ненадо) , но и так вообще отлично!!.. этот текст можно выбрать за ранее. огромное спасибо!saintus
Так добавляйте что угодно Например так - взяли данные в массив, закрыли файл. Перебрали массив, проверили на blub - если нашли, выход (exit for или Wscript.Quit - тут нужно помозговать...) Если не нашли - далее по схеме.
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("D:\TMP\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) arrstr = Split(ts.ReadAll, vbCrLf) ts.Close
flag = False
For i = 0 To UBound(arrstr) If InStr(arrstr(i), "blub") > 0 Then flag = True Exit For End If Next
If Not flag Then Set outFile = fso.CreateTextFile(AFile.Path)
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
outFile.Close End If End If Next
MsgBox "OK", vbInformation
[/vba]
Так добавляйте что угодно Например так - взяли данные в массив, закрыли файл. Перебрали массив, проверили на blub - если нашли, выход (exit for или Wscript.Quit - тут нужно помозговать...) Если не нашли - далее по схеме.
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("D:\TMP\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) arrstr = Split(ts.ReadAll, vbCrLf) ts.Close
flag = False
For i = 0 To UBound(arrstr) If InStr(arrstr(i), "blub") > 0 Then flag = True Exit For End If Next
If Not flag Then Set outFile = fso.CreateTextFile(AFile.Path)
For i = 0 To UBound(arrstr) If Len(arrstr(i)) Then If Left(arrstr(i), 6) = "lengh=" Then arrstr(i) = "lengh=" & --Mid(arrstr(i), 7) + 4 If Left(arrstr(i), 3) = "hi=" Then arrstr(i) = "hi=" & --Mid(arrstr(i), 4) + 4 End If outFile.WriteLine arrstr(i) Next
понятно.. а можно вот в это место "blub" записать такое сочетание blub blub1 blub2 и чтобы он понял что надо искать не 3 строки а именно такое расположение 3-х строк по порядку и с переносом)) что-то я увлекся..
понятно.. а можно вот в это место "blub" записать такое сочетание blub blub1 blub2 и чтобы он понял что надо искать не 3 строки а именно такое расположение 3-х строк по порядку и с переносом)) что-то я увлекся..saintus
да что-то совсем не то.. ладно ещё подумаю как можно было бы улучшить жизнь человечкам за пк..)) ещё раз спасибо, это все мои размышление основа решена и это главное..)
да что-то совсем не то.. ладно ещё подумаю как можно было бы улучшить жизнь человечкам за пк..)) ещё раз спасибо, это все мои размышление основа решена и это главное..)saintus
Ну в общем да, подход Вы поняли. Далее можно наращивать и ветвить Например выделяем операцию изменения файла в отдельную функцию (или даже можно в отдельный скрипт) с параметрами - что и как менять. Сперва анализируем файл, определяем что с ним делать, вызываем эту функцию (или не вызываем).
Ну в общем да, подход Вы поняли. Далее можно наращивать и ветвить Например выделяем операцию изменения файла в отдельную функцию (или даже можно в отдельный скрипт) с параметрами - что и как менять. Сперва анализируем файл, определяем что с ним делать, вызываем эту функцию (или не вызываем).Hugo
я посидел подумал.. и придумал..)) вот теперь буду реализовывать по мере возможности. замена есть надо добавить выборку, в выборке просто есть левая и правая сторона пример left blub blub2
right blub3 blub4
вот надо как нито отследить blub2 и на него установить одну замену а если left blub blub1
right blub3 blub2
то замена другая а если
left blub blub2
right blub3 blub2
то замена 3-я)) в общем если будут мысли я был бы просто в восторге и при много благодарен..) а пока изучаю возможности vbs то что понял из кода (за что отдельное спасибо Hugo!!) мало для того чтобы понять как это всё разделить и сделать выборку по массиву строк.
я посидел подумал.. и придумал..)) вот теперь буду реализовывать по мере возможности. замена есть надо добавить выборку, в выборке просто есть левая и правая сторона пример left blub blub2
right blub3 blub4
вот надо как нито отследить blub2 и на него установить одну замену а если left blub blub1
right blub3 blub2
то замена другая а если
left blub blub2
right blub3 blub2
то замена 3-я)) в общем если будут мысли я был бы просто в восторге и при много благодарен..) а пока изучаю возможности vbs то что понял из кода (за что отдельное спасибо Hugo!!) мало для того чтобы понять как это всё разделить и сделать выборку по массиву строк.saintus
Дайте пример пары разных файлов и как что нужно менять (в одном архиве), а то не вполне ясно (т.е. мысли есть, но возможно на практике всё иначе).
Ну а возможности примерно как у макросов - есть некоторые отличия и ограничения, но для простых задач возможностей хватает. Если не будет хватать - можно код перекинуть в макрос и работать из Экселя.
Дайте пример пары разных файлов и как что нужно менять (в одном архиве), а то не вполне ясно (т.е. мысли есть, но возможно на практике всё иначе).
Ну а возможности примерно как у макросов - есть некоторые отличия и ограничения, но для простых задач возможностей хватает. Если не будет хватать - можно код перекинуть в макрос и работать из Экселя.Hugo
в архиве 3-тхт на которые на которых надо применить действие написаное в название..) я код и так перекинул в макрос) по скольку работаю в своей форме и к ней подстроил ещё кнопочки под этот скрипт. Пока вот этот поиск наладил в ручном режиме.) И думаю. как автоматом сделать выборку.
в архиве 3-тхт на которые на которых надо применить действие написаное в название..) я код и так перекинул в макрос) по скольку работаю в своей форме и к ней подстроил ещё кнопочки под этот скрипт. Пока вот этот поиск наладил в ручном режиме.) И думаю. как автоматом сделать выборку.saintus
там в названиях файлов параметры какие надо прибавлять (ну или убавлять).. а анализировать blub2 который встречается как в left так в right и в обоих сразу.. т.е когда в left меняется 3 параметра на +4 (я вместо 4-ки поставил textbox поскольку скрипт засунул на форму в VBA экселя) поэтому это не суть важно на сколько) когда справа меняется только 2 параметра на +4.) а вот когда и там и там то должны менятся 2 параметра на +8 и один параметр на +4. вот такая схема.. ) я создал форму с 4-мя такими кнопками и создал 2 папки для сортировки)) вот всё свести бы к одной кнопке ) и одной папке)) а лучше чтоб ещё искал и в подпапках тоже было бы неплохо=) p.s как говорится аппетит приходит во время еды..
там в названиях файлов параметры какие надо прибавлять (ну или убавлять).. а анализировать blub2 который встречается как в left так в right и в обоих сразу.. т.е когда в left меняется 3 параметра на +4 (я вместо 4-ки поставил textbox поскольку скрипт засунул на форму в VBA экселя) поэтому это не суть важно на сколько) когда справа меняется только 2 параметра на +4.) а вот когда и там и там то должны менятся 2 параметра на +8 и один параметр на +4. вот такая схема.. ) я создал форму с 4-мя такими кнопками и создал 2 папки для сортировки)) вот всё свести бы к одной кнопке ) и одной папке)) а лучше чтоб ещё искал и в подпапках тоже было бы неплохо=) p.s как говорится аппетит приходит во время еды..saintus
Не вполне понял - blub не нужно анализировать? И что когда изменять? Но вот такая заготовка (начало прежнего кода, "хвост" отрезал)- путём анализа полученных 0/1/10/11 можно организовать ветвление. Или просто далее анализировать эти флаги по отдельности, как угодно.
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("c:\Temp\saintus\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) s = ts.ReadAll arrstr = Split(s, vbCrLf) ts.Close flag1 = 0 flag2 = 0
x = InStr(s, "LEFT_END") y = InStr(s, "END_OF_LEFT_END") xx = InStr(s, "RIGHT_END") yy = InStr(s, "END_OF_RIGHT_END")
If InStr(Mid(s, x, y - x), "blub2") > 0 Then flag1 = 1 If InStr(Mid(s, xx, yy - xx), "blub2") > 0 Then flag2 = 1
MsgBox AFile.Name & " - " & --(flag1 & flag2)
End If Next
MsgBox "OK", vbInformation
[/vba]
Не вполне понял - blub не нужно анализировать? И что когда изменять? Но вот такая заготовка (начало прежнего кода, "хвост" отрезал)- путём анализа полученных 0/1/10/11 можно организовать ветвление. Или просто далее анализировать эти флаги по отдельности, как угодно.
[vba]
Code
Set fso = CreateObject("Scripting.FileSystemObject") Set TheFolder = fso.GetFolder("c:\Temp\saintus\") Set TheFiles = TheFolder.Files
For Each AFile In TheFiles If UCase(fso.GetExtensionName(AFile.Path)) = "TXT" Then Set ts = fso.OpenTextFile(AFile.Path, 1) s = ts.ReadAll arrstr = Split(s, vbCrLf) ts.Close flag1 = 0 flag2 = 0
x = InStr(s, "LEFT_END") y = InStr(s, "END_OF_LEFT_END") xx = InStr(s, "RIGHT_END") yy = InStr(s, "END_OF_RIGHT_END")
If InStr(Mid(s, x, y - x), "blub2") > 0 Then flag1 = 1 If InStr(Mid(s, xx, yy - xx), "blub2") > 0 Then flag2 = 1