diff --git a/README.md b/README.md index d46e21d..a084fd5 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ A Go-based tool for modifying XML, JSON, and text documents using XPath/JSONPath - String manipulations - Date conversions - Structural changes + - CSV/TSV parsing with comments and headers - Whole ass Lua environment - **Error Handling**: Comprehensive error detection for: - Invalid XML/JSON @@ -101,6 +102,87 @@ chef -xml "//item" "if tonumber(v.stock) > 0 then v.price = v.price * 0.8 end" i ``` +### 6. CSV/TSV Processing +The Lua environment includes CSV parsing functions that support comments, headers, and custom delimiters. + +```lua +-- Basic CSV parsing +local rows = fromCSV(csvText) + +-- With options +local rows = fromCSV(csvText, { + delimiter = "\t", -- Tab delimiter for TSV (default: ",") + hasHeaders = true, -- First row is headers (default: false) + hasComments = true -- Filter lines starting with # (default: false) +}) + +-- Access by index +local value = rows[1][2] + +-- Access by header name (when hasHeaders = true) +local value = rows[1].Name + +-- Convert back to CSV +local csv = toCSV(rows, "\t") -- Optional delimiter parameter +``` + +**Example with commented TSV file:** +```lua +-- Input file: +-- #mercenary_profiles +-- Id Name Value +-- 1 Test 100 +-- 2 Test2 200 + +local csv = readFile("mercenaries.tsv") +local rows = fromCSV(csv, { + delimiter = "\t", + hasHeaders = true, + hasComments = true +}) + +-- Access data +rows[1].Name -- "Test" +rows[2].Value -- "200" +``` + +## Lua Helper Functions + +The Lua environment includes many helper functions: + +### Math Functions +- `min(a, b)`, `max(a, b)` - Min/max of two numbers +- `round(x, n)` - Round to n decimal places +- `floor(x)`, `ceil(x)` - Floor/ceiling functions + +### String Functions +- `upper(s)`, `lower(s)` - Case conversion +- `trim(s)` - Remove leading/trailing whitespace +- `format(s, ...)` - String formatting +- `strsplit(inputstr, sep)` - Split string by separator + +### CSV Functions +- `fromCSV(csv, options)` - Parse CSV/TSV text into table of rows + - Options: `delimiter` (default: ","), `hasHeaders` (default: false), `hasComments` (default: false) +- `toCSV(rows, delimiter)` - Convert table of rows back to CSV text + +### Conversion Functions +- `num(str)` - Convert string to number (returns 0 if invalid) +- `str(num)` - Convert number to string +- `is_number(str)` - Check if string is numeric + +### Table Functions +- `isArray(t)` - Check if table is a sequential array +- `dump(table, depth)` - Print table structure recursively + +### HTTP Functions +- `fetch(url, options)` - Make HTTP request, returns response table + - Options: `method`, `headers`, `body` + - Returns: `{status, statusText, ok, body, headers}` + +### Regex Functions +- `re(pattern, input)` - Apply regex pattern, returns table with matches + ## Installation ```bash