Форум программистов, компьютерный форум, киберфорум
Lua
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210

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

25.03.2019, 14:38. Показов 6280. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
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 кг конфет вводится с клавиатуры). Добавлено через 18 минут ...

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

9
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
25.03.2019, 18:53
Лучший ответ Сообщение было отмечено 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
Сообщений: 210
25.03.2019, 19:15  [ТС]
vantfiles, большое спасибо! Я не пойму как он работает смотри ты вот сплитил только равно в коде str, "(%w+)=(%w+)=(%w+)=(%w+)" а как определяет что надо еще сплитить запятую ?
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
25.03.2019, 19:21
А никак, разделитель вообще может быть любым, за исключением знака равно.

(%w+) ловит любое к-во символов латиницы и цифр, весь паттерн ловит четыре такие группы со знаками равно между ними.
0
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
25.03.2019, 23:51  [ТС]
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
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
26.03.2019, 16:53
Лучший ответ Сообщение было отмечено 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
Сообщений: 210
26.03.2019, 22:21  [ТС]
vantfiles, Большое спасибо тебе! А это же по сути цикл ? обязательно надо писать v1 v2 v3 v4
я думал будет как в VB 6 тимо n(0)
n(1)
n(2)
n(3)
а тут чет без индекса в чем разница от split
от
string = "cat,dog"
one, two = string.split(",")
без цикла таким способом как я понял реализовать такое нереально по моей строке ?
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
26.03.2019, 22:43
Лучший ответ Сообщение было отмечено Rad0n как решение

Решение

Я не знаю VB 8)
В том бейсике, что я помню, ф-ция не может возвращать несколько значений.
Цикл - да, принципиально, это одна из форм циклов в Луа - цикл с итератором.
Вместо v1 v2 v3 v4 можно написать любые переменные, но нужно помнить - они локальны относительно цикла - вне его их считай что нет.
1
-18 / 3 / 0
Регистрация: 12.01.2014
Сообщений: 210
27.03.2019, 03:16  [ТС]
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
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
27.03.2019, 12:09
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.03.2019, 12:09
Помогаю со студенческими работами здесь

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

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

Выражение (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 рублей. Как это сделать


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru