Вверх ↑
Этот топик читают: Гость
Этот топик был перемещен из раздела "Компоненты"
Ответов: 34
Рейтинг: 0
#1: 2018-09-26 20:12:32 ЛС | профиль | цитата
Немогу понять, почему он не ищет текст в файле?

Add(Button,13932329,224,581)
{
Left=145
Top=230
Data=String(5)
link(onClick,14312986:doSearch,[])
}
Add(SearchInFile,14312986,287,581)
{
FileName="C:\1\info.log"
Text="ERROR"
link(onSearch,3314113:doAdd,[(338,594)(338,580)])
}
Add(Memo,3314113,357,574)
{
Left=285
Top=230
Width=340
Height=210
}

Вот простой пример, при попытке найти Erorr он ничего не находит, хотя по факту есть.
Что я не так делаю?
карма: 0

0
vip
#1.1контекстная реклама от партнеров
Ответов: 16884
Рейтинг: 1239
#2: 2018-09-26 20:34:57 ЛС | профиль | цитата
FileName="C:\1\info.log"
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 34
Рейтинг: 0
#3: 2018-09-26 20:40:00 ЛС | профиль | цитата
Tad писал(а):
FileName="C:\1\info.log"

а что не так? это полный путь к файлу
карма: 0

0
Ответов: 537
Рейтинг: 14
#4: 2018-09-26 20:57:55 ЛС | профиль | цитата
C:\\1\\info.log
карма: 4

0
Ответов: 1925
Рейтинг: 172
#5: 2018-09-27 06:33:59 ЛС | профиль | цитата
ZloiDed, почитайте тут.
карма: 9
0
Ответов: 34
Рейтинг: 0
#6: 2018-09-27 14:28:51 ЛС | профиль | цитата
разобрался, спасибо)
А еще вопрос, можно ли с помощью этого компонента прочитать лог файл который щас занят другим процессом?
т.е. если я пытаюсь произвести поиск он мне выдает ошибку runtime, если процесс завершаю нормально ищет.
Хочу искать определенную строку в логе и при нахождении выполнить команду.
Возможно другим каким то компонентом можно искать в файле который занят другим процессом? Но ведь по идее должен искать, ведь даже когда сам процеес пишет лог, то я обычным текстовым документом могу открыть этот файл, просто сохранить изменения немогу.
карма: 0

0
Ответов: 4621
Рейтинг: 746
#7: 2018-09-27 14:39:44 ЛС | профиль | цитата
Компонент использует примитивные методы для работы с файлом. Если бы он использовал класс TStream и задавал режим открытия "только чтение", то можно было бы читать открытый другим процессом файл (в твоём случае).

Можно попробовать метод doSearch в модифицированном DataToFile в комплекте с модифицированным FileStream. Но там принцип другой и ищет зависимо от регистра.

Редактировалось 2 раз(а), последний 2018-09-27 14:45:45
карма: 26

0
Ответов: 34
Рейтинг: 0
#8: 2018-09-27 14:52:44 ЛС | профиль | цитата
Netspirit писал(а):
Компонент использует примитивные методы для работы с файлом. Если бы он использовал класс TStream и задавал режим открытия "только чтение", то можно было бы читать открытый другим процессом файл (в твоём случае).

Можно попробовать метод doSearch в модифицированном DataToFile, но там принцип другой и ищет зависимо от регистра.


Что то не разобрался как его добавить в проект, неужели нет готового решения? Вроде в компоненте FileStream есть возможность открывать только чтение, но я если честно не пойму как в потоке искать текст, я так понимаю его сначала как то в текст преобразовать надо?
карма: 0

0
Ответов: 4621
Рейтинг: 746
#9: 2018-09-27 15:10:22 ЛС | профиль | цитата
ZloiDed писал(а):
Что то не разобрался как его добавить в проект
Закинуть в папки conf и code соответствующие файлы. Но с недавних пор компонента DataToFile нет в палитре - можно либо добавить самому, либо copy-paste из схемы примера поиска (там есть пример).

ZloiDed писал(а):
Вроде в компоненте FileStream есть возможность открывать только чтение
Да, но нету компонента, который в этом стриме будет искать - модифицированный DataToFile и призван решить эту проблему.
При открытии файла играет роль режим открытия и режим совместного доступа - в первом приложении, которое открыло и работает с файлом и в твоём приложении, в которм ты тоже хочешь с ним работать. Так вот, в существующем FileStream режим открытия "Read" включает в себя режим совместного доступа "запрет записи в файл". То-есть, одна программа открыла файл для записи, а потом приходишь ты и хочешь открыть тот же файл, отрубив первой программе запись. Система такого не позволяет.
Поэтому в модифицированном FileStream есть свойство ShareMode, благодаря которому можно открыть чужой файл для чтения (если первая программа это позволяет).

Редактировалось 1 раз(а), последний 2018-09-27 15:11:16
карма: 26

0
Ответов: 34
Рейтинг: 0
#10: 2018-09-27 19:15:57 ЛС | профиль | цитата
Netspirit писал(а):
ZloiDed писал(а):
Что то не разобрался как его добавить в проект
Закинуть в папки conf и code соответствующие файлы. Но с недавних пор компонента DataToFile нет в палитре - можно либо добавить самому, либо copy-paste из схемы примера поиска (там есть пример).

