|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Из некоторой директории в соответствии с шаблоном я получаю список находящихся там файлов. Из имени каждого файла необходимо выделить ту часть, которая соответствует символу * в шаблоне. Например, из имени файла "0099600_RPTCLIENTS_001_280220_000387186.xml" необходимо получить "280220_000387186". Как это реализовать? Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:44 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Из имени файла убери 23 первых символа и 4 последних ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 13:53 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Dima T, Нужно более универсальное решение, т. к. знак * может быть в любом месте шаблона. Кроме того, их может быть несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 14:02 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
в wildcard для ms\pc-dos и винды в шаблоне вроде 2 символа подстановочных, это * (любые символы в любом количестве) и ? (любой одиночный символ) то есть, достаточно разбить строку шаблон по этим символам, чтоб получить те строки, по которым осуществляется выборка. затем в искомой строке нужно найти эти подстроки. Как их выделить в WinForms я понятия не имею, в WPF это делает на раз-два Еще проще, берем строку WildCard шаблон и делаем из неё RegEx шаблон, * заменяем на (.*), ? заменяем на (.?), всё остальное заносим в группы. в результате вы получите "карту" по группам для шаблона: 'D:\Temp\0099600_?_RPTCLIENTS_001_*.xml' с RegEx удобнее всего, количество подстановчных символов и их положение не имеет значение. Всё, что нужно, это просто взять полученные группы и добавить их в TextBlock в виде Run объект с заданным форматированием (в WPF). Или отрендерить в WPF в виде последовательного текста с разным форматированием (или как это у вас там делается) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 14:04 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Roman Mejtes, Спасибо. RegEx как вариант подходит, но нужно опять же модифицировать шаблон, т. е. делать его анализ и менять его в соответствии с его структурой. Есть ли способ, который позволяет решить задачу без модификации шаблона и не привязываясь к визуальной части той или иной платформы (WinForms, WPF and etc.)? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 14:18 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Degun, что там модифицировать то? 1. Экранируйте все символы в шаблоне через метод string Regex.Escape(string) 2. Добавляете в начало строки начало первой группы '(', в конец строки конец последней группы ')' 3. Заменяете все вхождения "\*" (экранированный *) на ")(.*)(" и все "\?" на ")(.?)(" Вот и все замены, это можно делать налету, вы не "модифицируйте" шаблон, а просто генерируйте на основе WildCard шаблона соответствующий ему RegEx шаблон. Вам не нужно модифицировать существующие шаблоны, вам нужно генерировать на основе существующих свой. Это должно быть инкапсулировано, то есть конечный пользователь вообще не должен знать, что там какой то Regex используется. Он просто создает объект класса, передает в конструкторе шаблон Wildcard и потом дёргает метод класса и получает то, что вы хотели. А то, что происходит внутри, его не касается. Для него всё будет работать через Wildcard, а не через Regex ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 14:54 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Roman Mejtes, Сделал по методике. Код ниже в строке sTestString должен получить "TestString". Но в результате получается пустая строка. Что не так? Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 16:18 |
|
В имени файла выделить часть, соответствующей шаблону
|
|||
---|---|---|---|
#18+
Degun, потому, что читайте невнимательно то, что вам пишут я же все шаги расписал по пунктам Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45.
[/img] ... |
|||
:
Нравится:
Не нравится:
|
|||
02.03.2020, 17:31 |
|
|
start [/forum/topic.php?fid=20&fpage=11&tid=1398598]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 156ms |
0 / 0 |