summaryrefslogtreecommitdiff
path: root/Data/DefaultContent/Libraries/lua-csv/README.md
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-26 11:32:46 +0800
committerchai <chaifix@163.com>2021-10-26 11:32:46 +0800
commit0549b1e5a8a3132005e275d6026db8003cb067d2 (patch)
treef0d7751ec32ecf5c4d23997fa0ffd3450a5a755a /Data/DefaultContent/Libraries/lua-csv/README.md
parent32345800737b668011a87328cd3dcce59ec2934c (diff)
*rename folder
Diffstat (limited to 'Data/DefaultContent/Libraries/lua-csv/README.md')
-rw-r--r--Data/DefaultContent/Libraries/lua-csv/README.md93
1 files changed, 93 insertions, 0 deletions
diff --git a/Data/DefaultContent/Libraries/lua-csv/README.md b/Data/DefaultContent/Libraries/lua-csv/README.md
new file mode 100644
index 0000000..d10314a
--- /dev/null
+++ b/Data/DefaultContent/Libraries/lua-csv/README.md
@@ -0,0 +1,93 @@
+# Lua-CSV - delimited file reading
+
+## 1. What?
+
+Lua-CSV is a Lua module for reading delimited text files (popularly CSV and
+tab-separated files, but you can specify the separator).
+
+Lua-CSV tries to auto-detect whether a file is delimited with commas or tabs,
+copes with non-native newlines, survives newlines and quotes inside quoted
+fields and offers an iterator interface so it can handle large files.
+
+
+## 2. How?
+
+ local csv = require("csv")
+ local f = csv.open("file.csv")
+ for fields in f:lines() do
+ for i, v in ipairs(fields) do print(i, v) end
+ end
+
+`csv.open` takes a second argument `parameters`, a table of parameters
+controlling how the file is read:
+
++ `separator` sets the separator. It'll probably guess the separator
+ correctly if it's a comma or a tab (unless, say, the first field in a
+ tab-delimited file contains a comma), but if you want something else you'll
+ have to set this. It could be more than one character, but it's used as
+ part of a set: `"["..sep.."\n\r]"`
+
++ Set `header` to true if the file contains a header and each set of fields
+ will be keyed by the names in the header rather than by integer index.
+
++ `columns` provides a mechanism for column remapping.
+ Suppose you have a csv file as follows:
+
+ Word,Number
+ ONE,10
+
+ And columns is:
+
+ + `{ word = true }` then the only field in the file would be
+ `{ word = "ONE" }`
+ + `{ first = { name = "word"} }` then it would be `{ first = "ONE" }`
+ + `{ word = { transform = string.lower }}` would give `{ word = "one" }`
+ + finally,
+
+ { word = true
+ number = { transform = function(x) return tonumber(x) / 10 end }}
+
+ would give `{ word = "ONE", number = 1 }`
+
+ A column can have more than one name:
+ `{ first = { names = {"word", "worm"}}}` to help cope with badly specified
+ file formats and spelling mistakes.
+
++ `buffer_size` controls the size of the blocks the file is read in. The
+ default is 1MB. It used to be 4096 bytes which is what `pagesize` says on
+ my system, but that seems kind of small.
+
+`csv.openstring` works exactly like `csv.open` except the first argument
+is the contents of the csv file. In this case `buffer_size` is set to
+the length of the string.
+
+## 3. Requirements
+
+Lua 5.1, 5.2 or LuaJIT.
+
+
+## 4. Issues
+
++ Some whitespace-delimited files might use more than one space between
+ fields, for example if the columns are "manually" aligned:
+
+ street nr city
+ "Oneway Street" 1 Toontown
+
+ It won't cope with this - you'll get lots of extra empty fields.
+
+## 5. Wishlist
+
++ Tests would be nice.
++ So would better LDoc documentation.
+
+
+## 6. Alternatives
+
++ [Penlight](http://github.com/stevedonovan/penlight) contains delimited
+ file reading. It reads the whole file in one go.
++ The Lua Wiki contains two pages on CSV
+ [here](http://lua-users.org/wiki/LuaCsv) and
+ [here](http://lua-users.org/wiki/CsvUtils).
++ There's an example using [LPeg](http://www.inf.puc-rio.br/~roberto/lpeg/)
+ to parse CSV [here](http://www.inf.puc-rio.br/~roberto/lpeg/#CSV)