Вверх ↑
Этот топик читают: Гость
Ответов: 1926
Рейтинг: 172
#1: 2017-09-23 14:01:17 ЛС | профиль | цитата
1. file name WOExt
Выдаёт пустоту, если нет расширения. А всё потому, что в строке 69 нет проверки на точку. Надо бы так:

if Pos('.', FPart) ‹› 0 then rparse(FPart, '.');

2. То же самое ext name и ext name WOPoint
Если нет расширения - выдаёт просто полное имя со входа. А если где-то в имени папки есть точка - обрезает просто по ней.
Поэтому надо бы сначала отсекать имя файла после последнего слеша, а потом уже делить его по точке (если она есть).
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#2: 2017-09-23 15:07:09 ЛС | профиль | цитата
Исправил, проверяй
карма: 22

0
Ответов: 1926
Рейтинг: 172
#3: 2017-09-23 15:39:39 ЛС | профиль | цитата
nesco, теперь ext name и ext name WOPoint, если файл без расширения, выдают его имя. Там тоже нужен if...then на точку.

И path name WOExt тоже кстати надо бы поправить. Тоже деление по последнему слешу и проверка на точку.


Add(FilePartElm,982139,238,224)
{
Mode=3
link(onPart,13131503:doMessage,[])
}
Add(Edit,1483531,175,217)
{
Left=25
Top=50
Width=325
Text="C:\alfa\dac.0\uxtr"
ClearAfterEnter=1
link(onEnter,982139:doPart,[])
}
Add(Message,13131503,294,224)
{
}

FileNameWOExt работает, спасибо.
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#4: 2017-09-23 18:55:36 ЛС | профиль | цитата
Исправил, проверяй
карма: 22

0
Ответов: 1926
Рейтинг: 172
#5: 2017-09-23 22:39:31 ЛС | профиль | цитата
nesco, думаю, вот как должно быть:


