-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 208
1

Парсинг строки такого вида и проверки в каждой строке слов "1=GO=100=300,2=RUN=100=200"

25.03.2019, 14:38. Показов 5612. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача сплитить каждое слово в строке на этом языке никак не получается даже по дукументации помогите пожалуйста

Есть строка запятая отделяет колиство строк их тоже надо посчитать


"1=GO=100=300,2=RUN=100=200"


На VB 6 Это делает очень легко вот так помогите сделать тоже самое только на LUA замучался уже даже по дументация не получается какой то он очень помещанный на циклах что ничего не получается

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
'Сплитим количество символов , у нас их 1
'С помощью UBound(s) показываем сколько их всего переменная s хранить количество строк
s = Split(Text1.Text, ",")
'UBound(s) - Количество строк
'Теперь зная сколько строк в строке надо перебрать каждую и сплитить в каждой строке уже символы =
 
'Считаем от 0 Потому что в vb 6 отсчет начинается с нуля до количетсва символов в итоге как раз получается два символа начиная с нуля в строке у нас UBound будет 1 потому что запятая одна
For i = 0 To UBound(s) '
'Теперь сплитим равно в каждой строке на VB 6 Это делается легко так
h = Split(s(i), "=")
 
'Теперь он в цикле будет показывается каждое слово и в каждой строке которая была заспличена через знак равно которую сплитит через запятую как сделть такое же на lua помогите пожалуйста замучался уже даже по документации не получается
'h(0) - Первые данные Будет показано    1
'h(1) - Вторые данные Будет показано    RUN
'h(3) - Третьи данные будет показано    100
'h(4) - Четвертые данные будет показано 200
'И потом он просто дальше идет по строке и показывает остальные данные пока не закончится строчка
 
MsgBox h(0)
MsgBox h(1)
MsgBox h(2)
MsgBox h(3)
 
Next i
На
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2019, 14:38
Ответы с готовыми решениями:

Есть 3 списка l1 = [1,2,3,…,9], l2 = [10,20,30,…,90], l3 = [100,200,300,…,900]
Составить из них новый список l = .