ZloiDed писал(а):
Вроде в компоненте FileStream есть возможность открывать только чтение
Да, но нету компонента, который в этом стриме будет искать - модифицированный DataToFile и призван решить эту проблему.
При открытии файла играет роль режим открытия и режим совместного доступа - в первом приложении, которое открыло и работает с файлом и в твоём приложении, в которм ты тоже хочешь с ним работать. Так вот, в существующем FileStream режим открытия "Read" включает в себя режим совместного доступа "запрет записи в файл". То-есть, одна программа открыла файл для записи, а потом приходишь ты и хочешь открыть тот же файл, отрубив первой программе запись. Система такого не позволяет.
Поэтому в модифицированном FileStream есть свойство ShareMode, благодаря которому можно открыть чужой файл для чтения (если первая программа это позволяет).


Поставил компонент, но в файле ищу, и ничего не находит, так понимаю надо какой то правильный тип данных выбрать? какой надо выбирать и какой текст для поиска?
Например что бы найти error в примере как надо правильно сделать?) и как включить свойство sharemode?

Add(DataToFile,5947293,469,378)
{
Type=6
Data=String(error)
Point(doSearch)
Point(onFound)
Point(onNotFound)
Point(Position)
link(Stream,286078:Stream,[(475,369)(377,369)(377,438)(335,438)])
link(onFound,15145097:doMessage,[])
}
Add(Message,15145097,546,385)
{
Caption="Найдено!"
Icon=4
}
Add(Button,1793484,238,392)
{
Left=100
Top=125
Width=140
Height=30
Caption="Найти"
link(onClick,286078:doOpen,[])
}
Add(FileStream,286078,329,392)
{
FileName="C:\\1\\log.txt"
Point(doPosition)
link(onLoad,3945605:doEvent1,[])
}
Add(Hub,3945605,392,392)
{
link(onEvent1,5947293:doSearch,[])
link(onEvent2,286078:doClose,[(432,405)(432,450)(319,450)(319,405)])
}



Редактировалось 1 раз(а), последний 2018-09-27 19:16:57
карма: 0

0
Ответов: 537
Рейтинг: 14
#11: 2018-09-27 20:11:37 ЛС | профиль | цитата
А если отрыть документ в программе и искать

Add(MainForm,2953706,28,105)
{
Width=546
Height=542
}
Add(Button,12164268,28,168)
{
Left=80
Top=465
Caption="Открыть"
link(onClick,11254030:doExecute,[])
}
Add(Button,5170401,28,217)
{
Left=375
Top=465
Caption="Найти"
link(onClick,13669577:doEvent1,[])
}
Add(ListBox,3152755,140,140)
{
Width=255
Height=425
}
Add(ListBox,1254067,336,231)
{
Left=265
Width=260
Height=425
}
Add(Edit,12748084,224,161)
{
Left=270
Top=435
Width=255
Text=""
}
Add(ODialog,11254030,84,168)
{
link(onExecute,3152755:doLoad,[])
}
Add(ArrayEnum,946420,154,224)
{
link(onItem,6823847:doCompare,[])
link(onEndEnum,5160781:doMessage,[(205,237)(205,279)])
link(Array,3152755:Array,[])
}
Add(StrMask,6823847,280,224)
{
Point(doMask)
link(onTrue,1254067:doAdd,[])
}
Add(FormatStr,14404905,224,231)
{
DataCount=1
Mask="*%1*"
link(onFString,6823847:doMask,[])
link(Str1,12748084:Text,[])
}
Add(Hub,13669577,119,217)
{
link(onEvent1,14404905:doString,[(205,223)(205,237)])
link(onEvent2,946420:doEnum,[])
}
Add(Message,5160781,224,273)
{
Message="Писк завешен!"
Caption=" "
}
И неважно, что он заблокирован
карма: 4

0
Ответов: 34
Рейтинг: 0
#12: 2018-09-27 20:36:21 ЛС | профиль | цитата
Sersey писал(а):
А если отрыть документ в программе и искать

И неважно, что он заблокирован

При открытии падает с ошибкой Runtime

Редактировалось 1 раз(а), последний 2018-09-27 20:58:13
карма: 0

0
Ответов: 4621
Рейтинг: 746
#13: 2018-09-28 10:53:08 ЛС | профиль | цитата
ZloiDed писал(а):
и как включить свойство sharemode?
Поставить ShareMode=AllowAll, всё остальное правильно. Для ясности надо было повесить MessageBox на FileStream.onError.

Также благодаря модифицированному FileStream можно открыть занятый файл, затем с помощью StreamConvertor преобразовать поток в строку и выполнять поиск компонентами для строк.
карма: 26

0
Ответов: 34
Рейтинг: 0
#14: 2018-09-28 17:17:58 ЛС | профиль | цитата
Netspirit писал(а):
ZloiDed писал(а):
и как включить свойство sharemode?
Поставить ShareMode=AllowAll, всё остальное правильно. Для ясности надо было повесить MessageBox на FileStream.onError.

Также благодаря модифицированному FileStream можно открыть занятый файл, затем с помощью StreamConvertor преобразовать поток в строку и выполнять поиск компонентами для строк.

Пошел более простым путем, просто копируя данный лог, а уже в скопированном искать)
За подсказку спасибо
карма: 0

0
14
Сообщение
...
Прикрепленные файлы
(файлы не залиты)