Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Выгрузить текст из файла
Fire73
сообщение 16.6.2019, 17:02
Сообщение #1


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



Есть txt файл, в нём по строкам написан текст.

Пример:
Алёша Попович
Дмитрий Иванов
Костя Дзю
..............

Нужно выгрузить их в скрипт и как пример присвоить слову "Алёша" переменную "#A1", слову "Попович" переменную "A2"

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

Очень буду благодарен за помощь!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.6.2019, 17:19
Сообщение #2


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Код
load_array %arr C:\123.txt
//log %arr [1]   // первая строка из файла
//log %arr [2]   // вторая

log clear
log mode compact

set $regexp "[^ ]+"  
set #n regexp (#pos $a1 %arr[1] $regexp)  // поиск в строке любого текста до пробела
if  #n = 1
    log $a1
end_if

set $regexp "(?<= )[^ ]+"
set #n regexp (#pos $a2 %arr[1] $regexp)  // поиск в строке текста после пробела
if  #n = 1
    log $a2
end_if

delete_array %arr -1  // удалить первую строку из массива
save_array %arr C:\456.txt    // сохранить массив в файл, можно в тот же 123.txt
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fire73
сообщение 16.6.2019, 17:49
Сообщение #3


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



Цитата(cirus @ 16.6.2019, 18:19) *

Код
load_array %arr C:\123.txt
//log %arr [1]   // первая строка из файла
//log %arr [2]   // вторая

log clear
log mode compact

set $regexp "[^ ]+"  
set #n regexp (#pos $a1 %arr[1] $regexp)  // поиск в строке любого текста до пробела
if  #n = 1
    log $a1
end_if

set $regexp "(?<= )[^ ]+"
set #n regexp (#pos $a2 %arr[1] $regexp)  // поиск в строке текста после пробела
if  #n = 1
    log $a2
end_if

delete_array %arr -1  // удалить первую строку из массива
save_array %arr C:\456.txt    // сохранить массив в файл, можно в тот же 123.txt
end_script



Спасибо, ты супер! Как этому научиться?))

У меня еще вопрос, но он чуть чуть не по теме.
Вот у меня скрипт создает папки telega1, telega2, telega3...

Как сделать так, чтобы при создании очередной папки, скрипт для начала узнал, свободно ли название папки? Если занято, то создал бы с другой цифрой по порядку: telega4
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.6.2019, 18:19
Сообщение #4


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
Как сделать так, чтобы при создании очередной папки, скрипт для начала узнал, свободно ли название папки? Если занято, то создал бы с другой цифрой по порядку: telega4

Код
dir (%result "C:\12345" "*" norecursion)      // узнать количество файлов/папок в папке C:\12345
set %z [1] size(%result) + 1  // прибавить 1 к количеству
dircreate (C:\12345\telega%z[1])  // создать папку telega
end_script

При каждом запуске скрипта в папку C:\12345 будет добавляться папка telega1, telega2 и т. д.
При этом в папке C:\12345 не должно быть других файлов и папок, иначе придётся проверять сколько из них не telega.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fire73
сообщение 16.6.2019, 18:38
Сообщение #5


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



Цитата(cirus @ 16.6.2019, 19:19) *

Код
dir (%result "C:\12345" "*" norecursion)      // узнать количество файлов/папок в папке C:\12345
set %z [1] size(%result) + 1  // прибавить 1 к количеству
dircreate (C:\12345\telega%z[1])  // создать папку telega
end_script

При каждом запуске скрипта в папку C:\12345 будет добавляться папка telega1, telega2 и т. д.
При этом в папке C:\12345 не должно быть других файлов и папок, иначе придётся проверять сколько из них не telega.


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

Чтобы было понятнее напишу "пример" : C:\12345\telega%z[1]\telegram.exe
Как решить этот вопрос, чтобы туда закидывался файл и запускался?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 16.6.2019, 18:47
Сообщение #6


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Код
dir (%result C:\12345 "*" norecursion)      // узнать количество файлов/папок в папке C:\12345
set %z [1] size(%result) + 1  // прибавить 1 к количеству
dircreate (C:\12345\telega%z[1])  // создать папку telega
wait 500
filecopy (C:\Windows\System32\calc.exe C:\12345\telega%z[1]\calc.exe) // скопировать калькулятор
wait 500
exec C:\12345\telega%z[1]\calc.exe    // запустить
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fire73
сообщение 16.6.2019, 19:08
Сообщение #7


**

Neophyte
Сообщений: 34
Регистрация: 5.6.2019
Группа: Пользователи
Наличность: 0
Пользователь №: 19.343
Возраст: 23



Цитата(cirus @ 16.6.2019, 19:47) *

Код
dir (%result C:\12345 "*" norecursion)      // узнать количество файлов/папок в папке C:\12345
set %z [1] size(%result) + 1  // прибавить 1 к количеству
dircreate (C:\12345\telega%z[1])  // создать папку telega
wait 500
filecopy (C:\Windows\System32\calc.exe C:\12345\telega%z[1]\calc.exe) // скопировать калькулятор
wait 500
exec C:\12345\telega%z[1]\calc.exe    // запустить
end_script



Спасибо! Вся проблема была в ковычках
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Fors1k
сообщение 16.6.2019, 21:58
Сообщение #8


*****

Journeyman
Сообщений: 497
Регистрация: 19.12.2017
Группа: Пользователи
Наличность: 2420
Пользователь №: 18.746



Цитата(Fire73 @ 16.6.2019, 17:02) *

Есть txt файл, в нём по строкам написан текст.