Напечатать таблицу стоимости 100, 200, 300, ., 2000 г конфет
Напечатать таблицу стоимости 100, 200, 300, ..., 2000 г конфет(стоимость 1 кг конфет вводится с...

Ввести матрицу размерностью 5x5, состоящую их целых чисел в промежутке от —100 до +100. В каждой строке поменять местами наибольший и наименьший элеме
Ввести матрицу размерностью 5x5, состоящую их целых чисел в промежутке от —100 до +100. В каждой...

Как сгенерировать 200 случайных чисел без повторов в интервале 100-300
Нужно сделать так, чтобы сгенерировалось заданное число чисел, например, 200. При этом они не...

С клавиатуры ввести стоимость одного кг конфет. Напечатать таблицу стоимости 100, 200, 300, ., 2000 г конфе
С клавиатуры ввести стоимость одного кг конфет. Напечатать таблицу стоимости 100, 200, 300, ...,...

9
995 / 1818 / 174
Регистрация: 07.05.2013
Сообщений: 3,839
Записей в блоге: 12
25.03.2019, 18:53 2
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

Lua
1
2
3
4
5
6
7
8
9
10
local str = "1=GO=100=300,2=RUN=100=200"
 
local n = 0
 
for v1, v2, v3, v4 in string.gmatch( str, "(%w+)=(%w+)=(%w+)=(%w+)" ) do
    print( v1, v2, v3, v4 )
    n = n + 1
end
 
print( "Count = " .. n )
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 208
25.03.2019, 19:15  [ТС] 3
vantfiles, большое спасибо! Я не пойму как он работает смотри ты вот сплитил только равно в коде str, "(%w+)=(%w+)=(%w+)=(%w+)" а как определяет что надо еще сплитить запятую ?
0
995 / 1818 / 174
Регистрация: 07.05.2013
Сообщений: 3,839
Записей в блоге: 12
25.03.2019, 19:21 4
А никак, разделитель вообще может быть любым, за исключением знака равно.

(%w+) ловит любое к-во символов латиницы и цифр, весь паттерн ловит четыре такие группы со знаками равно между ними.
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 208
25.03.2019, 23:51  [ТС] 5
vantfiles, Слушай есть проблема как исправить когда пишу число с точкой "100.300"то он выводит только 100 а не все число 100.300

Lua
1
2
3
4
5
6
7
8
local str = "1=GO=100.300=300,2=RUN=100=200"
 
local n = 0
 
for v1, v2, v3, v4 in string.gmatch( str, "(%w+)=(%w+)=(%w+)=(%w+)" ) do
    print(v3)
 
end
0
995 / 1818 / 174
Регистрация: 07.05.2013
Сообщений: 3,839
Записей в блоге: 12
26.03.2019, 16:53 6
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

Lua
1
2
3
4
5
6
7
8
9
10
local str = "1=GO=100.123=300,2=RUN=100.465=200.789"
 
local n = 0
 
for v1, v2, v3, v4 in string.gmatch( str, "(%w*%.*%w*)=(%w*%.*%w*)=(%w*%.*%w*)=(%w*%.*%w*)" ) do
    print( v1, v2, v3, v4 )
    n = n + 1
end
 
print( "Count = " .. n )
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 208
26.03.2019, 22:21  [ТС] 7
vantfiles, Большое спасибо тебе! А это же по сути цикл ? обязательно надо писать v1 v2 v3 v4
я думал будет как в VB 6 тимо n(0)
n(1)
n(2)
n(3)
а тут чет без индекса в чем разница от split
от
string = "cat,dog"
one, two = string.split(",")
без цикла таким способом как я понял реализовать такое нереально по моей строке ?
0
995 / 1818 / 174
Регистрация: 07.05.2013
Сообщений: 3,839
Записей в блоге: 12
26.03.2019, 22:43 8
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

Я не знаю VB 8)
В том бейсике, что я помню, ф-ция не может возвращать несколько значений.
Цикл - да, принципиально, это одна из форм циклов в Луа - цикл с итератором.
Вместо v1 v2 v3 v4 можно написать любые переменные, но нужно помнить - они локальны относительно цикла - вне его их считай что нет.
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 208
27.03.2019, 03:16  [ТС] 9
vantfiles,
Теперь со знаком минус не печается пытаюсь пытаюсь понять как сплитить вроде параметр %d отвечает за минус ток не пойму синтакс (

Lua
1
2
3
4
5
6
7
8
9
local str = "1=GO=-100.123=300,2=RUN=-100.465=200.789"
 
local n = 0
 
for v1, v2, v3, v4 in string.gmatch( str, "(%w*%.*%w*)=(%w*%.*%w*)=(%w*%.*%w*)=(%w*%.*%w*)" ) do
    print(v3)
    n = n + 1
end
print( "Count = " .. n )
0
995 / 1818 / 174
Регистрация: 07.05.2013
Сообщений: 3,839
Записей в блоге: 12
27.03.2019, 12:09 10
Lua
1
2
3
4
5
local str = "1=GO=+100.123=-300,2=RUN=100.465=-200.789"
 
for v1, v2, v3, v4 in string.gmatch( str, "([%+%-]*%w*%.*%w*)=([%+%-]*%w*%.*%w*)=([%+%-]*%w*%.*%w*)=([%+%-]*%w*%.*%w*)" ) do
    print( v1, v2, v3, v4 )
end
Добавлено через 5 минут
%d - десятичная цифра, знак сюда не входит
1
27.03.2019, 12:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2019, 12:09
Помогаю со студенческими работами здесь

Выражение (100 / 300) * 100 выдает ноль
Почему? В переменную какого бы типа я не указал это выражение, получившееся значение всегда равно...

Дано число c – стоимость 1 кг яблок Выведите стоимости 100 г, 200 г, 300 г, …, 3 кг яблок
1)Дано число c – стоимость 1 кг яблок. Выведите стоимости 100 г, 200 г, 300 г, …, 3 кг яблок.

Нужно купить 20 книжек на 1800 рублей по 100 ,200 ,300 рублей, как это сделать
Нужно купить 20 книжек на 1800 рублей по 100, 200, 300 рублей. Как это сделать

Напечатать таблицу стоимости 100,200,300....., 2000 г конфет(стоимость 1 кг конфет вводится с клавиатуры)
Дайте код прог. (Уважения Вам за вашу роботу) Напечатать таблицу стоимости 100,200,300.....,...

Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000 и 3000 г. Сколькими способами гирями этого набор
Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000 и 3000 г. Сколькими...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru