#r "FSharp.Data.3.0.0\\lib\\net45\\Fsharp.Data.dll" | |
open System.IO; | |
open FSharp.Data | |
type BigOleFile = CsvProvider<"C:\\working\\sample.txt", "\t"> | |
let writeData filePath stringLines = | |
try | |
File.WriteAllLines (filePath , Array.ofList stringLines) | |
Ok (List.length stringLines) | |
with | |
| e -> Error e.Message | |
let loadFile filePath = | |
// Shouldn't these be results to? | |
let folderPath = Path.GetDirectoryName filePath | |
let fileName = Path.GetFileName filePath | |
let getNewFileName v = | |
sprintf "%s%c%s_%s" folderPath Path.DirectorySeparatorChar v fileName | |
let toUpper c = | |
(char ((string c).ToUpper () )) | |
let inRange c1 c2 v = | |
v >= c1 && v <= c2 | |
let groupByFirstCharacterOfIssueColumnName (row:BigOleFile.Row) = | |
match toUpper row.ColumnToGroupBy.[0] with | |
| x when inRange 'A' 'B' x -> "A-B" | |
| x when inRange 'C' 'D' x -> "C-D" | |
| x when inRange 'E' 'F' x -> "E-F" | |
| 'G' -> "G" | |
| x when inRange 'H' 'K' x -> "H-K" | |
| 'L' -> "L" | |
| _ -> "M-Z" | |
let stringifyLine (line:BigOleFile.Row) = | |
sprintf "%s" "redacted" /// blah blah redacted | |
let fileHeader = "" // redacted | |
BigOleFile.Load(filePath).Rows | |
|> Seq.groupBy groupByFirstCharacterOfIssueColumnName | |
|> Seq.iter (fun (groupByKey, groupedRows) -> | |
let newFileName = getNewFileName groupByKey | |
let res = writeData newFileName (fileHeader :: ((groupedRows |> Seq.map stringifyLine) |> List.ofSeq)) | |
match res with | |
| Ok m -> printfn "Wrote file '%s' with '%d' rows" newFileName m | |
| Error x -> printfn "Error writing file '%s'. Error text: %s" newFileName x | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment