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

row
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)
  1. 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
  1. 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
  1. 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