1 (изменено: NektoN95, 2015-08-06 03:00:48)

Тема: AHK: Левые числа в переменной

Есть функция, которая должна печатать какую-то информацию в файл X.txt. Если файл с таким именем уже существует, она должна добавлять индекс к имени (X1.txt и т д). Вот она

F10::
PrntMssv2Fl("X")
return

PrntMssv2Fl(FileName) {
   IfExist, %FileName%*.txt
{
loop, %FileName%*.txt
{
    StringReplace, MxFlIndx, A_LoopFileName, %FileName%
}
MxFlIndx += 1
}
FileAppend, sdfgsdfg`n, %FileName%%MxFlIndx%.txt
}

Только вот при сохранении файла с четным индексом к этому индексу из ниоткуда прилипает лишняя точка и несколько нулей, типа X2.000000.txt. Откуда эта точка и нули берутся и как их соответственно убрать?

2

Re: AHK: Левые числа в переменной


1::FileAppend, , % CheckPath(A_Desktop "\X.txt")

CheckPath(Path) {
    SplitPath, Path, , OutDir, OutExtension, OutNameNoExt
    While FileExist(Path)  
        Path := OutDir "\" OutNameNoExt " (" A_Index ")" (OutExtension != "" ? "." OutExtension : "")  
    Return Path
}

Нажимать "1", смотреть на рабочий стол.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3 (изменено: NektoN95, 2015-08-06 03:53:09)

Re: AHK: Левые числа в переменной

serzh82saratov, спасибо, воспользуюсь.
Однако, из чистого любопытства, что по сабжу? Да и хорошо бы понять, как ваш код работает...

4

Re: AHK: Левые числа в переменной

что по сабжу

Думал сабж это новое имя файла.
Научно ответить не смогу, но вы складываете явно не числа:

MxFlIndx = 1.txt
MxFlIndx += 1
MsgBox % MxFlIndx

MxFlIndx = 1.000000.txt
MxFlIndx += 1
MsgBox % MxFlIndx

Да и хорошо бы понять, как ваш код работает

Проверяется в цикле существование файла, если такой есть, то добавляем число, и по кругу.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

5 (изменено: NektoN95, 2015-08-06 07:20:31)

Re: AHK: Левые числа в переменной

Научно ответить не смогу, но вы складываете явно не числа:

А, вон оно что, я расширение забыл "отклеить"... Вот он и пытался число вместе с текстом на 1 увеличить. Корректно моя версия должна выглядеть примерно так

PrntMssv2Fl(FileName) {
   IfExist, %FileName%*.txt
{
loop, %FileName%*.txt
{
    SplitPath, A_LoopFileName, , OutDir, OutExtension, OutNameNoExt
    StringReplace, MxFlIndx, OutNameNoExt, %FileName%, 
}
MxFlIndx += 1
}
FileAppend, sdfgsdfg`n, %FileName%%MxFlIndx%.txt
}

6

Re: AHK: Левые числа в переменной

Корректно моя версия должна выглядеть примерно так

Я вообще не пойму логику вашего кода. Например если уже есть файл с именем "CC" и надо создать файл "C", то будет создан "C1", и при следующей попытке каждый раз будет происходить запись в "C1", "C2" уже создан не будет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

7 (изменено: NektoN95, 2015-08-08 23:37:30)

Re: AHK: Левые числа в переменной

Например если уже есть файл с именем "CC"

Ну, такого по некоторым причинам просто не может быть.

и при следующей попытке каждый раз будет происходить запись в "C1", "C2" уже создан не будет.

А вот тут вы уже не правы, читайте код внимательнее.

Цикл loop, %FileName%*.txt Последовательно вводит в тело цикла имена файлов. Тело цикла отрезает от имени файла всё лишнее, оставляя в выходной переменной MxFlIndx только индекс файла. Причем имена файлов поступают в порядке возрастания индекса. Таким образом, когда цикл завершится, в выходной переменной MxFlIndx останется максимальный индекс существующего файла. Далее строка MxFlIndx += 1 увеличивает его на единицу, позволяя использовать его для имени нового файла. И да, я проверял, код работает.

