Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2009, 15:23   #1
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию Мониторинг текстового файла

Имеется файлик в который выводится инфа в представленном формате. Можно как то в excel-е мониторить появление новой строчки, т.е. как появилась новая строка, так сразу она выводится в файл Excel? Или хотя бы проверять появление строки с переодичностью 10-20 секунд.
Александр.
Вложения
Тип файла: rar Alex[].rar (203 байт, 21 просмотров)
zander вне форума Ответить с цитированием
Старый 13.02.2009, 15:35   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Отслеживать изменения файла совсем несложно.
Достаточно через какое-то время (скажем, раз в секунду) считывать размер файла, и, если он изменился с момента последней проверки, то добавлять на лист Excel недостающие строки (или проще полностью заново считывать из него всю информацию).

Вот только зачем всё это? Не проще ли производить обработку файла по нажатию некой кнопки?

У Вас Excel запущен постоянно?
Вы в нём работаете с другими файлами, или будете только наблюдать за автоматически обновляемым файлом?
EducatedFool вне форума Ответить с цитированием
Старый 13.02.2009, 15:38   #3
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Задача следить за появлением новой строчки в текстовом файле. В случае ее появления запускать определенноый макрос на исполнение. Важно что бы между моментом появления новой строки и запуском макроса было как можно меньше задержки.. Кстати запуск макроса по факту увеличения размера файла вполне приемлемый вариант.

PS/ Excel запущен постоянно.

Последний раз редактировалось zander; 13.02.2009 в 15:41.
zander вне форума Ответить с цитированием
Старый 13.02.2009, 15:46   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Можно попробовать после чтения данных из текстового файла полностью удалять всё его содержимое (или вообще удалять файл) - программа, этот файл формирующая, создаст его по-новой...

Выберите один из вариантов, и укажите, куда должен передавать данные макрос, отслеживающий изменения файла (допустим, макрос обнаружил изменения в файле, считал новые строки, и передал их в качестве параметра другому макросу, который уже и будет производить их обработку)

Цитата:
Вариант
Макрос обнаружил изменения в файле ...
Так можно удалять файл после обработки?
Или стирать его содержимое?

Цитата:
при очередном появлении строки вывел новую строку на тот же лист ниже и т.д.
Так а зачем тогда искать новые строки?
Раз в секунду (или по событию изменения файла) выводить весь файл на лист, начиная с первой строки листа Excel.
Результат-то будет тот же...

Последний раз редактировалось EducatedFool; 13.02.2009 в 16:12.
EducatedFool вне форума Ответить с цитированием
Старый 13.02.2009, 15:58   #5
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Содержимое стирать можно (выводящая система перепишет), файл стирать нельзя, выводящая система создаст файл с другим названием
Новые строки хотелось бы искать для дальнейшей (возможной ) реализации проекта в настоящий момент достаточно просто переписывать весь файл по событию в из текстового в excel (изменение текстового файла отслеживать желтельно именно по событию, а не по расписанию иначе возможен конфликт при совместном обращении и как следствие создание друго текстового файла).

Последний раз редактировалось zander; 13.02.2009 в 17:39.
zander вне форума Ответить с цитированием
Старый 13.02.2009, 20:00   #6
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Ну хоть подскажите какая функция умеет следить за размером текстового файла? А там мож я сам справлюсь...
zander вне форума Ответить с цитированием
Старый 13.02.2009, 20:04   #7
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от zander Посмотреть сообщение
Содержимое стирать можно (выводящая система перепишет), файл стирать нельзя, выводящая система создаст файл с другим названием
Ну и забей на смену имени. путь где создавать файл исходной программе можно задать? Если да, то все просто элементарно. Создаем каталог где будут формироваться файлы/в экселе следим за эти каталогом/как только там появились файлы обрабатываем их/стираем файлы/ждем появления новых файлов.
Подобная система позволит даже отличать файлы по расширениям (или иным признакам) и проводить для них различную обработку. Имеются следующие требования:
1. Читается каталог директории в переменную/файл и т.п. и ведем обработку только тех файлов которые есть в данном списке.
2. Удаляем файлы исключительно по имени и по одному по ходу обработки.
3. При начале работы с файлов, следует защитить его от изменений. Не знаю делает лит это ексель самостоятельно. Для того что бы исходная программа в случае появления новых данных в процессе обработки файла, создавала новый файл, а не дописывала в старый. Если это не возможно, следует перемещать обрабатываемый файл во временную директорию.
4. На время обработки считаного каталога директории, запретить слежение за директорией.

Подобная схема работ с успехом применяется в Fido Net уже более 20 лет.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 13.02.2009, 20:26   #8
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Хотелось бы конечно следить за изменением конкретного файла... Но впринципе пока можно сделать и так. При появлении файла в директории запускать макрос, а файл стирать и ждать появление нового.... Вопрос только как за появлением следить из Excel? И желательно по появлению вайла в директории, а не по временному циклу.
zander вне форума Ответить с цитированием
Старый 13.02.2009, 20:54   #9
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от zander Посмотреть сообщение
Вопрос только как за появлением следить из Excel? И желательно по появлению вайла в директории, а не по временному циклу.
Это поможет?
--------------------------------------------------------------------------------
Как определить наличие файла средствами FSO ? 18.07.2007

Ответ:
iFileName = "C:\Archive\Report.xls"

Код:
With CreateObject("Scripting.FileSystemObject") 
     If .FileExists(iFileName) = True Then 
        MsgBox "Файл : " & .GetFileName(iFileName) & " найден", , "" 
     Else 
        MsgBox "Файл : " & .GetFileName(iFileName) & " не найден", , "" 
     End If 
End With
Комментарий : Подобный способ определения существования файла имеет смысл, если Вы собираетесь использовать и другие возможности FSO, в противном случае, лучше обойтись встроенными средствами, например, функцией Dir() [FAQ]
--------------------------------------------------------------------------------

и вот по это ссылке есть много вкусного по текущему вопросу:
http://www.msoffice.nm.ru/faq/macros/wsh.htm#faq319
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 13.02.2009, 21:01   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:
Код:
Const ИмяФайла = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ.txt"
Dim РазмерФайла As Long
Const ВременнойИнтервалМеждуПроверками = 2    ' в секундах

Sub СлежениеЗаФайлом()
    Do While True    ' бесконечный цикл
        НовыйРазмерФайла = CreateObject("scripting.filesystemobject").GetFile(ИмяФайла).Size
        If НовыйРазмерФайла > РазмерФайла Then ОбработкаФайла: РазмерФайла = НовыйРазмерФайла
        t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend
    Loop
End Sub

Sub ОбработкаФайла()
    Application.ScreenUpdating = False
    Workbooks.OpenText Filename:=ИмяФайла, DataType:=xlDelimited, Comma:=True
    ActiveWorkbook.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).[a1]
    ActiveWorkbook.Close False
    Application.ScreenUpdating = True
End Sub
Один раз запустите макрос СлежениеЗаФайлом.
Теперь при каждом увеличении размера файла с именем ИмяФайла (а также при первом запуске макроса) производится обработка этого файла.
EducatedFool вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод из текстового файла bygoga Паскаль, Turbo Pascal, PascalABC.NET 14 23.11.2008 13:37
Задача на анализ текстового файла Latedelivery Паскаль, Turbo Pascal, PascalABC.NET 4 31.10.2008 10:55
Открытие текстового файла Victor Microsoft Office Excel 2 16.01.2008 03:42