1 (изменено: sanniauto, 2017-10-21 18:43:30)

Тема: AHK: Чтение текстового файла и символов в нём.

Всем снова здравствуйте, я наткнулся на одну проблему, мне нужно, чтобы подсчитывалось количиство символов в одной строке в файле (.txt).

Если в одной строке символов больше, чем 90, то скрипт выполняет отдельную функцию. То есть, я приведу пример:

В файле txt есть 3 строки:

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswa  ; 90 символов.

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswaaqwe   ; 94 символа.

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswaйц  ; 92 символа.

Далее, скрипт должен вывести в Msgbox, так:


; Первая строка:

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswa ; Итог: 90 символов в одну строку.

; Вторая строка:

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswa
aqwe ; Итог: 94 символа в 2 строки , то есть в одной строке 90 символов, во второй  4.

; Третья строка:

sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswa
йц  ; Итог: 90 символов в одной строке, 2 символа во второй строке.

Примерно как-то так должне работать скрипт, всем заранее спасибо.

2 (изменено: svoboden, 2017-10-18 08:33:49)

Re: AHK: Чтение текстового файла и символов в нём.

var = .......
OutputVar := StrLen(var)
if OutputVar > 90
MsgBox

3 (изменено: sanniauto, 2017-10-21 18:43:47)

Re: AHK: Чтение текстового файла и символов в нём.

Спасибо помогло, но один параметр не работает:
Нужно эту переменную - var - разделить на части, если она больше 90 симовлов имеет.
То есть на одной строке все 90 символов, а во 2,3,4... строки все оставшиеся символы, заранее спасибо.

4 (изменено: svoboden, 2017-10-18 08:34:43)

Re: AHK: Чтение текстового файла и символов в нём.

sanniauto, команды StringLeft, StringRight.

5

Re: AHK: Чтение текстового файла и символов в нём.

svoboden, спасибо большое, вот что у меня получилось:

String = sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswawqwqwqw
StringLeft, OutputVar, String, 90
Msgbox, % Outputvar

Тут он выводит переменную максимум с 90 символами, верно, но как вывести в нижнюю строчку оставшееся символы?

6 (изменено: svoboden, 2017-10-18 09:03:31)

Re: AHK: Чтение текстового файла и символов в нём.

process_list = sssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssswawqwqwqw

    Loop, Parse, process_list
    {
    i++
    if (i > 90)
  a .= A_LoopField
    }
MsgBox % a

Return

7

Re: AHK: Чтение текстового файла и символов в нём.

svoboden, у вас просто золотые руки, спасибо за помощь! Вот полный код:

String := 12345678
StringLeft, OutputVar, String, 5
    Loop, Parse, String
    {
    i++
    if (i > 5)
  a .= A_LoopField
    }
MsgBox % OutPutVar "`n" a

Return

8 (изменено: svoboden, 2017-10-18 19:59:46)

Re: AHK: Чтение текстового файла и символов в нём.

sanniauto, если по правде, то это не совсем правильный вариант, так правильней:

a := SubStr("12345678", 1, 5)
s := SubStr("12345678", 6, 9)
MsgBox % a "`n" s

И даже этот вариант не очень, нужно через регулярные выражения.

9 (изменено: sanniauto, 2017-10-21 18:44:50)

Re: AHK: Чтение текстового файла и символов в нём.

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

a := SubStr("123456789", 1, 5)
s := SubStr("123456789123", 6, 9)
MsgBox % a "`n" s

Скрипт в первую строку, верно делает 5 символов, но во вторую строку, он вставляет все символы, которые остались, а можно ли сделать, чтобы оставшиеся символы вставлялись по последовательным строкам? (1,2,3,4...)
То есть у нас есть 90 символов, он эти все символы распределяет по всем строкам по 5 символов, если 1000 символов, он все эти символы распределяет по строкам, в каждой должно быть макс. 5 символов.

10 (изменено: svoboden, 2017-10-18 22:43:08)

Re: AHK: Чтение текстового файла и символов в нём.

sanniauto, так в задании такого не было же. А так, там все правильно. Просто задайте вместо 5 - 90, и в Msgbox 90 строк не влезет в одну строку, его надо увеличить.

String = 12345678kbsdf

    Loop, Parse, String
    {
   if A_Index <= 5
    d .= A_LoopField
   else if A_Index >= 6
  a .= A_LoopField "`n"
    }
MsgBox % d "`n" a

Return

11

Re: AHK: Чтение текстового файла и символов в нём.

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

12 (изменено: svoboden, 2017-10-19 03:21:44)

Re: AHK: Чтение текстового файла и символов в нём.

sanniauto, у меня только так получилось, хотя, наверное, можно сделать проще:

String = zxcvbnmasdfgjqwert

    Loop, Parse, String
{
   if (A_Index >= 0 and A_Index  <= 5)
d .= A_LoopField
   if (A_Index >= 6 and A_Index  <= 10)
e .= A_LoopField
   if (A_Index >= 10 and A_Index  <= 14)
w .= A_LoopField
   if (A_Index >= 13 and A_Index  <= 17)
u .= A_LoopField
    }
    
n := d "`n" e "`n" w "`n" u
    
MsgBox % n

13

Re: AHK: Чтение текстового файла и символов в нём.

String := "zxcvbnmasdfgjqwerty", n := 5
msgbox % RegexReplace(String, ".{" n "}", "$0`n")

14

Re: AHK: Чтение текстового файла и символов в нём.

