Files and Streams
Csv Fields
A delimited record can be split into scalar fields with a pattern.
delimited text
Small fixed records are good trace examples when each field becomes a scalar value.
Csv Fields
csv_fields.lua
Replay: real traced execution (multi-file project)
local row = "Ada,admin,3"
local name, role, level = string.match(row, "([^,]+),([^,]+),([^,]+)")
print("row=" .. row)
print("name=" .. name)
print("role=" .. role)
print("level=" .. level)
local row = "Lin,editor,2"
local name, role, level = string.match(row, "([^,]+),([^,]+),([^,]+)")
print("row=" .. row)
print("name=" .. name)
print("role=" .. role)
print("level=" .. level)
local row = "Bo,guest,1"
local name, role, level = string.match(row, "([^,]+),([^,]+),([^,]+)")
print("row=" .. row)
print("name=" .. name)
print("role=" .. role)
print("level=" .. level)
row ← Ada,admin,3, name ← Ada, role ← admin, level ← 3
1local row→ Ada,admin,3 = "Ada,admin,3" --@row="Lin,editor,2", "Bo,guest,1"2local name→ Ada, role→ admin, level→ 3 = string.match(rowAda,admin,3, "([^,]+),([^,]+),([^,]+)")34print("row=" .. rowAda,admin,3)5print("name=" .. nameAda)6print("role=" .. roleadmin)7print("level=" .. level3)outputrow=Ada,admin,3 name=Ada role=admin level=3
row ← Lin,editor,2, name ← Lin, role ← editor, level ← 2
1local row→ Lin,editor,2 = "Lin,editor,2"2local name→ Lin, role→ editor, level→ 2 = string.match(rowLin,editor,2, "([^,]+),([^,]+),([^,]+)")34print("row=" .. rowLin,editor,2)5print("name=" .. nameLin)6print("role=" .. roleeditor)7print("level=" .. level2)outputrow=Lin,editor,2 name=Lin role=editor level=2
row ← Bo,guest,1, name ← Bo, role ← guest, level ← 1
1local row→ Bo,guest,1 = "Bo,guest,1"2local name→ Bo, role→ guest, level→ 1 = string.match(rowBo,guest,1, "([^,]+),([^,]+),([^,]+)")34print("row=" .. rowBo,guest,1)5print("name=" .. nameBo)6print("role=" .. roleguest)7print("level=" .. level1)outputrow=Bo,guest,1 name=Bo role=guest level=1