8

Re: AHK: Левые числа в переменной

И да, я проверял, код работает.

Создаём в папке файл "CC.txt", запускаем несколько раз:


SetWorkingDir %A_Desktop% 
PrntMssv2Fl("C")
 
PrntMssv2Fl(FileName) {
   IfExist, %FileName%*.txt
{
loop, %FileName%*.txt
{ 
    SplitPath, A_LoopFileName, , OutDir, OutExtension, OutNameNoExt
    StringReplace, MxFlIndx, OutNameNoExt, %FileName%, 
}
MxFlIndx += 1
} 
FileAppend, sdfgsdfg`n, %FileName%%MxFlIndx%.txt
} 

C1" создаётся, "C2" уже нет.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9 (изменено: Alectric, 2015-08-08 22:31:53)

Re: AHK: Левые числа в переменной

Думаю это условие лишнее:

IfExist, %FileName%*.txt

...

Нет ошибся... наверное...

Пора отдыхать, а то уже "глючу".

Win 10 x64
AHK
                       Справка AHK v1 тебе в помощь.

10

Re: AHK: Левые числа в переменной

Если папка и расширение известны, то всё намного проще:

SetWorkingDir %A_Desktop%

1::FileAppend, , % CheckPath("X")

CheckPath(Name) {  
    While FileExist(Name Num ".txt")
        Num := " (" A_Index ")"
    Return Name Num ".txt"
}
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11 (изменено: serzh82saratov, 2015-08-08 23:24:14)

Re: AHK: Левые числа в переменной

NektoN95 пишет:

Ну, такого по некоторым причинам просто не может быть.

NektoN95 пишет:

читайте код внимательнее.

Видимо внимательностью я совсем обделён.

loop, %FileName%*.txt

Шаблон не подходит под задачу, в случае с файлом "CC", в цикле проверяется и он, хотя он не подходит под условия. После этого в MxFlIndx остаётся "C", далее плюсуется и получается "1", создаётся "C1". При повторной проверке, в цикле сначала прогоняется "C1", и в конце снова "CC" (алфавитный порядок), а так как конечному файлу присваивается имя от последнего файла в цикле, то MxFlIndx так и будет всегда равен 1.

Alectric пишет:

Думаю это условие лишнее:

И  здесь тоже косяк:

IfExist, %FileName%*.txt

Если в папке существует только файл "CC" или например "Caramba", то должен сразу создатся файл "C". Но нет, ведь "CC" подходит по шаблону, ну а что будет дальше, читайте выше.

ап: Точнее не только файл "CC", а после создания нескольких файлов, положите в папку файл "CC", и ваш скрипт будет только дописывать текст в "C1", и ничего более.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

12

Re: AHK: Левые числа в переменной

Если в папке существует только файл "CC" или например "Caramba"

Шаблон не подходит под задачу, в случае с файлом "CC"

Я же писал - подобная ситуация не может сложиться. По той простой причине, что функция не может создать сама по себе файл вида %FileName%%FileName%n.txt. Я этого то-же делать не собираюсь. Тогда в чем проблема? (Это риторический вопрос )

13

Re: AHK: Левые числа в переменной

Я же писал - подобная ситуация не может сложиться

А где вы об этом писали?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

14

Re: AHK: Левые числа в переменной

В седьмом посте.

15

Re: AHK: Левые числа в переменной

Так а где там написано что других файлов там ни в коем случае быть не может? Кто нибудь видит?

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

16

Re: AHK: Левые числа в переменной

Я же писал

Ну, такого по некоторым причинам просто не может быть.

Я не счел нужным писать по каким, сочтя, что какая разница, если данное событие все равно не наступает.
P.S. Уж простите, что запутал, я не специально:)

17

Re: AHK: Левые числа в переменной

Я не счел нужным писать по каким, сочтя, что какая разница

http://static.diary.ru/userdir/2/7/0/3/2703370/74660013.jpg
Запутали, да нет, это я из "по некоторым причинам" не сделал единственно правильных и всевозможных выводов.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui