Определить имена файлов в тексте

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Определить имена файлов в тексте

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 12:08

Возник такой вопрос: как однозначно можно определить имена файлов в тексте?
Вернее как в тексте найти имена файлов?
Я пока реализовал это так:
Пробегаемся по тексту построчно.
1.Берём очередную строку.
2.Ищем вхождение в строку символа точки (файлы, согласно специфике области применения моей программы, в любом случае имеют расширение).
3.После того как нашли точку, ищем в обе стороны ограничивающие символы (символы недопустимые в именах файлов, в том числе и пробелы как одни из ограничивающих символов).
4.Берём выделенный кусок строки - по идее это и должно быть имя файла.
5. От позиции правого ограничивающего символа в строке + 1 до ищем следующее вхождение точки.
6. Если нашли точку - переходим к пункту 3, если не нашли - переходим к пункту 1.

Не упустил ли я чего?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.03.2005 (Ср) 12:12

Пробелы могут быть.
Может быть взято в кавычки, может быть не взято.
Отличать file.txt от vbstreets.ru как будешь? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Ennor
Конструктивный критик
Конструктивный критик
 
Сообщения: 2504
Зарегистрирован: 18.12.2001 (Вт) 3:58
Откуда: Калуга -> Москва

Re: Определить имена файлов в тексте

Сообщение Ennor » 30.03.2005 (Ср) 12:14

Ruslan Demidow писал(а):... файлы, согласно специфике области применения моей программы, в любом случае имеют расширение
...


Неправильно. Файлы в общем случае имеют любое расширение, в том числе и пустое (т.е. отсутствующее). Пример - файл hosts.

Шурик
Самогонщик
Самогонщик
Аватара пользователя
 
Сообщения: 1657
Зарегистрирован: 30.06.2003 (Пн) 13:27
Откуда: из запоя :))))) Матных сообщений: 972

Сообщение Шурик » 30.03.2005 (Ср) 12:18

И расширеня разные бывают например readme.info

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.03.2005 (Ср) 12:31

И расширений может быть несколько.
И файлы (пути) могут быть заданы, как UNC.
Lasciate ogni speranza, voi ch'entrate.

xolod
Гуру
Гуру
 
Сообщения: 1162
Зарегистрирован: 15.01.2004 (Чт) 0:42
Откуда: Moscow

Сообщение xolod » 30.03.2005 (Ср) 12:33

Если основывать на файловых системах FATx и NTFS, где однозначно в таблице соответствий указаны логичиские диски, то можно регулярными выражениями найти, учитывая, что файл всегда будет попадать под маску ^([A-Za-z]:\.+?)$si. В эту регулярку попадут все строки вида DISK:\PATH\TO\FILE\FILE

Constant ERROR_SUCCESS deprecated. I'm so happy.
Программирование и дизайн – http://www.macrointellect.ru

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 12:36

GSerg писал(а):Пробелы могут быть.

Пробелов там по определению не будет - максимум что будет из нестандартного - это подчёркивание.
Я разрабатываю процедуру запроса файлов по сети FIDO (пишу FTN-редактор). А там, насколько я понял, принято DOS-овское именование файлов. Соответственно и формат будет 8.3
GSerg писал(а):Может быть взято в кавычки, может быть не взято.

Так как это фтн-система, то кавычки в именах файлов исключены, а значит они будут тоже ограничивающими символами.

GSerg писал(а):Отличать file.txt от vbstreets.ru как будешь? :)

Это да, тяжеловато будет. Но, по-моему, ссылка предваряется обычно префиксом. Плюс в имени файла должна присутствовать только одна точка. Хотя нужно будет продумать и этот вариант.
Например при нахождении имени, смотреть не стоит ли справа один из префиксов инет-контента.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Re: Определить имена файлов в тексте

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 12:51

Ennor писал(а):
Ruslan Demidow писал(а):... файлы, согласно специфике области применения моей программы, в любом случае имеют расширение
...


Неправильно. Файлы в общем случае имеют любое расширение, в том числе и пустое (т.е. отсутствующее). Пример - файл hosts.

Для таких случаев у меня предусмотрено ручное добавление имени файла в список запроса.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 12:55

Шурик писал(а):И расширеня разные бывают например readme.info

А без разницы - хоть пятнадцать символов в расширении - всё равно оно будет учтено до следующего невалидного для имён файлов символа.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 12:59

alibek писал(а):И расширений может быть несколько.
И файлы (пути) могут быть заданы, как UNC.

Будет взято только одно, первое, расширение (обычто эти файлы - это архивы и графические файлы, ну ещё могут быть текстовые).
И я ещё не видел чтобы в FTN-системах для запроса предлагались файлы с UNC-путями. :wink:
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 13:02

