mirror of
https://github.com/FourierTransformer/ftcsv.git
synced 2024-11-19 19:54:23 +00:00
Merge pull request #11 from FourierTransformer/os9-line-endings-fix
Mac OS9 line endings fix and BOM removal
This commit is contained in:
commit
54d0817376
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
ftcsv, a fairly fast csv library written in pure Lua. It's been tested with LuaJIT 2.0/2.1 and Lua 5.1, 5.2, and 5.3
|
ftcsv, a fairly fast csv library written in pure Lua. It's been tested with LuaJIT 2.0/2.1 and Lua 5.1, 5.2, and 5.3
|
||||||
|
|
||||||
It works well for CSVs that can easily be fully loaded into memory (easily up to a hundred MB). Currently, there isn't a "large" file mode with proper readers and writers for ingesting CSVs in bulk with a fixed amount of memory. It correctly handles both `\n` (LF) and `\r\n` (CRLF) line endings (ie it should work with Windows and Mac/Linux line endings) and has UTF-8 support.
|
It works well for CSVs that can easily be fully loaded into memory (easily up to a hundred MB). Currently, there isn't a "large" file mode with proper readers and writers for ingesting CSVs in bulk with a fixed amount of memory. It correctly handles both `\n` (LF), `\r` (CR) and `\r\n` (CRLF) line endings (ie it should work with Unix, Mac OS 9, and Windows line endings), and has UTF-8 support (it will strip out BOM if it exists).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package = "ftcsv"
|
package = "ftcsv"
|
||||||
version = "1.1.3-1"
|
version = "1.1.4-1"
|
||||||
|
|
||||||
source = {
|
source = {
|
||||||
url = "git://github.com/FourierTransformer/ftcsv.git",
|
url = "git://github.com/FourierTransformer/ftcsv.git",
|
||||||
tag = "1.1.3"
|
tag = "1.1.4"
|
||||||
}
|
}
|
||||||
|
|
||||||
description = {
|
description = {
|
12
ftcsv.lua
12
ftcsv.lua
@ -1,5 +1,5 @@
|
|||||||
local ftcsv = {
|
local ftcsv = {
|
||||||
_VERSION = 'ftcsv 1.1.3',
|
_VERSION = 'ftcsv 1.1.4',
|
||||||
_DESCRIPTION = 'CSV library for Lua',
|
_DESCRIPTION = 'CSV library for Lua',
|
||||||
_URL = 'https://github.com/FourierTransformer/ftcsv',
|
_URL = 'https://github.com/FourierTransformer/ftcsv',
|
||||||
_LICENSE = [[
|
_LICENSE = [[
|
||||||
@ -215,7 +215,7 @@ local function parseString(inputString, inputLength, delimiter, i, headerField,
|
|||||||
-- end
|
-- end
|
||||||
|
|
||||||
-- newline?!
|
-- newline?!
|
||||||
elseif ((currentChar == CR and nextChar == LF) or currentChar == LF) then
|
elseif (currentChar == CR or currentChar == LF) then
|
||||||
if fieldsToKeep == nil or fieldsToKeep[headerField[fieldNum]] then
|
if fieldsToKeep == nil or fieldsToKeep[headerField[fieldNum]] then
|
||||||
-- create the new field
|
-- create the new field
|
||||||
field = createField(inputString, quote, fieldStart, i, doubleQuoteEscape)
|
field = createField(inputString, quote, fieldStart, i, doubleQuoteEscape)
|
||||||
@ -347,7 +347,13 @@ function ftcsv.parse(inputFile, delimiter, options)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- parse through the headers!
|
-- parse through the headers!
|
||||||
local headerField, i = parseString(inputString, inputLength, delimiter, 1)
|
local startLine = 1
|
||||||
|
|
||||||
|
-- check for BOM
|
||||||
|
if string.byte(inputString, 1) == 239 and string.byte(inputString, 2) == 187 and string.byte(inputString, 3) == 191 then
|
||||||
|
startLine = 4
|
||||||
|
end
|
||||||
|
local headerField, i = parseString(inputString, inputLength, delimiter, startLine)
|
||||||
i = i + 1 -- start at the next char
|
i = i + 1 -- start at the next char
|
||||||
|
|
||||||
-- make sure a header isn't empty
|
-- make sure a header isn't empty
|
||||||
|
1
spec/csvs/bom-os9.csv
Normal file
1
spec/csvs/bom-os9.csv
Normal file
@ -0,0 +1 @@
|
|||||||
|
a,b,c
1,2,3
4,5,ʤ
|
|
1
spec/csvs/os9.csv
Normal file
1
spec/csvs/os9.csv
Normal file
@ -0,0 +1 @@
|
|||||||
|
a,b,c
1,2,3
4,5,ʤ
|
|
12
spec/json/bom-os9.json
Normal file
12
spec/json/bom-os9.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"a": "1",
|
||||||
|
"b": "2",
|
||||||
|
"c": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "4",
|
||||||
|
"b": "5",
|
||||||
|
"c": "ʤ"
|
||||||
|
}
|
||||||
|
]
|
12
spec/json/os9.json
Normal file
12
spec/json/os9.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"a": "1",
|
||||||
|
"b": "2",
|
||||||
|
"c": "3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"a": "4",
|
||||||
|
"b": "5",
|
||||||
|
"c": "ʤ"
|
||||||
|
}
|
||||||
|
]
|
@ -10,6 +10,7 @@ local function loadFile(textFile)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local files = {
|
local files = {
|
||||||
|
"bom-os9",
|
||||||
"comma_in_quotes",
|
"comma_in_quotes",
|
||||||
"correctness",
|
"correctness",
|
||||||
"empty",
|
"empty",
|
||||||
@ -22,6 +23,7 @@ local files = {
|
|||||||
"json_no_newline",
|
"json_no_newline",
|
||||||
"newlines",
|
"newlines",
|
||||||
"newlines_crlf",
|
"newlines_crlf",
|
||||||
|
"os9",
|
||||||
"quotes_and_newlines",
|
"quotes_and_newlines",
|
||||||
"quotes_non_escaped",
|
"quotes_non_escaped",
|
||||||
"simple",
|
"simple",
|
||||||
|
Loading…
Reference in New Issue
Block a user