Форум на Kuban.ru (http://forums.kuban.ru/)
-   Разработка программ (http://forums.kuban.ru/f1024/)
-   -   Access модуль объединения текстовиков (http://forums.kuban.ru/f1024/access_modul-_ob-edineniya_tekstovikov-2922950.html)

emenem97 09.08.2012 17:23

Access модуль объединения текстовиков
 
Добрый день.
Очень нужен модуль access который будет объединять текстовые файлы с предложенной папки (каждый раз разные названия и количества файлов). Стандартная функция объединения возможна только к привязаным файлам. Помогите пжл

NTFS_ 09.08.2012 19:23

Цена вопроса? Сейчас умеренно загружен, рублей за 700 нарисую. Разумный торг.

emenem97 09.08.2012 19:28

Готового нету? не очень хочется деньги платить :) Если у кого есть выложите пожалуйста в файлообменник или на почту

emenem97 09.08.2012 19:29

там делов на пол страницы всего, у меня есть такой же для экселевских файлов, но переделать говорят не получиться его

economist 10.08.2012 07:58

0) Это реально стоит больше 700 рублей, т.к. разные имена и кол-ва файлов требуют техзадания на полстраницы и его понимания. Если хочется повозиться самому, то:

1) можно скриптом (BAT/VBS/WSH/Python) переименовать разные файлы в "привязанные", а затем уже открывать Access (можно назначить скрипт в св-вах ярлыка)

2) Можно перепривязать TXT макросом VBA внутри Access, при открытии БД разные файлы - в "привязанные". При этом нужно отловить обновление связей, и запустить его уже после переименования.

PS Динамическая перелинковка таблиц - слабое место Access, я в MS писал об этом лет десять назад, ничего не поменялось...

4) Вот код на VBA/VB/VBS/WSH, который решает главную проблему TXT-свалки: рекурсию по всем (под)папкам и файлам:

' рекурсивный перебор файлов во всех подпапках корневой (c Thisworkbook) папки, с бесконечной вложенностью

Set FSO = CreateObject("Scripting.FileSystemObject")
Set RootFolder = FSO.GetFolder(ThisWorkbook.Path) ' установили Корн папку

'--------------------------------------------------
' Set FilesInRoot = RootFolder.Files ' считали файлы в кор папке и в цикле показали их

For Each FileInRoot In FilesInRoot
MsgBox FileInRoot.Name
Next

Set SubFolders = RootFolder.SubFolders ' считали подпапки
For Each Subfolder In SubFolders
Set FilesInSubfolders = Subfolder.Files ' считали файлы из подпапок

For Each FileInSubfolder In FilesInSubfolders
MsgBox FileInSubfolder.Name
Next
Next

economist 13.08.2012 15:46

# на питоне еще красивее
import os
def walk(dir):
for name in os.listdir(dir):
path = os.path.join(dir, name)
if os.path.isfile(path):
print path
else:
walk(path)
walk(path)

emenem97 15.08.2012 20:12

ребят тут делов на 4 строчки, я нашел уже как на другом форумею Делюсь ))
1 Public Sub UnionFile()
2 path1="E:\222\" ' место где лежат файлы тут же появится файл dest.txt
3 Call Shell("cmd /c copy """ & path1 & "*.txt"" """ & path1 & "dest.txt""")
4 End Sub

emenem97 15.08.2012 20:14

если не поймете могу скинуть готовую аксесину с готовым модулем и макросом вывода результата

economist 17.08.2012 08:08

В принципе да, только пример (6) не скопирует ПОДпапки с вложенными в них файлами txt, так что если такое понадобится - только рекурсия, как в примерах 4 и 5.

И потом, у многих на работе злые одминчеги могут запретить скрипты и вызов CMD в целях якобы безопасности. В таких случаях нужно популярно объяснить что они не правы.

emenem97 17.08.2012 17:03

economist у меня все прекрасно работает, объединение происходит быстро так же как и в тоталкоммандере или тктколлекторе :) на работе одминчики не лазят по личным наработкам программ это им запрещенно :)


Текущее время: 18:49. Часовой пояс GMT +3.