svoboden, Malcev, спасибо вам за помощь! Как раз то, что я хотел!

15 (изменено: svoboden, 2017-10-20 02:44:48)

Re: AHK: Чтение текстового файла и символов в нём.

Есть еще такой вариант:

String = zxcvbnmasdfgjqweryuizxcvbnmasdfgjqweryuiasdfgdf
w := 1

Output := StrLen(String)
n := Output / 5

loop % n + 1 {
a := SubStr(String, w, 5)
w += 5
d .= a "`n"
}

MsgBox % d

16 (изменено: sanniauto, 2017-10-21 18:45:53)

Re: AHK: Чтение текстового файла и символов в нём.

Спасибо.

17 (изменено: sanniauto, 2017-10-21 18:46:18)

Re: AHK: Чтение текстового файла и символов в нём.

Malcev, Svoboden, спасибо за помощь, код правда получился хороший. Но у меня еще возникла одна проблема:
Можно ли сделать так, чтобы каждая строка в коде, которая выводится в Msgbox, короче так:
В общем должно получиться так:
SendInput, нажатие F6 текст 1-ой строки Нажатие Enter, задержка 2 секунды, затем след. строка.
SendInput, нажатие F6 текст 2-ой строки Нажатие Enter задержка 2 секунды, затем след. строка.
SendInput, нажатие F6 текст 3-ой строки Нажатие Enter задержка 2 секунды, затем след. строка.
SendInput, нажатие F6 текст 4-ой строки Нажатие Enter задержка 2 секунды, затем след. строка.
И так далее... все последующиеся..
Спасибо заранее.

18 (изменено: sanniauto, 2017-10-19 05:26:43)

Re: AHK: Чтение текстового файла и символов в нём.

Вот я попробовал сделать, у меня получилось такое:

String = zxcvbnmasdfgjqweryuizxcvbnmasdfgjqweryuiasdfgdf
w := 1

Output := StrLen(String)
n := Output / 5

loop % n {
a := SubStr(String, w, 5)
w += 5
d .= a "{Enter}" "{sleep 3000}"
}

SendInput, % d

Или:

String := "zxcvbnmasdfgjqwerty", n := 5
SendInput % RegexReplace(String, ".{" n "}", "$0{Enter}{sleep 3000}")

Тут он вставляет первую переменную, нажимает Enter, ждёт 3 секунды, а затем он вставляет в другие строчки следующие переменные, с Enter, но без Sleep 3000, как сделать, чтобы Sleep 3000 применялось к каждой строчке?

19

Re: AHK: Чтение текстового файла и символов в нём.

А с чего вы взяли, что так можно ставить задержку:
Send Sleep 1000?

20 (изменено: sanniauto, 2017-10-21 18:46:45)

Re: AHK: Чтение текстового файла и символов в нём.

Malcev, это я просто поэкспериментировал, у меня не получилось.

21

Re: AHK: Чтение текстового файла и символов в нём.

И не получится.
Посылайте каждую строку в цикле.

22

Re: AHK: Чтение текстового файла и символов в нём.

То есть каждая строка не сможет вставляться с задержкой 2000?

23

Re: AHK: Чтение текстового файла и символов в нём.

Сможет, если вы будете посылать ее в цикле, а потом ставить задержку.

loop 5
{
   Send % A_Index
   Sleep 2000
}

24 (изменено: sanniauto, 2017-10-21 18:47:15)

Re: AHK: Чтение текстового файла и символов в нём.

А всё сообразил, тут тогда поможет код svoboden.

String = zxcvbnmasdfgjqwert

    Loop, Parse, String
{
   if (A_Index >= 0 and A_Index  <= 5)
d .= A_LoopField
   if (A_Index >= 6 and A_Index  <= 10)
e .= A_LoopField
   if (A_Index >= 11 and A_Index  <= 15)
w .= A_LoopField
   if (A_Index >= 16 and A_Index  <= 20)
u .= A_LoopField
    }
    
n := d "`n" e "`n" w "`n" u
    
MsgBox % n

Тут он сможет посылать каждую строку с задержкой 2000.

25

Re: AHK: Чтение текстового файла и символов в нём.

Вот полный код в общем:

String = 12345678

    Loop, Parse, String
{
   if (A_Index >= 0 and A_Index  <= 5)
d .= A_LoopField
   if (A_Index >= 6 and A_Index  <= 10)
e .= A_LoopField
   if (A_Index >= 11 and A_Index  <= 15)
w .= A_LoopField
   if (A_Index >= 16 and A_Index  <= 20)
u .= A_LoopField
    }
    
SendInput, % d "{Enter}"
Sleep 2000
SendInput, % e "{Enter}"
Sleep 2000
SendInput, % w "{Enter}"
Sleep 2000
SendInput, % u "{Enter}"
Sleep 2000

26 (изменено: sanniauto, 2017-10-21 18:47:29)

Re: AHK: Чтение текстового файла и символов в нём.

Malcev, хм, тут он просто по Loop'у вставляет все строки, но задержки нету, между вставкой каждой строки.

27

Re: AHK: Чтение текстового файла и символов в нём.

Ужасный код.
Можно так:

String := 12345678, Start := 1, Length := 5

loop
{
   if ((NewString := SubStr(String, Start, Length)) = "")
      break
   Send % NewString "{Enter}"
   Start+=Length
   Sleep 2000
}
msgbox done

28

Re: AHK: Чтение текстового файла и символов в нём.

Malcev, вы гений просто! Спасибо!