Skip to content

Commit e48a7ab

Browse files
authored
Merge pull request #1483 from bonjune/csv-schema-multiline
2 parents a5d36ed + e713809 commit e48a7ab

2 files changed

Lines changed: 34 additions & 1 deletion

File tree

src/FSharp.Data.Csv.Core/CsvInference.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ let internal parseHeaders headers numberOfColumns schema unitsOfMeasureProvider
151151
if String.IsNullOrWhiteSpace schema then
152152
Array.zeroCreate headers.Length
153153
else
154-
use reader = new StringReader(schema)
154+
use reader = new StringReader(schema.Replace("\n", ""))
155155

156156
let schemaStr =
157157
CsvReader.readCsvFile reader "," '"'

tests/FSharp.Data.Tests/CsvProvider.fs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -639,3 +639,36 @@ let ``InferColumnTypes shall infer empty string as Double``() =
639639
let expected = "Double"
640640
let actual = types.[3].Value.InferedType.Name
641641
actual |> should equal expected
642+
643+
let [<Literal>] manyColumnCsv = """
644+
"001","2022-01-01 10:00:00","100.00","John S.","+1 (555) 123-4567","john@example.com","","John Smith","California","Los Angeles","123 Main St.","90001","P001","Widget A","2","25.00"
645+
"002","2022-01-02 14:30:00","50.00","Alice T.","+1 (555) 987-6543","alice@example.com","Please deliver after 6pm.","Alice Thompson","New York","Brooklyn","456 Elm St.","10001","P002","Widget B","1","50.00"
646+
"003","2022-01-03 08:15:00","75.00","Bob R.","+1 (555) 555-1212","bob@example.com","","Bob Robertson","Florida","Miami","789 Oak Ave.","33010","P003","Widget C","3","25.00"
647+
"004","2022-01-04 16:00:00","200.00","Jane D.","+1 (555) 555-5555","jane@example.com","Please include gift receipt.","Jane Doe","Texas","Austin","321 Pine St.","78701","P004","Widget D","4","50.00"
648+
"005","2022-01-05 12:00:00","60.00","Sam G.","+1 (555) 555-1212","sam@example.com","","Sam Green","California","San Francisco","987 Oak St.","94101","P005","Widget E","2","30.00"
649+
"""
650+
651+
[<Test>]
652+
let ``Can infer from a multiline schema`` () =
653+
let csv =
654+
CsvProvider<manyColumnCsv,
655+
HasHeaders = false,
656+
Schema = "OrderNumber (string),
657+
OrderCreated (string),
658+
OrderTotal (string),
659+
FioShort (string),
660+
PhoneNumber (string),
661+
Email (string),
662+
Comment (string),
663+
FioFull (string),
664+
Region (string),
665+
Town (string),
666+
Address (string),
667+
Postindex (string),
668+
ProductId (string),
669+
ProductTitle (string),
670+
ProductQuantity (string),
671+
ProductPrice (string)">.GetSample ()
672+
let firstRow = csv.Rows |> Seq.head
673+
firstRow.OrderCreated |> should equal "2022-01-01 10:00:00"
674+

0 commit comments

Comments
 (0)