|
Как организовать быстрый поиск в файлах? | ☑ | ||
---|---|---|---|---|
0
al_zzz
23.12.23
✎
07:01
|
Есть много xml файлов различного объема, лежащих в подкаталогах одного каталога. Хотелось бы организовать поиск по подстроке в содержимом данных файлов и потом открывать их, если подстрока найдена.
В связи с этим возник вопрос: как считать сразу содержимое файла в строку с тем, чтоб сразу в ней искать содержимое(нашел примеры только последовательного чтения)? |
|||
1
Garykom
гуру
23.12.23
✎
07:12
|
1. Не надо читать файл сразу в строку, размер файла может быть большим
2. Читать построчно 3. Записывать в БД: имя файла, номер строки, текст строки 4. Поиск по БД 5. Для ускорения поиска в БД и нечеткого использовать индекс через метод N-грамм |
|||
2
Ватт
23.12.23
✎
08:41
|
(0) Может быть быстрее использовать findstr или grep?
|
|||
3
lEvGl
гуру
23.12.23
✎
09:05
|
(0) многопоточность
|
|||
4
Garykom
гуру
23.12.23
✎
09:10
|
(2) зависимость от ОС и вызов внешних средств
еще предложи микросервис на Го |
|||
5
DirectorGora
23.12.23
✎
09:15
|
(0) Реши эту проблему топовым железом, главное поиск вести на SSD))
|
|||
6
DirectorGora
23.12.23
✎
09:17
|
(0) О, придумал, используй облачные решения с их суперкомпьютерами для обработки твоих xml файлов. Ну при этом надо разработать взаимодействие 1С с API облачных решений))
|
|||
7
АгентБезопасной Нацио
23.12.23
✎
09:29
|
(6) сразу уж ИИ припрячь...
|
|||
8
DirectorGora
23.12.23
✎
09:39
|
(7) Кстати, разработать взаимодействие 1С с API сторонних программ уже вполне рядовая задача
|
|||
9
DirectorGora
23.12.23
✎
09:40
|
(7) Так что если есть ИИ разрешенный в России с API, то можно привлечь и ИИ, только он в этой задаче (0) мало чем поможет
|
|||
10
lEvGl
гуру
23.12.23
✎
09:40
|
(8) а вы преподаватель, да? теоретика всмысле?
|
|||
11
DirectorGora
23.12.23
✎
09:43
|
(7) В windows 12 есть встроенный ИИ, причем он в полную силу работает только с новыми процессорами поддерживающим этот ИИ, ну чтобы не ждать сентября-октября 2024, можно интеграцию и сейчас разработать
|
|||
12
DirectorGora
23.12.23
✎
09:46
|
(10) Нет, уже дорабатывал такую интеграцию 1С со сторонним API. С нуля конечно в одно лицо не делал всю интеграцию, но систематически дорабатываю в 1С интеграцию со сторонним API, API же меняется у сторонних программ, появляется новый функционал.
|
|||
13
DirectorGora
23.12.23
✎
09:48
|
(10) Сейчас перед мной стоит задача реализовать интеграцию 1С:ЗУП и Госключа (у него открытый API), причем "с нуля" и в одно лицо.
|
|||
14
lEvGl
гуру
23.12.23
✎
09:54
|
"с нуля"
на эту тему есть много романтических песен, удачи)) |
|||
15
DirectorGora
23.12.23
✎
09:59
|
(14) Ну я подсмотрю как это сделано в той интеграции которая уже реализовано в нашей компании, не так уж там и много кода. А "с нуля" в одно лицо я уже разработал свою нетленку с переносом в нее части БСП и организации обмена с ЗУП. И эта нетленка очень и очень была оценена конечными заказчиками. А ЗУП - это моя территория))
|
|||
16
DirectorGora
23.12.23
✎
10:02
|
(15) Ну все сажаются обычно только в детском доме и то мой отец был из интерната и не то что не сел, а стал инженером, потом начальником и прожил достойную жизнь
|
|||
17
DirectorGora
23.12.23
✎
10:02
|
(16) Сорри, не туда написал))
|
|||
18
Кирпич
23.12.23
✎
10:11
|
findstr или grep
|
|||
19
DirectorGora
23.12.23
✎
10:19
|
(18) Плагиат (2) я тоже умею копировать и вставлять))
|
|||
20
NorthWind
23.12.23
✎
13:22
|
(4) ну кстати некое регламентное задание - может, в виде 1Совского, может, в виде отдельной программы или скрипта, которое будет периодически запускаться и поддерживать индекс в актуальном состояни - пригодится. Так что "микросервис на Go" тут как раз не исключен.
Я в свое время решал подобную задачу, у меня была куча EDI-файлов RECADV и требовалось среди них быстро найти файл от нужной поставки. Сделал отдельные XML-файлы индексов - по одному на каждую дату месяца, где хранились ключевые данные для поиска (номер заказа, номер документа, контрагент, точка доставки) и собственно ссылка на файл. Софт сначала лазил в индекс, находил требуемое имя, затем уже отправлялся в нужный файл. Отдельный скрипт на пайтоне раз в некоторое время запускался и осуществлял доиндексацию вновь прилетевших файлов. Кстати, не вполне понятно, зачем ТСу искать по всему подряд. Все же XML - это структурированная инфа, поэтому думается, что нужно искать по каким-то узлам и атрибутам. |
|||
21
Кирпич
23.12.23
✎
14:26
|
(19) чем больше накопипастить правильный ответ, тем больше поможешь автору
|
|||
22
sikuda
23.12.23
✎
14:37
|
(20) Может я совсем древний но для данной задачи мне хватает Sublime - Find in Files... в Visual Studio Code тоже есть.
Локалько по каждому файлу пользуюсь https://github.com/sikuda/bigxmlread. |
|||
23
NorthWind
23.12.23
✎
16:42
|
(22) я так думаю, ему их внутри своего софта обрабатывать надо. Скорее всего, 1Сным кодом.
|
|||
24
al_zzz
23.12.23
✎
18:16
|
Поиск файлов по содержимому - вот тут нашел подходящий пример по findstr тут в конце даже пример расписан. Но у меня, почему-то, не взлетает.
МаскаПоиска = ОбщегоНазначенияКлиентСервер.ДобавитьКонечныйРазделительПути(Объект.КаталогДляПравилОбмена)+"*.xml";//Файл.ПолноеИмя;//"\FlashBackIN\*.xml"; СтрокаПоиска = "БухгалтерияПредприятияКОРП"; КомандаПоиска = "findstr /i /s /m /c:" + """" + СтрокаПоиска + """" + " """ + МаскаПоиска + """"; Shell = Новый COMОбъект("WScript.Shell"); WshExec = Shell.Exec(КомандаПоиска); OutStream = WshExec.StdOut; Str = ""; Пока Не OutStream.AtEndOfStream Цикл Str = Str + СокрЛП(OutStream.ReadLine()); КонецЦикла; Сообщить("Str = " + Str); Str всё время пустая. ЧЯДНТ? |
|||
25
al_zzz
23.12.23
✎
18:26
|
Пробовал и в каталог только с латинскими символами в названии переносить, и в ковычки дополнительные брать искомое слово - не хочет искать
|
|||
26
NorthWind
23.12.23
✎
21:14
|
(25) проблемы с кодировками могут быть. Скажем, в stdout выводятся данные в CP866, а ReadLine () ожидает, что они будут в UTF-16. То же самое русский текст в строке поиска на входе. Но это не точно, надо проверять. Вопрос также по кодировкам самих файлов XML. Я что-то не нашел в ключах /I /S /M /C: ничего такого, что указывало бы на поиск по разным кодировкам, а в XML теоретически может быть любая, как минимум распространены windows-1251 и utf-8, которые довольно сильно различаются в части кириллицы. И точно ли findstr отработает правильно? Нужно понимать, что если вы не используете XML-парсер для открытия XML-файлов, то вся головная боль с кодировками и правильным чтением данных ложится на вас.
|
|||
27
Ватт
24.12.23
✎
06:39
|
(25) да, моя ошибка,findstr не работает с разными кодировками. Для grep можно указать кодировку, но это "ручной режим", не универсально.
|
|||
28
Garykom
гуру
24.12.23
✎
12:59
|
(24) >ЧЯДНТ?
Все не так. Не используй findstr/grep. Используй (1) и (3) Или возьми нормальный ЯП (тот же Golang) и напиши нормальный сервис |
|||
29
Garykom
гуру
24.12.23
✎
14:10
|
Для общего развития как это примерно делается
https://habr.com/ru/articles/519024/ |
|||
30
Кирпич
24.12.23
✎
14:26
|
(24) если тупо найти строку, то вот это попробуй
https://cloud.mail.ru/public/Qm9S/hMysC4pvR там текст командной строки в utf-8 преобразуется запускать так textfind.exe c:\test\data *.xml "текст поиска" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |