|
|
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
натолкнулся на небольшую проблемку, в обсуждениях не нашел. ---------- Есть файл который пользователь сохраняет, в случае если такой файл есть уже в конце имени файла надо добавить цифру, соотв. если есть цифра, ее надо инкрементировать. Например имя файла, "ааа11" надо сделать "ааа12" решил что оптимальным будет "перевернуть" имя файла и использовать VAL() т.е. Val("11aaa") +1 это нужный мне счетчик. как "изящно" перевернуть, в голову ничего не приходит, а может вообще не потому пути пошел? ______________________________________ Strong ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 12:07 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
ADIR() по маске файла+убираем буквы из имени+сортируем массив по убыванию=> следующий номер = первый элемент массива+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 12:54 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
Инвертировать не получиться. Точнее, результат будет не тот, что нужно: Инвертируем "a12" - получаем "21а" - число 21 - следующее 22 - имя "а22" Т.е. вместо ожидаемого "а13" имеем "а22" Проще всего дописывать не число, а дату-время в символьном выражении: ?TTOC(DATETIME(),1) Получишь символьную строку вида ГГГГММДДЧЧММСС или год-месяц-день-час-минуты-секунды без разделителей. Вероятность повторного значения есть, но минимальная. Можно предварительно проверить факт существования файла с таким именем и повторить формирование имени, если есть дубль. Вряд ли будет больше 2 циклов формирования имени. Если все-таки хочется выделить числовую часть и есть уверенность, что числа могут быть только и исключительно в конце имени файла, то можно так: Код: plaintext 1. 2. 3. 4. "Фокус" тут в следующем. Сначала я выбрасываю из имени файла все цифры. Полученную символьную строку использую как список символов, которые надо выбросить из строки. В реузльтате, остануться только и исключительно цифры. Однако такой способ не применим, если возможно перемешивание букв и цифр. Ну, например, при выделении только цифр из имени вроде "a1b2c3" получим число "123". И что с ним делать дальше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 13:22 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
написал вот так но не очень нравится, может есть вариант изящнее cl_FileXl -имя файла cl_CountFile- счетчик в кнце имени файла cl_FileXl="131kljhhjkl123f" cl_CountFile="" cl_CutSmbl="" FOR l_I=1 TO LEN(cl_FileXl) cl_CutSmbl=LEFT(RIGHT(cl_FileXl,l_I),1) IF ISDIGIT(cl_CutSmbl) cl_CountFile=cl_CutSmbl+cl_CountFile ELSE EXIT ENDIF ENDFOR cl_FileXl=SUBSTR(cl_FileXl,1, LEN(cl_FileXl)-LEN(cl_CountFile) ); +PADL( ; TRANSFORM( VAL(cl_CountFile)+1 ) ,; IIF( LEN(cl_CountFile)<3, 3,LEN(cl_CountFile) ),; "0"; ) MESSAGEBOX(cl_FileXl) ______________________________________ Strong ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 13:24 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
ВладимирМ Если все-таки хочется выделить числовую часть и есть уверенность, что числа могут быть только и исключительно в конце имени файла, то можно так: Код: plaintext 1. 2. 3. 4. "Фокус" тут в следующем. Сначала я выбрасываю из имени файла все цифры. Полученную символьную строку использую как список символов, которые надо выбросить из строки. В реузльтате, остануться только и исключительно цифры. Однако такой способ не применим, если возможно перемешивание букв и цифр. Ну, например, при выделении только цифр из имени вроде "a1b2c3" получим число "123". И что с ним делать дальше? Предлагаю не "убивать" буквы, а заменить их, например, на "_". Ну и дальше RAT() и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 13:58 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
ВладимирМОднако такой способ не применим, если возможно перемешивание букв и цифр. Ну, например, при выделении только цифр из имени вроде "a1b2c3" получим число "123". И что с ним делать дальше? Имя файла может быть любым. насчет ВладимирМ дописывать не число, а дату-время в символьном выражении имя файла слишком удлиннится, пользователям не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 14:51 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
Что-то вроде этого: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 14:53 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
Простейшее решение, это вообще не анализировать имя существующего файла. Идешь с другого конца. Формируешь имя файла, если такое имя есть, увеличиваешь счетчик и опять проверяешь. Ну, примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Т.е. не надо "выцарапывать" какие-то фрагменты из существующих файлов. Все формируешь сам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 15:18 |
|
||
|
Счетчик в конце имени файла
|
|||
|---|---|---|---|
|
#18+
ВладимирМПростейшее решение, это вообще не анализировать имя существующего файла. Идешь с другого конца. Формируешь имя файла, если такое имя есть, увеличиваешь счетчик и опять проверяешь. Ну, примерно так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Т.е. не надо "выцарапывать" какие-то фрагменты из существующих файлов. Все формируешь сам. В общем согласен, в моем случае подобный подход будет более эффективен. Всем большое спасибо, за дельные советы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.02.2006, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=274&tid=1592356]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
45ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 191ms |
| total: | 288ms |

| 0 / 0 |