procedure THIFilePartElm._work_doPart3;  // ext name
begin
FPart := ReadString(_Data, _data_FileName, '');
if FPart = '' then exit;
// FPart := ExtractFileExt(FPart);
if Pos('/', FPart) <> 0 then
FPart := rparse(FPart, '/')
else
FPart := rparse(FPart, '\');
if Pos('.', FPart) <> 0 then
begin
FPart := rparse(FPart, '.');
FPart := '.' + FPart;
end else FPart := '';
_hi_CreateEvent(_Data, @_event_onPart, FPart);
end;

procedure THIFilePartElm._work_doPart4; // ext name WOPoint
begin
FPart := ReadString(_Data, _data_FileName, '');
if FPart = '' then exit;
// FPart := ExtractFileExt(FPart);
// delete(FPart, 1, 1);
if Pos('/', FPart) <> 0 then
FPart := rparse(FPart, '/')
else
FPart := rparse(FPart, '\');

if Pos('.', FPart) <> 0 then FPart := rparse(FPart, '.')
else FPart := '';
_hi_CreateEvent(_Data, @_event_onPart, FPart);
end;

А то при отсутствии расширения даже пустой строки не выдавал.

А для path name WOExt:


procedure THIFilePartElm._work_doPart6;  // path name WOExt
var ne:string;
begin
FPart := ReadString(_Data, _data_FileName, '');
if FPart = '' then exit;

if Pos('/', FPart) <> 0 then
begin ne := rparse(FPart, '/'); FPart := FPart + '/'; end
else
begin ne := rparse(FPart, '\'); FPart := FPart + '\'; end;
if Pos('.', ne) <> 0 then rparse(ne, '.');
FPart := FPart + ne;
_hi_CreateEvent(_Data, @_event_onPart, FPart);
end;

Уже проверил у себя - работает.

ps. С форума неправильно вставляет в [ code] символы '<' и '>' - похожие, но не рабочие.
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#6: 2017-09-23 23:05:35 ЛС | профиль | цитата
3042 писал(а):
А для path name WOExt:

Че-то я не понял твои телодвижения??? Что дает то, что ты сделал? Чем не устроило мое решение?
3042 писал(а):

А то при отсутствии расширения даже пустой строки не выдавал.

А надо было, тогда добавлю

Редактировалось 3 раз(а), последний 2017-09-23 23:08:49
карма: 22

0
Ответов: 1926
Рейтинг: 172
#7: 2017-09-23 23:16:52 ЛС | профиль | цитата
nesco писал(а):
3042 писал(а):
А для path name WOExt:

Че-то я не понял твои телодвижения??? Что дает то, что ты сделал? Чем не устроило мое решение?


nesco, а сам проверял после правки?
Там же деление по точке происходит в пути файла, а не имени! Ведь после rparse в FPart остаётся левая часть, т.е. путь. А в моём коде парсинг имени, как и должно быть.

Ну и до кучи - сделал пару иконок к двум последним режимам компонента - см. вложение.
карма: 9
0
файлы: 1fpeicon.rar [692B] [441]
Разработчик
Ответов: 26149
Рейтинг: 2127
#8: 2017-09-23 23:19:34 ЛС | профиль | цитата
3042 писал(а):
Там же деление по точке происходит в пути файла, а не имени!

ЕМНИП. То так и должен работать этот метод, он должен убирать расширение в пути, а не в имени. Это специальный метод

Редактировалось 1 раз(а), последний 2017-09-23 23:26:48
карма: 22

0
Ответов: 1926
Рейтинг: 172
#9: 2017-09-23 23:31:02 ЛС | профиль | цитата
Например, C:\windows\notepad.exe после path name WOExt как должен выглядеть?
Я подумал, что так: C:\windows\notepad
Или как-то иначе?
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#10: 2017-09-23 23:35:45 ЛС | профиль | цитата
3042 писал(а):
Или как-то иначе?

Вроде мы тут оба лоханулись.
Вот эта тема -- http://forum.hiasm.com/topic/65802. Тч твоя правка будет уместна и путь должен остаться C:\windows\notepad
Там вообще немного по-другому надо решать

--- Добавлено в 2017-09-24 00:10:24

Короче, добавил твои правки в части ext name и ext name WOPoint
В части path name WOExt оставил все как есть, за исключением того, что добавил условие на то, что это действительно папка и не надо ее парсит, а выдавать как естьь. А то сжирало расширение у последней папки (при наличии такового), если не указано имя файла. Но надо бы еще проверить, что-то есть у меня некоторые подозрения на возможность некорректной работы в некоторых случаях.

Я уже запутался, сейчас еще раз все проверю.

Редактировалось 6 раз(а), последний 2017-09-24 00:16:23
карма: 22

0
Ответов: 1926
Рейтинг: 172
#11: 2017-09-24 00:20:59 ЛС | профиль | цитата
nesco писал(а):
В части path name WOExt оставил все как есть, за исключением того, что добавил условие на то, что это действительно папка и не надо ее парсит, а выдавать как естьь. А то сжирало расширение у последней папки (при наличии такового), если не указано имя файла. Но надо бы еще проверить, что-то есть у меня некоторые подозрения на возможность некорректной работы в некоторых случаях.


Но ведь имя папки на вход может прийти и без слешей в конце! Я думал по поводу разделения имён папок, но этот компонент, видимо, не подходит для этого. Например, тот же file name. Если на вход пришло такое имя папки: C:\windows, то имя выдаётся правильно (windows), а если так: C:\windows\, то имя уже не выдаётся, т.к. компонент считает, что реальное имя после слеша и оно пусто.

Тут либо упорно тестировать для разных случаев, либо оставить компонент только для файлов.
Или проверять входную строку на наличие последнего символа слеша и удалять, тогда папки верно будет обрабатывать.

Редактировалось 1 раз(а), последний 2017-09-24 00:22:02
карма: 9
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#12: 2017-09-24 00:22:21 ЛС | профиль | цитата
Ты был прав. Сделал по-твоему. Проверяй

--- Добавлено в 2017-09-24 00:24:30

3042 писал(а):
Но ведь имя папки на вход может прийти и без слешей в конце

Это просто парсер без проверок на действительное наличие папок и файлов как таковых.

--- Добавлено в 2017-09-24 00:26:43

3042 писал(а):
Или проверять входную строку на наличие последнего символа слеша и удалять, тогда папки верно будет обрабатывать.

Тут надо очень хорошо подумать, как это отразится на совместимость. Этот компонент довольно популярный, менять туеву хочу схем как-то не радужная перспектива.

Редактировалось 2 раз(а), последний 2017-09-24 00:26:43
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#13: 2017-09-24 08:57:20 ЛС | профиль | цитата
Никогда не открывал кубик FilePartElm.
Открыл...
Вопрос: А зачем пляски с бубном вокруг "/" ?
И чё, функции
ExtractFilePath
ExtractFileName
ExtractFileNameWOext
ExtractFileExt
уже не котируются?

Редактировалось 4 раз(а), последний 2017-09-24 10:46:37
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26149
Рейтинг: 2127
#14: 2017-09-24 11:42:14 ЛС | профиль | цитата
Tad писал(а):
Вопрос: А зачем пляски с бубном вокруг "/" ?

А затем, что бывают пути с прямым слэшем.
Tad писал(а):
уже не котируются

Не, не котрируются. Эти функции у меня такого с одним путем натворили, после чего я их всех и переписал на обратное парсирование.

Редактировалось 1 раз(а), последний 2017-09-24 14:59:54
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#15: 2017-09-24 13:37:01 ЛС | профиль | цитата
nesco писал(а):
А затем, что бывают пути с обратным слэшем.
В Windows все пути с обратным слэшем.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)