Пример:
Алёша Попович
Дмитрий Иванов
Костя Дзю
..............

Нужно выгрузить их в скрипт и как пример присвоить слову "Алёша" переменную "#A1", слову "Попович" переменную "A2"

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


--------------------
Для связиИзображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 19.6.2019, 1:04
Сообщение #9


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



пытаюсь конвертировать данные из таблицы(тхт) в более читабельный вариант...вроде как числа, разбирать строку и конвертировать их выходит...но собрать ее из полученных данных не получается, чо делаю не так
Код

log clear
log mode compact
set %arr [1 10] 1000,550,9200000,1250,55000,999 //для примера получаем такую строку из файла
set delimiter ',' //устанавливаем делиметр что бы смогли получить строку и разбить на подстроки
init_arr %a %arr [1 10] //представляем ее в виде подстрок %a [1 1] %a [1 2] %a [1 3] %a [1 4] и т.д.
set delimiter '' //возвращаем по умолчанию что бы могли работать
//тут нужно обработать все имеющиеся значения подстроки
for #i 1 size(%a)
    log число подстроки %a [#i 1]
    if  %a [#i 1] < 1000 //число меньше 1кг запишем в грамах
        //set %r %a [#i 1])
        log %a [#i 1]г,
        set $z [#i 1] %a [#i 1]г, //записать результат
    end_if
    if  %a [#i 1] > 999 and %a [#i 1] < 1000000 //число от 1кг и до 1т запишем в КГ
        set %am math.dbl (%a [#i 1]  / 1000) //переводим в килограммы
        gosub convert
        log %am [1]кг,
        set $z [#i 1] %a [1]кг, //записать результат
    end_if
    if  %a [#i 1]  > 999999 //число от 1т запишем в Т
        set %am math.dbl (%a [#i 1]  / 1000000) //переводим в тонны
        gosub convert
        log %am [1]т,
        set $z [#i 1] %am [1]т, //....записать результат
    end_if

end_for
log $z [1] //собрать строку и вывести её
end_script
:convert
    //log чо сокророщаем %am [1]
    set $temp %am [1]
    set $c trunc($temp)
    set $b frac($temp)
    while 1 = 1
        set $temp copy($b size($b) 1)
        if  $temp = 0
            set $b Delete($b size($b) 1)
        else
            break
        end_if
    end_while
    set %am[1] $c
    if  $b != ""
        set %am [1 2] ","
        set %am [1 3] $b
    end_if
    //log получаем %am [1]
return
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 19.6.2019, 1:38
Сообщение #10


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26540
Пользователь №: 16.971
Возраст: 29



Цитата
но собрать ее из полученных данных не получается, чо делаю не так

Для примера:
Код
init_arr %a (1) 1кг 550г 9т
set $z ""

log clear
log mode compact
for #i 1 size(%a[])
    log %a[1 #i]
    set $z $z %a[1 #i]
end_for
log $z
end_script
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
FREEON
сообщение 19.6.2019, 10:29
Сообщение #11


*****

Journeyman
Сообщений: 365
Регистрация: 14.2.2017
Группа: Пользователи
Наличность: 1319
Пользователь №: 18.346
Возраст: 25



Цитата(cirus @ 19.6.2019, 1:38) *

Для примера:
Код
init_arr %a (1) 1кг 550г 9т
set $z ""

log clear
log mode compact
for #i 1 size(%a[])
    log %a[1 #i]
    set $z $z %a[1 #i]
end_for
log $z
end_script


Благодарю, помог. Ток в моем случае size пришлось оставить таким каким был...массивы это прикольно но темная и неисследованная сторона
код
Код

log clear
log mode compact
set %arr [1 10] 1000,550,9200000,1250,55000,999 //для примера получаем такую строку из файла
log %arr [1 10]
set delimiter ',' //устанавливаем делиметр что бы смогли получить строку и разбить на подстроки
init_arr %a %arr [1 10] //представляем ее в виде подстрок %a [1 1] %a [1 2] %a [1 3] %a [1 4] и т.д.
set delimiter '' //возвращаем по умолчанию что бы могли работать
//тут нужно обработать все имеющиеся значения подстроки
set delimiter ''
for #i 1 size(%a)
    //log число подстроки %a [#i 1]
    if  %a [#i 1] < 1000 //число меньше 1кг запишем в грамах
        //log %a [#i 1]г,
        set $z $z %a [#i 1]г, //записать результат
    end_if
    if  %a [#i 1] > 999 and %a [#i 1] < 1000000 //число от 1кг и до 1т запишем в КГ
        set %am math.dbl (%a [#i 1]  / 1000) //переводим в килограммы
        gosub convert
        //log %am [1]кг,
        set $z $z %am [1]кг, //записать результат
    end_if
    if  %a [#i 1]  > 999999 //число от 1т запишем в Т
        set %am math.dbl (%a [#i 1]  / 1000000) //переводим в тонны
        gosub convert
        //log %am [1]т,
        set $z $z %am [1]т, //....записать результат
    end_if

end_for
log $z //собрать строку и вывести её
end_script
:convert
    //log чо сокророщаем %am [1]
    set $temp %am [1]
    set $c trunc($temp)
    set $b frac($temp)
    while 1 = 1
        set $temp copy($b size($b) 1)
        if  $temp = 0
            set $b Delete($b size($b) 1)
        else
            break
        end_if
    end_while
    set %am[1] $c
    if  $b != ""
        set %am [1 2] ","
        set %am [1 3] $b
    end_if
    //log получаем %am [1]
return
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 18:27
Designed by Nickostyle