xolod писал(а):Если основывать на файловых системах FATx и NTFS, где однозначно в таблице соответствий указаны логичиские диски, то можно регулярными выражениями найти, учитывая, что файл всегда будет попадать под маску ^([A-Za-z]:\.+?)$si. В эту регулярку попадут все строки вида DISK:\PATH\TO\FILE\FILE

Нет, мне немного нужно в другом формате: просто имя файла, без пути к нему (без parent-фолдеров и диска), потому как файлы будут запрашиваться по модему, и нужны будут только имена файлов. А принимающая запрос сторона будет отдавать файлы уже оттуда - где они у неё там лежат. Хоть на сидюке, хоть в сети, хоть в инете.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.03.2005 (Ср) 13:34

Ruslan Demidow писал(а):
GSerg писал(а):Отличать file.txt от vbstreets.ru как будешь? :)

Это да, тяжеловато будет. Но, по-моему, ссылка предваряется обычно префиксом. Плюс в имени файла должна присутствовать только одна точка. Хотя нужно будет продумать и этот вариант.
Например при нахождении имени, смотреть не стоит ли справа один из префиксов инет-контента.

Найди разницу между файлом nettools.com и доменом nettools.com?
Ссылки далеко не всегда дают с указанием протокола http.
Lasciate ogni speranza, voi ch'entrate.

Qubicz
Обычный пользователь
Обычный пользователь
 
Сообщения: 87
Зарегистрирован: 16.10.2004 (Сб) 20:21
Откуда: Санкт-Петербург

Сообщение Qubicz » 30.03.2005 (Ср) 14:12

Плюс в имени файла должна присутствовать только одна точка

some.file.txt или somefile.exe.txt?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.03.2005 (Ср) 14:28

Qubicz, в 8.3 не может быть такого имени.
Lasciate ogni speranza, voi ch'entrate.

Alexander N. Samarin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 397
Зарегистрирован: 05.03.2005 (Сб) 20:59
Откуда: Интернат 18 (СУНЦ МГУ), комната 214А, кровать посередине

Сообщение Alexander N. Samarin » 30.03.2005 (Ср) 17:22

Есть еще Progra~1.exe
На это не смотрите! Это не подпись!!!!!!

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 22:59

Alexander N. Samarin
Тильду можно и не включать в ограничивающие символы.
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 30.03.2005 (Ср) 23:01

alibek писал(а):
Ruslan Demidow писал(а):
GSerg писал(а):Отличать file.txt от vbstreets.ru как будешь? :)

Это да, тяжеловато будет. Но, по-моему, ссылка предваряется обычно префиксом. Плюс в имени файла должна присутствовать только одна точка. Хотя нужно будет продумать и этот вариант.
Например при нахождении имени, смотреть не стоит ли справа один из префиксов инет-контента.

Найди разницу между файлом nettools.com и доменом nettools.com?
Ссылки далеко не всегда дают с указанием протокола http.

Ну да, это верно. Но ведь и суперуниверсальный алгоритм фиг напишешь. Просто всегда будут исключения. Но их по определению: чем меньше - тем лучше. :)
Это Ж-ж-ж-ж неспроста (с) Винни-Пух

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 01.04.2005 (Пт) 19:09

Ruslan, я бы - так же, как и xolod - заюзал регэкспы (например, VBScript_RegExp_10 - он афаик есть на любой Винде). Они наверняка работают быстрее и надёжнее, чем самодельные аналоги.

[Библиотека называется Microsoft VBScript Regular Expressions (vbscript.dll)]
Изображение

Ruslan Demidow
Мужчина!
Мужчина!
Аватара пользователя
 
Сообщения: 987
Зарегистрирован: 25.03.2004 (Чт) 13:39
Откуда: N.Novgorod

Сообщение Ruslan Demidow » 02.04.2005 (Сб) 1:43

tyomitch писал(а):Ruslan, я бы - так же, как и xolod - заюзал регэкспы (например, VBScript_RegExp_10 - он афаик есть на любой Винде). Они наверняка работают быстрее и надёжнее, чем самодельные аналоги.

[Библиотека называется Microsoft VBScript Regular Expressions (vbscript.dll)]

Артём, спасибо за совет.
Я уже сделал процедуру на поиск имён файлов в тексте с отсеиванием мусора и т.п., но без RegExp.
А вот поиск адресов аплинков я реализовал как раз через RegExp. :)
Условия такие:
"[0-9]:[0-9]+/[0-9]+" и "[0-9]:[0-9]+/[0-9]+\.[0-9]+"
Работает...

Только если и имена файлов делать через RegExp, то не подскажешь ли условие для поиска?
Это Ж-ж-ж-ж неспроста (с) Винни-Пух


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 193

    TopList