├── .gitattributes
├── .vscode
└── settings.json
├── LICENSE
├── README.md
├── images
├── CSVReadTitanic.gif
├── CSVReadWrite.gif
├── Chart_1_Time_v_Rows.jpg
├── Chart_2_Time_v_Rows.jpg
├── Chart_3_Time_v_Rows.jpg
├── Chart_4_Time_v_Rows.jpg
├── Chart_5_Time_v_Cols.jpg
├── Chart_6_Time_v_FieldLength.jpg
├── Chart_7_Time_v_FieldLength.jpg
└── VBAReferences.png
├── julia
├── benchmarkCSV.jl
├── juliaparsetimes(CSV_version_main_as_of_29-Aug-2021).csv
├── juliaparsetimes.csv
└── juliaparsetimes_CSV_version_0.9.0.csv
├── testfiles
├── 20x20_triangular.csv
├── 255_characters-ANSI.csv
├── 255_characters-UTF-16-BE-BOM.csv
├── 255_characters-UTF-16-LE-BOM.csv
├── 255_characters-UTF-8-BOM.csv
├── 255_characters-UTF-8.csv
├── Chars_14_to_55295_UTF-16_BE_BOM.tsv
├── Chars_14_to_55295_UTF-16_LE_BOM.tsv
├── Chars_14_to_55295_UTF-8.tsv
├── Chars_14_to_55295_UTF-8_BOM.tsv
├── Chars_1_to_65535_UTF-16_LE_BOM.csv
├── Chars_1_to_65535_UTF-16_LE_BOM.tsv
├── Enedis_smart_meter_data.csv
├── FL_insurance_sample.csv
├── Fielding.csv
├── Four_by_four_ragged.csv
├── GSM2230757_human1_umifm_counts.csv
├── Not_RFC_4180_Compliant_01.csv
├── Not_RFC_4180_Compliant_02.csv
├── Not_RFC_4180_Compliant_03.csv
├── Not_RFC_4180_Compliant_04.csv
├── Not_RFC_4180_Compliant_05.csv
├── Not_RFC_4180_Compliant_06.csv
├── Not_RFC_4180_Compliant_07.csv
├── Not_RFC_4180_Compliant_08.csv
├── Not_RFC_4180_Compliant_09.csv
├── Not_RFC_4180_Compliant_10.csv
├── Not_RFC_4180_Compliant_11.csv
├── Not_RFC_4180_Compliant_12.csv
├── Not_RFC_4180_Compliant_13.csv
├── Not_RFC_4180_Compliant_14.csv
├── Not_RFC_4180_Compliant_15.csv
├── Not_RFC_4180_Compliant_16.csv
├── Not_RFC_4180_Compliant_17.csv
├── Not_RFC_4180_Compliant_18.csv
├── Not_RFC_4180_Compliant_19.csv
├── Not_RFC_4180_Compliant_20.csv
├── Not_RFC_4180_Compliant_21.csv
├── Not_RFC_4180_Compliant_22.csv
├── Not_RFC_4180_Compliant_23.csv
├── Not_RFC_4180_Compliant_24.csv
├── Not_RFC_4180_Compliant_25.csv
├── Not_RFC_4180_Compliant_26.csv
├── Not_RFC_4180_Compliant_27.csv
├── Not_RFC_4180_Compliant_28.csv
├── Not_RFC_4180_Compliant_29.csv
├── Not_RFC_4180_Compliant_30.csv
├── Not_RFC_4180_Compliant_31.csv
├── Not_RFC_4180_Compliant_32.csv
├── Not_RFC_4180_Compliant_33.csv
├── Not_RFC_4180_Compliant_34.csv
├── Not_RFC_4180_Compliant_35.csv
├── Not_RFC_4180_Compliant_36.csv
├── Not_RFC_4180_Compliant_37.csv
├── Not_RFC_4180_Compliant_38.csv
├── Not_RFC_4180_Compliant_39.csv
├── Not_RFC_4180_Compliant_40.csv
├── Not_RFC_4180_Compliant_41.csv
├── Not_RFC_4180_Compliant_42.csv
├── Not_RFC_4180_Compliant_43.csv
├── Not_RFC_4180_Compliant_44.csv
├── Not_RFC_4180_Compliant_45.csv
├── Not_RFC_4180_Compliant_46.csv
├── Not_RFC_4180_Compliant_47.csv
├── Not_RFC_4180_Compliant_48.csv
├── Not_RFC_4180_Compliant_49.csv
├── SacramentocrimeJanuary2006.csv
├── Sacramentorealestatetransactions.csv
├── SalesJan2009.csv
├── TechCrunchcontinentalUSA.csv
├── ampm.csv
├── attenu.csv
├── baseball.csv
├── big_types.csv
├── boolext.csv
├── bools.csv
├── bug555.txt
├── categorical.csv
├── census.txt
├── comma_decimal.csv
├── csv_segfault.txt
├── dash_as_null.csv
├── double_quote_quotechar_and_escapechar.csv
├── error_comment.txt
├── escape_row_starts.csv
├── fecal_samples.csv
├── heat_flux.dat
├── int64_overflow.csv
├── issue_120.csv
├── issue_198.csv
├── issue_198_part2.csv
├── issue_207.csv
├── latest (1).csv
├── log001_vehicle_status_flags_0.txt
├── norwegian_data.csv
├── one_empty_line_windows.csv
├── pandas_zeros.csv
├── plus_as_null.csv
├── precompile.csv
├── precompile_small.csv
├── single_character.csv
├── stocks.csv
├── table_test.txt
├── test_2_footer_rows.csv
├── test_32K_limit.csv
├── test_32K_limit_quote_handling.csv
├── test_32K_limit_quote_handling_2.csv
├── test_508.csv
├── test_array_lower_bounds.csv
├── test_bad_D-M-Y.csv
├── test_bad_ISO8601.csv
├── test_bad_M-D-Y.csv
├── test_bad_Y-M-D.csv
├── test_bad_inputs.csv
├── test_basic.csv
├── test_basic_pipe.csv
├── test_column-by-column.csv
├── test_comment_first_row.csv
├── test_comments1.csv
├── test_comments_multichar.csv
├── test_comments_multiple.csv
├── test_converttypes_arg.csv
├── test_correct_trailing_missings.csv
├── test_crlf_line_endings.csv
├── test_d-m-y_with_time.csv
├── test_date_format_conflict.csv
├── test_date_format_conflict_2.csv
├── test_date_separator_is_space.csv
├── test_dateformat.csv
├── test_dates.csv
├── test_datetimes.csv
├── test_delim.tsv
├── test_delim.wsv
├── test_empty_file.csv
├── test_empty_file_newlines.csv
├── test_empty_lines.csv
├── test_excel_date_formats.csv
├── test_file_issue_154.csv
├── test_float_in_int_column.csv
├── test_floats.csv
├── test_footer_missing.csv
├── test_good_D-M-Y.csv
├── test_good_ISO8601.csv
├── test_good_M-D-Y.csv
├── test_good_Y-M-D.csv
├── test_header_on_row_4.csv
├── test_headers.csv
├── test_headers_in_fixed_width_file.csv
├── test_ignoring_repeated_multicharacter_delimiter.csv
├── test_infer_delimiter_first_field_is_datetime_ANSI_Bar.csv
├── test_infer_delimiter_first_field_is_datetime_ANSI_Semi colon.csv
├── test_infer_delimiter_first_field_is_datetime_ANSI_Tab.csv
├── test_infer_delimiter_first_field_is_datetime_ANSI_comma.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-16_Bar.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-16_Semi colon.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-16_Tab.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-16_comma.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-8_Bar.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-8_Semi colon.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-8_Tab.csv
├── test_infer_delimiter_first_field_is_datetime_UTF-8_comma.csv
├── test_inferring_delimiter_when_decimal_is_comma.csv
├── test_int_sentinel.csv
├── test_issue_326.wsv
├── test_keep_quotes.csv
├── test_m-d-y_with_time.csv
├── test_mac_line_endings.csv
├── test_missing_last_column.csv
├── test_missing_last_field.csv
├── test_missing_value.csv
├── test_missing_value_NULL.csv
├── test_mixed_date_formats.csv
├── test_multiple_missing.csv
├── test_newline_line_endings.csv
├── test_no_header.csv
├── test_not_delimited.csv
├── test_not_delimited.txt
├── test_not_enough_columns.csv
├── test_not_enough_columns2.csv
├── test_null_only_column.csv
├── test_one_row_of_data.csv
├── test_padding.csv
├── test_quoted_delim_and_newline.csv
├── test_quoted_headers.csv
├── test_quoted_numbers.csv
├── test_ragged_headers.csv
├── test_repeated_delim_371.csv
├── test_repeated_delimiters.csv
├── test_simple_quoted.csv
├── test_single_column.csv
├── test_skip_args.csv
├── test_skip_args_with_comments.csv
├── test_skiptocol_is_string.csv
├── test_skiptocol_is_string_with_empty_rows.csv
├── test_skiptocol_is_string_with_empty_rows_and_commented_rows.csv
├── test_skiptorow_and_headerrow_equal_and_greater_than_1.csv
├── test_strange_delimiter.csv
├── test_strange_number_formats.csv
├── test_string_delimiters.csv
├── test_tab_null_empty.txt
├── test_tab_null_string.txt
├── test_too_few_headers.csv
├── test_triangular.csv
├── test_truestrings.csv
├── test_two_digit_DMY_dates.csv
├── test_two_digit_MDY_dates.csv
├── test_two_digit_YMD_dates.csv
├── test_types.csv
├── test_utf16.csv
├── test_utf16_le.csv
├── test_utf8.csv
├── test_utf8_with_BOM.csv
├── test_various_time_formats.csv
├── test_windows.csv
├── test_y-m-d_dates_with_fractional_seconds.csv
├── test_y-m-d_with_time.csv
├── time.csv
├── types_override.csv
└── utf_8_with_bom.csv
├── testresults
└── SpeedTestRDatasets.csv
├── vba
├── VBA-CSV-GIFMaker.xlsm
│ ├── AuditSheetComments.txt
│ ├── FilesInProject.txt
│ ├── Module1.bas
│ ├── VBA-CSV-GIFMaker.xlsm
│ └── modClipboard.bas
├── VBA-CSV.xlsm
│ ├── AuditSheetComments.txt
│ ├── FilesInProject.txt
│ ├── Formulas
│ │ ├── CSVWriteTests.txt
│ │ ├── DateParsingTest.txt
│ │ ├── GIF.txt
│ │ ├── GIF2.txt
│ │ ├── GIF3.txt
│ │ ├── Performance (10).txt
│ │ ├── Performance (2).txt
│ │ ├── Performance (3).txt
│ │ ├── Performance (4).txt
│ │ ├── Performance (6).txt
│ │ ├── Performance (7).txt
│ │ ├── Performance (8).txt
│ │ ├── Performance (9).txt
│ │ ├── Performance.txt
│ │ ├── RegExp.txt
│ │ └── Test.txt
│ ├── VBA-CSV.xlsm
│ ├── VBA
│ │ ├── CSVinterface.cls
│ │ ├── ECPArrayList.cls
│ │ ├── ECPTextStream.cls
│ │ ├── ThisWorkbook.cls
│ │ ├── modCSVNotRFC4180.bas
│ │ ├── modCSVPerformance.bas
│ │ ├── modCSVPerformanceLowLevel.bas
│ │ ├── modCSVReadWrite.bas
│ │ ├── modCSVTest.bas
│ │ ├── modCSVTestDeps.bas
│ │ ├── modCSVTestRDatasets.bas
│ │ ├── modCSVTestRoundTrip.bas
│ │ ├── modCSVTestUtils.bas
│ │ ├── modCSVWritePerformance.bas
│ │ ├── modCSVXLUtils.bas
│ │ ├── parserConfig.cls
│ │ ├── sdkn104_CSVUtils.bas
│ │ └── shTest.cls
│ └── Values
│ │ ├── Audit.csv
│ │ ├── CSVWriteTests.csv
│ │ ├── DateParsingTest.csv
│ │ ├── GIF.csv
│ │ ├── GIF2.csv
│ │ ├── GIF3.csv
│ │ ├── HiddenSheet.csv
│ │ ├── Performance (10).csv
│ │ ├── Performance (2).csv
│ │ ├── Performance (3).csv
│ │ ├── Performance (4).csv
│ │ ├── Performance (6).csv
│ │ ├── Performance (7).csv
│ │ ├── Performance (8).csv
│ │ ├── Performance (9).csv
│ │ ├── Performance.csv
│ │ ├── RegExp.csv
│ │ ├── Test.csv
│ │ └── TestResults.csv
└── VBA-CVS-HelpGenerator.xlsm
│ ├── AuditSheetComments.txt
│ ├── FilesInProject.txt
│ ├── Formulas
│ └── Help.txt
│ ├── VBA-CVS-HelpGenerator.xlsm
│ ├── VBA
│ ├── Module1.bas
│ ├── modCSVHelp.bas
│ ├── modDependencies.bas
│ └── modIntellisense.bas
│ └── Values
│ ├── Audit.csv
│ └── Help.csv
└── workbooks
├── VBA-CSV-GIFMaker.xlsm
├── VBA-CSV-Intellisense.xlsx
├── VBA-CSV.xlsm
└── VBA-CVS-HelpGenerator.xlsm
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.bas linguist-language=VBA
2 | *.cls linguist-language=VBA
3 |
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {}
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Philip Swannell
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/images/CSVReadTitanic.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/CSVReadTitanic.gif
--------------------------------------------------------------------------------
/images/CSVReadWrite.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/CSVReadWrite.gif
--------------------------------------------------------------------------------
/images/Chart_1_Time_v_Rows.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_1_Time_v_Rows.jpg
--------------------------------------------------------------------------------
/images/Chart_2_Time_v_Rows.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_2_Time_v_Rows.jpg
--------------------------------------------------------------------------------
/images/Chart_3_Time_v_Rows.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_3_Time_v_Rows.jpg
--------------------------------------------------------------------------------
/images/Chart_4_Time_v_Rows.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_4_Time_v_Rows.jpg
--------------------------------------------------------------------------------
/images/Chart_5_Time_v_Cols.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_5_Time_v_Cols.jpg
--------------------------------------------------------------------------------
/images/Chart_6_Time_v_FieldLength.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_6_Time_v_FieldLength.jpg
--------------------------------------------------------------------------------
/images/Chart_7_Time_v_FieldLength.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/Chart_7_Time_v_FieldLength.jpg
--------------------------------------------------------------------------------
/images/VBAReferences.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/images/VBAReferences.png
--------------------------------------------------------------------------------
/julia/benchmarkCSV.jl:
--------------------------------------------------------------------------------
1 | using CSV#= as of 29 Aug 2021 one needs the main version of CSV, latest released version
2 | 0.8.5 fails to load some of the files. See https://github.com/JuliaData/CSV.jl/issues/879
3 | Use:
4 | ]add CSV#main
5 | =#
6 | using DataFrames
7 |
8 | function benchmark()
9 | #= folder points to where the VBA method RunSpeedTests writes performance test files.
10 | See workbooks/VBA-CSV.xlsm, module modCSVPerformance =#
11 |
12 | folder = joinpath(ENV["TEMP"],"VBA-CSV/Performance")
13 | outputfile = normpath(joinpath(@__DIR__,"..","julia/juliaparsetimes.csv"))
14 | outputfile = outputfile * "2"
15 | benchmark_csvs_in_folder(folder,outputfile)
16 | end
17 |
18 | """
19 | benchmark_csvs_in_folder(folder::String, outputfile::String)
20 | Benchmark all .csv files in `folder`, writing results to `outputfile`.
21 | """
22 | function benchmark_csvs_in_folder(folder::String, outputfile::String)
23 | files = readdir(folder, join=true)
24 | files = filter(x -> x[end - 3:end] == ".csv", files)# only .csv files
25 |
26 | n = length(files)
27 | times = fill(0.0, n)
28 | numcalls = fill(0, n)
29 | statuses = fill("OK", n)
30 |
31 | foo = benchmarkonefile(files[1], 1)# for compilation "warmup"
32 | for (f, i) in zip(files, 1:n)
33 | println(i, f)
34 | try
35 | times[i], numcalls[i] = benchmarkonefile(f, 5)
36 | catch e
37 | statuses[i] = "$e"
38 | end
39 | end
40 | times
41 |
42 | result = DataFrame(filename=replace.(files, "/" => "\\"), time=times,
43 | status=statuses, numcalls=numcalls)
44 | CSV.write(outputfile, result)
45 | end
46 |
47 | """
48 | benchmarkonefile(filename::String, timeout::Int)
49 | Average time (over sufficient trials to take `timeout` seconds) to load file `filename` to
50 | a DataFrame, using CSV.File.
51 | """
52 | function benchmarkonefile(filename::String, timeout::Int)
53 | i = 0 ; time2 = time() # needed to give variables scope outside the loop.
54 | time1 = time()
55 | while true
56 | i = i + 1
57 | res = CSV.File(filename, header=false, type=String) |> DataFrame
58 | time2 = time()
59 | time2 - time1 < timeout || break
60 | end
61 | (time2 - time1) / i, i
62 | end
63 |
64 | function shownotcompliantfile(filenum::String)
65 | filename = "C:/Projects/VBA-CSV/testfiles/Not_RFC_4180_Compliant_" * filenum * ".csv"
66 | res = CSV.File(filename, header=false, delim = ",",type=String) |>DataFrame
67 | Matrix(res)
68 | end
--------------------------------------------------------------------------------
/testfiles/20x20_triangular.csv:
--------------------------------------------------------------------------------
1 | 1x1
2 | 2x1,2x2
3 | 3x1,3x2,3x3
4 | 4x1,4x2,4x3,4x4
5 | 5x1,5x2,5x3,5x4,5x5
6 | 6x1,6x2,6x3,6x4,6x5,6x6
7 | 7x1,7x2,7x3,7x4,7x5,7x6,7x7
8 | 8x1,8x2,8x3,8x4,8x5,8x6,8x7,8x8
9 | 9x1,9x2,9x3,9x4,9x5,9x6,9x7,9x8,9x9
10 | 10x1,10x2,10x3,10x4,10x5,10x6,10x7,10x8,10x9,10x10
11 | 11x1,11x2,11x3,11x4,11x5,11x6,11x7,11x8,11x9,11x10,11x11
12 | 12x1,12x2,12x3,12x4,12x5,12x6,12x7,12x8,12x9,12x10,12x11,12x12
13 | 13x1,13x2,13x3,13x4,13x5,13x6,13x7,13x8,13x9,13x10,13x11,13x12,13x13
14 | 14x1,14x2,14x3,14x4,14x5,14x6,14x7,14x8,14x9,14x10,14x11,14x12,14x13,14x14
15 | 15x1,15x2,15x3,15x4,15x5,15x6,15x7,15x8,15x9,15x10,15x11,15x12,15x13,15x14,15x15
16 | 16x1,16x2,16x3,16x4,16x5,16x6,16x7,16x8,16x9,16x10,16x11,16x12,16x13,16x14,16x15,16x16
17 | 17x1,17x2,17x3,17x4,17x5,17x6,17x7,17x8,17x9,17x10,17x11,17x12,17x13,17x14,17x15,17x16,17x17
18 | 18x1,18x2,18x3,18x4,18x5,18x6,18x7,18x8,18x9,18x10,18x11,18x12,18x13,18x14,18x15,18x16,18x17,18x18
19 | 19x1,19x2,19x3,19x4,19x5,19x6,19x7,19x8,19x9,19x10,19x11,19x12,19x13,19x14,19x15,19x16,19x17,19x18,19x19
20 | 20x1,20x2,20x3,20x4,20x5,20x6,20x7,20x8,20x9,20x10,20x11,20x12,20x13,20x14,20x15,20x16,20x17,20x18,20x19,20x20
21 |
--------------------------------------------------------------------------------
/testfiles/255_characters-ANSI.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/255_characters-ANSI.csv
--------------------------------------------------------------------------------
/testfiles/255_characters-UTF-16-BE-BOM.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/255_characters-UTF-16-BE-BOM.csv
--------------------------------------------------------------------------------
/testfiles/255_characters-UTF-16-LE-BOM.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/255_characters-UTF-16-LE-BOM.csv
--------------------------------------------------------------------------------
/testfiles/255_characters-UTF-8-BOM.csv:
--------------------------------------------------------------------------------
1 | N,Char
2 | 1,
3 | 2,
4 | 3,
5 | 4,
6 | 5,
7 | 6,
8 | 7,
9 | 8,
10 | 9,
11 | 10,"
12 | "
13 | 11,
14 | 12,
15 | 13,"
16 | "
17 | 14,
18 | 15,
19 | 16,
20 | 17,
21 | 18,
22 | 19,
23 | 20,
24 | 21,
25 | 22,
26 | 23,
27 | 24,
28 | 25,
29 | 26,
30 | 27,
31 | 28,
32 | 29,
33 | 30,
34 | 31,
35 | 32,
36 | 33,!
37 | 34,""""
38 | 35,#
39 | 36,$
40 | 37,%
41 | 38,&
42 | 39,'
43 | 40,(
44 | 41,)
45 | 42,*
46 | 43,+
47 | 44,","
48 | 45,-
49 | 46,.
50 | 47,/
51 | 48,0
52 | 49,1
53 | 50,2
54 | 51,3
55 | 52,4
56 | 53,5
57 | 54,6
58 | 55,7
59 | 56,8
60 | 57,9
61 | 58,:
62 | 59,;
63 | 60,<
64 | 61,=
65 | 62,>
66 | 63,?
67 | 64,@
68 | 65,A
69 | 66,B
70 | 67,C
71 | 68,D
72 | 69,E
73 | 70,F
74 | 71,G
75 | 72,H
76 | 73,I
77 | 74,J
78 | 75,K
79 | 76,L
80 | 77,M
81 | 78,N
82 | 79,O
83 | 80,P
84 | 81,Q
85 | 82,R
86 | 83,S
87 | 84,T
88 | 85,U
89 | 86,V
90 | 87,W
91 | 88,X
92 | 89,Y
93 | 90,Z
94 | 91,[
95 | 92,\
96 | 93,]
97 | 94,^
98 | 95,_
99 | 96,`
100 | 97,a
101 | 98,b
102 | 99,c
103 | 100,d
104 | 101,e
105 | 102,f
106 | 103,g
107 | 104,h
108 | 105,i
109 | 106,j
110 | 107,k
111 | 108,l
112 | 109,m
113 | 110,n
114 | 111,o
115 | 112,p
116 | 113,q
117 | 114,r
118 | 115,s
119 | 116,t
120 | 117,u
121 | 118,v
122 | 119,w
123 | 120,x
124 | 121,y
125 | 122,z
126 | 123,{
127 | 124,|
128 | 125,}
129 | 126,~
130 | 127,
131 | 128,€
132 | 129,
133 | 130,‚
134 | 131,ƒ
135 | 132,„
136 | 133,…
137 | 134,†
138 | 135,‡
139 | 136,ˆ
140 | 137,‰
141 | 138,Š
142 | 139,‹
143 | 140,Œ
144 | 141,
145 | 142,Ž
146 | 143,
147 | 144,
148 | 145,‘
149 | 146,’
150 | 147,“
151 | 148,”
152 | 149,•
153 | 150,–
154 | 151,—
155 | 152,˜
156 | 153,™
157 | 154,š
158 | 155,›
159 | 156,œ
160 | 157,
161 | 158,ž
162 | 159,Ÿ
163 | 160,
164 | 161,¡
165 | 162,¢
166 | 163,£
167 | 164,¤
168 | 165,¥
169 | 166,¦
170 | 167,§
171 | 168,¨
172 | 169,©
173 | 170,ª
174 | 171,«
175 | 172,¬
176 | 173,
177 | 174,®
178 | 175,¯
179 | 176,°
180 | 177,±
181 | 178,²
182 | 179,³
183 | 180,´
184 | 181,µ
185 | 182,¶
186 | 183,·
187 | 184,¸
188 | 185,¹
189 | 186,º
190 | 187,»
191 | 188,¼
192 | 189,½
193 | 190,¾
194 | 191,¿
195 | 192,À
196 | 193,Á
197 | 194,Â
198 | 195,Ã
199 | 196,Ä
200 | 197,Å
201 | 198,Æ
202 | 199,Ç
203 | 200,È
204 | 201,É
205 | 202,Ê
206 | 203,Ë
207 | 204,Ì
208 | 205,Í
209 | 206,Î
210 | 207,Ï
211 | 208,Ð
212 | 209,Ñ
213 | 210,Ò
214 | 211,Ó
215 | 212,Ô
216 | 213,Õ
217 | 214,Ö
218 | 215,×
219 | 216,Ø
220 | 217,Ù
221 | 218,Ú
222 | 219,Û
223 | 220,Ü
224 | 221,Ý
225 | 222,Þ
226 | 223,ß
227 | 224,à
228 | 225,á
229 | 226,â
230 | 227,ã
231 | 228,ä
232 | 229,å
233 | 230,æ
234 | 231,ç
235 | 232,è
236 | 233,é
237 | 234,ê
238 | 235,ë
239 | 236,ì
240 | 237,í
241 | 238,î
242 | 239,ï
243 | 240,ð
244 | 241,ñ
245 | 242,ò
246 | 243,ó
247 | 244,ô
248 | 245,õ
249 | 246,ö
250 | 247,÷
251 | 248,ø
252 | 249,ù
253 | 250,ú
254 | 251,û
255 | 252,ü
256 | 253,ý
257 | 254,þ
258 | 255,ÿ
259 |
--------------------------------------------------------------------------------
/testfiles/255_characters-UTF-8.csv:
--------------------------------------------------------------------------------
1 | N,Char
2 | 1,
3 | 2,
4 | 3,
5 | 4,
6 | 5,
7 | 6,
8 | 7,
9 | 8,
10 | 9,
11 | 10,"
12 | "
13 | 11,
14 | 12,
15 | 13,"
16 | "
17 | 14,
18 | 15,
19 | 16,
20 | 17,
21 | 18,
22 | 19,
23 | 20,
24 | 21,
25 | 22,
26 | 23,
27 | 24,
28 | 25,
29 | 26,
30 | 27,
31 | 28,
32 | 29,
33 | 30,
34 | 31,
35 | 32,
36 | 33,!
37 | 34,""""
38 | 35,#
39 | 36,$
40 | 37,%
41 | 38,&
42 | 39,'
43 | 40,(
44 | 41,)
45 | 42,*
46 | 43,+
47 | 44,","
48 | 45,-
49 | 46,.
50 | 47,/
51 | 48,0
52 | 49,1
53 | 50,2
54 | 51,3
55 | 52,4
56 | 53,5
57 | 54,6
58 | 55,7
59 | 56,8
60 | 57,9
61 | 58,:
62 | 59,;
63 | 60,<
64 | 61,=
65 | 62,>
66 | 63,?
67 | 64,@
68 | 65,A
69 | 66,B
70 | 67,C
71 | 68,D
72 | 69,E
73 | 70,F
74 | 71,G
75 | 72,H
76 | 73,I
77 | 74,J
78 | 75,K
79 | 76,L
80 | 77,M
81 | 78,N
82 | 79,O
83 | 80,P
84 | 81,Q
85 | 82,R
86 | 83,S
87 | 84,T
88 | 85,U
89 | 86,V
90 | 87,W
91 | 88,X
92 | 89,Y
93 | 90,Z
94 | 91,[
95 | 92,\
96 | 93,]
97 | 94,^
98 | 95,_
99 | 96,`
100 | 97,a
101 | 98,b
102 | 99,c
103 | 100,d
104 | 101,e
105 | 102,f
106 | 103,g
107 | 104,h
108 | 105,i
109 | 106,j
110 | 107,k
111 | 108,l
112 | 109,m
113 | 110,n
114 | 111,o
115 | 112,p
116 | 113,q
117 | 114,r
118 | 115,s
119 | 116,t
120 | 117,u
121 | 118,v
122 | 119,w
123 | 120,x
124 | 121,y
125 | 122,z
126 | 123,{
127 | 124,|
128 | 125,}
129 | 126,~
130 | 127,
131 | 128,€
132 | 129,
133 | 130,‚
134 | 131,ƒ
135 | 132,„
136 | 133,…
137 | 134,†
138 | 135,‡
139 | 136,ˆ
140 | 137,‰
141 | 138,Š
142 | 139,‹
143 | 140,Œ
144 | 141,
145 | 142,Ž
146 | 143,
147 | 144,
148 | 145,‘
149 | 146,’
150 | 147,“
151 | 148,”
152 | 149,•
153 | 150,–
154 | 151,—
155 | 152,˜
156 | 153,™
157 | 154,š
158 | 155,›
159 | 156,œ
160 | 157,
161 | 158,ž
162 | 159,Ÿ
163 | 160,
164 | 161,¡
165 | 162,¢
166 | 163,£
167 | 164,¤
168 | 165,¥
169 | 166,¦
170 | 167,§
171 | 168,¨
172 | 169,©
173 | 170,ª
174 | 171,«
175 | 172,¬
176 | 173,
177 | 174,®
178 | 175,¯
179 | 176,°
180 | 177,±
181 | 178,²
182 | 179,³
183 | 180,´
184 | 181,µ
185 | 182,¶
186 | 183,·
187 | 184,¸
188 | 185,¹
189 | 186,º
190 | 187,»
191 | 188,¼
192 | 189,½
193 | 190,¾
194 | 191,¿
195 | 192,À
196 | 193,Á
197 | 194,Â
198 | 195,Ã
199 | 196,Ä
200 | 197,Å
201 | 198,Æ
202 | 199,Ç
203 | 200,È
204 | 201,É
205 | 202,Ê
206 | 203,Ë
207 | 204,Ì
208 | 205,Í
209 | 206,Î
210 | 207,Ï
211 | 208,Ð
212 | 209,Ñ
213 | 210,Ò
214 | 211,Ó
215 | 212,Ô
216 | 213,Õ
217 | 214,Ö
218 | 215,×
219 | 216,Ø
220 | 217,Ù
221 | 218,Ú
222 | 219,Û
223 | 220,Ü
224 | 221,Ý
225 | 222,Þ
226 | 223,ß
227 | 224,à
228 | 225,á
229 | 226,â
230 | 227,ã
231 | 228,ä
232 | 229,å
233 | 230,æ
234 | 231,ç
235 | 232,è
236 | 233,é
237 | 234,ê
238 | 235,ë
239 | 236,ì
240 | 237,í
241 | 238,î
242 | 239,ï
243 | 240,ð
244 | 241,ñ
245 | 242,ò
246 | 243,ó
247 | 244,ô
248 | 245,õ
249 | 246,ö
250 | 247,÷
251 | 248,ø
252 | 249,ù
253 | 250,ú
254 | 251,û
255 | 252,ü
256 | 253,ý
257 | 254,þ
258 | 255,ÿ
259 |
--------------------------------------------------------------------------------
/testfiles/Chars_14_to_55295_UTF-16_BE_BOM.tsv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/Chars_14_to_55295_UTF-16_BE_BOM.tsv
--------------------------------------------------------------------------------
/testfiles/Chars_14_to_55295_UTF-16_LE_BOM.tsv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/Chars_14_to_55295_UTF-16_LE_BOM.tsv
--------------------------------------------------------------------------------
/testfiles/Chars_1_to_65535_UTF-16_LE_BOM.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/Chars_1_to_65535_UTF-16_LE_BOM.csv
--------------------------------------------------------------------------------
/testfiles/Chars_1_to_65535_UTF-16_LE_BOM.tsv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/Chars_1_to_65535_UTF-16_LE_BOM.tsv
--------------------------------------------------------------------------------
/testfiles/Four_by_four_ragged.csv:
--------------------------------------------------------------------------------
1 | A,B,C,D
2 | 1
3 | 1,2
4 | 1,2,3
5 | 1,2,3,4
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_01.csv:
--------------------------------------------------------------------------------
1 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_02.csv:
--------------------------------------------------------------------------------
1 | D,D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_03.csv:
--------------------------------------------------------------------------------
1 | ,D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_04.csv:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_05.csv:
--------------------------------------------------------------------------------
1 | ,
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_06.csv:
--------------------------------------------------------------------------------
1 | ,
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_07.csv:
--------------------------------------------------------------------------------
1 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_08.csv:
--------------------------------------------------------------------------------
1 | D , D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_09.csv:
--------------------------------------------------------------------------------
1 | D,
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_10.csv:
--------------------------------------------------------------------------------
1 | A,
2 | B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_11.csv:
--------------------------------------------------------------------------------
1 | ,
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_12.csv:
--------------------------------------------------------------------------------
1 | ,
2 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_13.csv:
--------------------------------------------------------------------------------
1 | A
2 | B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_14.csv:
--------------------------------------------------------------------------------
1 | D
2 |
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_15.csv:
--------------------------------------------------------------------------------
1 |
2 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_16.csv:
--------------------------------------------------------------------------------
1 |
2 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_17.csv:
--------------------------------------------------------------------------------
1 | A
B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_18.csv:
--------------------------------------------------------------------------------
1 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_19.csv:
--------------------------------------------------------------------------------
1 |
D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_20.csv:
--------------------------------------------------------------------------------
1 |
D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_21.csv:
--------------------------------------------------------------------------------
1 | A
2 | B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_22.csv:
--------------------------------------------------------------------------------
1 | D
2 |
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_23.csv:
--------------------------------------------------------------------------------
1 |
2 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_24.csv:
--------------------------------------------------------------------------------
1 |
2 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_25.csv:
--------------------------------------------------------------------------------
1 | " D "
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_26.csv:
--------------------------------------------------------------------------------
1 | "D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_27.csv:
--------------------------------------------------------------------------------
1 | "D",D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_28.csv:
--------------------------------------------------------------------------------
1 | D,"D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_29.csv:
--------------------------------------------------------------------------------
1 | A,"B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_30.csv:
--------------------------------------------------------------------------------
1 | A,B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_31.csv:
--------------------------------------------------------------------------------
1 | "A,B
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_32.csv:
--------------------------------------------------------------------------------
1 | """D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_33.csv:
--------------------------------------------------------------------------------
1 | "D"""
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_34.csv:
--------------------------------------------------------------------------------
1 | "A""B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_35.csv:
--------------------------------------------------------------------------------
1 | "A
2 | B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_36.csv:
--------------------------------------------------------------------------------
1 | "A
B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_37.csv:
--------------------------------------------------------------------------------
1 | "A
2 | B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_38.csv:
--------------------------------------------------------------------------------
1 | A
2 | B,C
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_39.csv:
--------------------------------------------------------------------------------
1 | A,B
2 | C
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_40.csv:
--------------------------------------------------------------------------------
1 | A
2 | ;B,C
3 | D
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_41.csv:
--------------------------------------------------------------------------------
1 | "D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_42.csv:
--------------------------------------------------------------------------------
1 | "A,B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_43.csv:
--------------------------------------------------------------------------------
1 | "D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_44.csv:
--------------------------------------------------------------------------------
1 | "D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_45.csv:
--------------------------------------------------------------------------------
1 | "D"z
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_46.csv:
--------------------------------------------------------------------------------
1 | "A,B"z
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_47.csv:
--------------------------------------------------------------------------------
1 | z"D"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_48.csv:
--------------------------------------------------------------------------------
1 | z"A,B"
--------------------------------------------------------------------------------
/testfiles/Not_RFC_4180_Compliant_49.csv:
--------------------------------------------------------------------------------
1 | z"D"z
--------------------------------------------------------------------------------
/testfiles/ampm.csv:
--------------------------------------------------------------------------------
1 | ID,INTERLOCK_NUMBER,INTERLOCK_DESCRIPTION,TYPE,CREATE_DATE,MODIFY_DATE,USERNAME,UNIT,AREA,PURPOSE,PID,LOCATION,FUNC_DATE,FUNC_BY,TECHNICAL_DESCRIPTION,types
2 | 4473,,This is a test interlock,,2/9/2012,11/2/2018,REDACTED ,U ,U ,This is a test interlock,,,1/1/1900,,This is a test interlock,O
3 | 3513,REDACTED,"
REDACTED:
REDACTED
",,7/22/1998 4:37:01 PM,6/20/2019,REDACTED ,A ,RM , REDACTED,,,1/1/1900,,"REDACTED
REDACTED
REDACTED
",SC
--------------------------------------------------------------------------------
/testfiles/attenu.csv:
--------------------------------------------------------------------------------
1 | "Event","Mag","Station","Dist","Accel"
2 | 1,7.0,"117",12.0,0.359
3 | 2,7.4,"1083",148.0,0.014
4 | 2,7.4,"1095",42.0,0.196
5 | 2,7.4,"283",85.0,0.135
6 | 2,7.4,"135",107.0,0.062
7 | 2,7.4,"475",109.0,0.054
8 | 2,7.4,"113",156.0,0.014
9 | 2,7.4,"1008",224.0,0.018
10 | 2,7.4,"1028",293.0,0.01
11 | 2,7.4,"2001",359.0,0.004
12 | 2,7.4,"117",370.0,0.004
13 | 3,5.3,"1117",8.0,0.127
14 | 4,6.1,"1438",16.1,0.411
15 | 4,6.1,"1083",63.6,0.018
16 | 4,6.1,"1013",6.6,0.509
17 | 4,6.1,"1014",9.3,0.467
18 | 4,6.1,"1015",13.0,0.279
19 | 4,6.1,"1016",17.3,0.072
20 | 4,6.1,"1095",105.0,0.012
21 | 4,6.1,"1011",112.0,0.006
22 | 4,6.1,"1028",123.0,0.003
23 | 5,6.6,"270",105.0,0.018
24 | 5,6.6,"280",122.0,0.048
25 | 5,6.6,"116",141.0,0.011
26 | 5,6.6,"266",200.0,0.007
27 | 5,6.6,"117",45.0,0.142
28 | 5,6.6,"113",130.0,0.031
29 | 5,6.6,"112",147.0,0.006
30 | 5,6.6,"130",187.0,0.01
31 | 5,6.6,"475",197.0,0.01
32 | 5,6.6,"269",203.0,0.006
33 | 5,6.6,"135",211.0,0.013
34 | 6,5.6,"1093",62.0,0.005
35 | 7,5.7,"1093",62.0,0.003
36 | 8,5.3,"111",19.0,0.086
37 | 8,5.3,"116",21.0,0.179
38 | 8,5.3,"290",13.0,0.205
39 | 8,5.3,"112",22.0,0.073
40 | 8,5.3,"113",29.0,0.045
41 | 9,6.6,"128",17.0,0.374
42 | 9,6.6,"126",19.6,0.2
43 | 9,6.6,"127",20.2,0.147
44 | 9,6.6,"141",21.1,0.188
45 | 9,6.6,"266",21.9,0.204
46 | 9,6.6,"110",24.2,0.335
47 | 9,6.6,"1027",66.0,0.057
48 | 9,6.6,"111",87.0,0.021
49 | 9,6.6,"125",23.4,0.152
50 | 9,6.6,"135",24.6,0.217
51 | 9,6.6,"475",25.7,0.114
52 | 9,6.6,"262",28.6,0.15
53 | 9,6.6,"269",37.4,0.148
54 | 9,6.6,"1052",46.7,0.112
55 | 9,6.6,"411",56.9,0.043
56 | 9,6.6,"290",60.7,0.057
57 | 9,6.6,"130",61.4,0.03
58 | 9,6.6,"272",62.0,0.027
59 | 9,6.6,"1096",64.0,0.028
60 | 9,6.6,"1102",82.0,0.034
61 | 9,6.6,"112",88.0,0.03
62 | 9,6.6,"113",91.0,0.039
63 | 10,5.3,"1028",31.0,0.03
64 | 11,7.7,"2714",45.0,0.11
65 | 11,7.7,"2708",145.0,0.01
66 | 11,7.7,"2715",300.0,0.01
67 | 12,6.2,"3501",5.0,0.39
68 | 13,5.6,"655",50.0,0.031
69 | 13,5.6,"272",16.0,0.13
70 | 14,5.2,"1032",17.0,0.011
71 | 14,5.2,"1377",8.0,0.12
72 | 14,5.2,"1028",10.0,0.17
73 | 14,5.2,"1250",10.0,0.14
74 | 15,6.0,"1051",8.0,0.11
75 | 15,6.0,"1293",32.0,0.04
76 | 15,6.0,"1291",30.0,0.07
77 | 15,6.0,"1292",31.0,0.08
78 | 16,5.1,"283",2.9,0.21
79 | 16,5.1,"885",3.2,0.39
80 | 16,5.1,"NA",7.6,0.28
81 | 17,7.6,"2734",25.4,0.16
82 | 17,7.6,"NA",32.9,0.064
83 | 17,7.6,"2728",92.2,0.09
84 | 18,5.8,"1413",1.2,0.42
85 | 18,5.8,"1445",1.6,0.23
86 | 18,5.8,"1408",9.1,0.13
87 | 18,5.8,"1411",3.7,0.26
88 | 18,5.8,"1410",5.3,0.27
89 | 18,5.8,"1409",7.4,0.26
90 | 18,5.8,"1377",17.9,0.11
91 | 18,5.8,"1492",19.2,0.12
92 | 18,5.8,"1251",23.4,0.038
93 | 18,5.8,"1422",30.0,0.044
94 | 18,5.8,"1376",38.9,0.046
95 | 19,6.5,"NA",23.5,0.17
96 | 19,6.5,"286",26.0,0.21
97 | 19,6.5,"NA",0.5,0.32
98 | 19,6.5,"5028",0.6,0.52
99 | 19,6.5,"942",1.3,0.72
100 | 19,6.5,"NA",1.4,0.32
101 | 19,6.5,"5054",2.6,0.81
102 | 19,6.5,"958",3.8,0.64
103 | 19,6.5,"952",4.0,0.56
104 | 19,6.5,"5165",5.1,0.51
105 | 19,6.5,"117",6.2,0.4
106 | 19,6.5,"955",6.8,0.61
107 | 19,6.5,"5055",7.5,0.26
108 | 19,6.5,"NA",7.6,0.24
109 | 19,6.5,"NA",8.4,0.46
110 | 19,6.5,"5060",8.5,0.22
111 | 19,6.5,"412",8.5,0.23
112 | 19,6.5,"5053",10.6,0.28
113 | 19,6.5,"5058",12.6,0.38
114 | 19,6.5,"5057",12.7,0.27
115 | 19,6.5,"NA",12.9,0.31
116 | 19,6.5,"5051",14.0,0.2
117 | 19,6.5,"NA",15.0,0.11
118 | 19,6.5,"5115",16.0,0.43
119 | 19,6.5,"NA",17.7,0.27
120 | 19,6.5,"931",18.0,0.15
121 | 19,6.5,"5056",22.0,0.15
122 | 19,6.5,"5059",22.0,0.15
123 | 19,6.5,"5061",23.0,0.13
124 | 19,6.5,"NA",23.2,0.19
125 | 19,6.5,"5062",29.0,0.13
126 | 19,6.5,"5052",32.0,0.066
127 | 19,6.5,"NA",32.7,0.35
128 | 19,6.5,"724",36.0,0.1
129 | 19,6.5,"NA",43.5,0.16
130 | 19,6.5,"5066",49.0,0.14
131 | 19,6.5,"5050",60.0,0.049
132 | 19,6.5,"2316",64.0,0.034
133 | 20,5.0,"5055",7.5,0.264
134 | 20,5.0,"942",8.8,0.263
135 | 20,5.0,"5028",8.9,0.23
136 | 20,5.0,"5165",9.4,0.147
137 | 20,5.0,"952",9.7,0.286
138 | 20,5.0,"958",9.7,0.157
139 | 20,5.0,"955",10.5,0.237
140 | 20,5.0,"117",10.5,0.133
141 | 20,5.0,"412",12.0,0.055
142 | 20,5.0,"5053",12.2,0.097
143 | 20,5.0,"5054",12.8,0.129
144 | 20,5.0,"5058",14.6,0.192
145 | 20,5.0,"5057",14.9,0.147
146 | 20,5.0,"5115",17.6,0.154
147 | 20,5.0,"5056",23.9,0.06
148 | 20,5.0,"5060",25.0,0.057
149 | 21,5.8,"1030",10.8,0.12
150 | 21,5.8,"1418",15.7,0.154
151 | 21,5.8,"1383",16.7,0.052
152 | 21,5.8,"1308",20.8,0.045
153 | 21,5.8,"1298",28.5,0.086
154 | 21,5.8,"1299",33.1,0.056
155 | 21,5.8,"1219",40.3,0.065
156 | 22,5.5,"NA",4.0,0.259
157 | 22,5.5,"NA",10.1,0.267
158 | 22,5.5,"1030",11.1,0.071
159 | 22,5.5,"1418",17.7,0.275
160 | 22,5.5,"1383",22.5,0.058
161 | 22,5.5,"NA",26.5,0.026
162 | 22,5.5,"1299",29.0,0.039
163 | 22,5.5,"1308",30.9,0.112
164 | 22,5.5,"1219",37.8,0.065
165 | 22,5.5,"1456",48.3,0.026
166 | 23,5.3,"5045",5.8,0.123
167 | 23,5.3,"5044",12.0,0.133
168 | 23,5.3,"5160",12.1,0.073
169 | 23,5.3,"5043",20.5,0.097
170 | 23,5.3,"5047",20.5,0.096
171 | 23,5.3,"c168",25.3,0.23
172 | 23,5.3,"5068",35.9,0.082
173 | 23,5.3,"c118",36.1,0.11
174 | 23,5.3,"5042",36.3,0.11
175 | 23,5.3,"5067",38.5,0.094
176 | 23,5.3,"5049",41.4,0.04
177 | 23,5.3,"c204",43.6,0.05
178 | 23,5.3,"5070",44.4,0.022
179 | 23,5.3,"c266",46.1,0.07
180 | 23,5.3,"c203",47.1,0.08
181 | 23,5.3,"5069",47.7,0.033
182 | 23,5.3,"5073",49.2,0.017
183 | 23,5.3,"5072",53.1,0.022
184 |
--------------------------------------------------------------------------------
/testfiles/baseball.csv:
--------------------------------------------------------------------------------
1 | Rk,Year,Age,Tm,Lg,,W,L,W-L%,G,Finish,Wpost,Lpost,W-L%post,
2 | 1,1978,37,Atlanta Braves,NL,,69,93,.426,162,6,0,0,,
3 | 2,1979,38,Atlanta Braves,NL,,66,94,.413,160,6,0,0,,
4 | 3,1980,39,Atlanta Braves,NL,,81,80,.503,161,4,0,0,,
5 | 4,1981,40,Atlanta Braves,NL,,25,29,.463,55,4,0,0,,First half of season
6 | 5,1981,40,Atlanta Braves,NL,,25,27,.481,52,5,0,0,,Second half of season
7 | ,,,,,,,,,,,,,,
8 | 6,1982,41,Toronto Blue Jays,AL,,78,84,.481,162,6,0,0,,
9 | 7,1983,42,Toronto Blue Jays,AL,,89,73,.549,162,4,0,0,,
10 | 8,1984,43,Toronto Blue Jays,AL,,89,73,.549,163,2,0,0,,
11 | 9,1985,44,Toronto Blue Jays,AL,,99,62,.615,161,1,3,4,.429,
12 | ,,,,,,,,,,,,,,
13 | 10,1990,49,Atlanta Braves,NL,2nd of 2,40,57,.412,97,6,0,0,,
14 | 11,1991,50,Atlanta Braves,NL,,94,68,.580,162,1,7,7,.500,NL Pennant
15 | 12,1992,51,Atlanta Braves,NL,,98,64,.605,162,1,6,7,.462,NL Pennant
16 | 13,1993,52,Atlanta Braves,NL,,104,58,.642,162,1,2,4,.333,
17 | 14,1994,53,Atlanta Braves,NL,,68,46,.596,114,2,0,0,,
18 | 15,1995,54,Atlanta Braves,NL,,90,54,.625,144,1,11,3,.786,WS Champs
19 | 16,1996,55,Atlanta Braves,NL,,96,66,.593,162,1,9,7,.562,NL Pennant
20 | 17,1997,56,Atlanta Braves,NL,,101,61,.623,162,1,5,4,.556,
21 | 18,1998,57,Atlanta Braves,NL,,106,56,.654,162,1,5,4,.556,
22 | 19,1999,58,Atlanta Braves,NL,,103,59,.636,162,1,7,7,.500,NL Pennant
23 | 20,2000,59,Atlanta Braves,NL,,95,67,.586,162,1,0,3,.000,
24 | 21,2001,60,Atlanta Braves,NL,,88,74,.543,162,1,4,4,.500,
25 | 22,2002,61,Atlanta Braves,NL,,101,59,.631,161,1,2,3,.400,
26 | 23,2003,62,Atlanta Braves,NL,,101,61,.623,162,1,2,3,.400,
27 | 24,2004,63,Atlanta Braves,NL,,96,66,.593,162,1,2,3,.400,
28 | 25,2005,64,Atlanta Braves,NL,,90,72,.556,162,1,1,3,.250,
29 | 26,2006,65,Atlanta Braves,NL,,79,83,.488,162,3,0,0,,
30 | 27,2007,66,Atlanta Braves,NL,,84,78,.519,162,3,0,0,,
31 | 28,2008,67,Atlanta Braves,NL,,72,90,.444,162,4,0,0,,
32 | 29,2009,68,Atlanta Braves,NL,,86,76,.531,162,3,0,0,,
33 | 30,2010,69,Atlanta Braves,NL,,91,71,.562,162,2,1,3,.250,
34 | ,,,Toronto Blue Jays,,4 years,355,292,.549,648,3.3,3,4,.429,
35 | ,,,Atlanta Braves,,25 years,2149,1709,.557,3860,2.4,64,65,.496,5 Pennants and 1 World Series Title
36 | ,,,,,29 years,2504,2001,.556,4508,2.5,67,69,.493,5 Pennants and 1 World Series Title
--------------------------------------------------------------------------------
/testfiles/boolext.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | True,FALSE,1
3 | False,TRUE,2
4 | True,TRUE,3
5 | False,FALSE,4
6 |
--------------------------------------------------------------------------------
/testfiles/bools.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | true,false,1
3 | false,true,2
4 | true,true,3
5 | false,false,4
--------------------------------------------------------------------------------
/testfiles/bug555.txt:
--------------------------------------------------------------------------------
1 | RESULTAT NOM_CHAM INST NUME_ORDRE NOEUD COOR_X COOR_Y COOR_Z TEMP
2 | A0 A1 0.00000E+00 0 N1 0.00000E+00 2.27374E-15 0.00000E+00 9.31399E-02
3 | B0 B1 0.00000E+00 0 N2 2.30000E+00 0.00000E+00 0.00000E+00 3.11013E-01
4 | C0 C1 0.00000E+00 0 N3 2.50000E+00 0.00000E+00 0.00000E+00 4.24537E-01
5 |
--------------------------------------------------------------------------------
/testfiles/categorical.csv:
--------------------------------------------------------------------------------
1 | cat
2 | a
3 | a
4 | a
5 | b
6 | b
7 | b
8 | b
9 | b
10 | b
11 | b
12 | c
13 | c
14 | c
15 | c
16 | a
--------------------------------------------------------------------------------
/testfiles/census.txt:
--------------------------------------------------------------------------------
1 | GEOID POP10 HU10 ALAND AWATER ALAND_SQMI AWATER_SQMI INTPTLAT INTPTLONG
2 | 00601 18570 7744 166659789 799296 64.348 0.309 18.180555 -66.749961
3 | 00602 41520 18073 79288158 4446273 30.613 1.717 18.362268 -67.176130
4 | 00603 54689 25653 81880442 183425 31.614 0.071 18.455183 -67.119887
--------------------------------------------------------------------------------
/testfiles/comma_decimal.csv:
--------------------------------------------------------------------------------
1 | x;y
2 | 3,14;1
3 | 1,0;1
--------------------------------------------------------------------------------
/testfiles/dash_as_null.csv:
--------------------------------------------------------------------------------
1 | x,y
2 | 1,2
3 | -,4
--------------------------------------------------------------------------------
/testfiles/double_quote_quotechar_and_escapechar.csv:
--------------------------------------------------------------------------------
1 | APINo,FileNo,CurrentWellName,LeaseName,OriginalWellName
2 | 3.3101E+13,1,BLUM 1,BLUM,PIONEER OIL & GAS #1
3 | 3.3001E+13,2,DAVIS WELL 1,DAVIS WELL,DAVIS WELL #1
4 | 3.3009E+13,3,GREAT NORTH. O AND G PIPELINE CO. 1,GREAT NORTH. O AND G PIPELINE CO.,GREAT NORTHERN OIL & GAS PIPELINE #1
5 | 3.3043E+13,4,ROBINSON PATD LAND 1,ROBINSON PATD LAND,ROBINSON PAT'D LAND #1
6 | 3.3031E+13,5,GLENFIELD OIL COMPANY 1,GLENFIELD OIL COMPANY,GLENFIELD OIL COMPANY #1
7 | 3.3023E+13,6,NORTHWEST OIL CO. 1,NORTHWEST OIL CO.,#1
8 | 3.3055E+13,7,OIL SYNDICATE 1,OIL SYNDICATE,H. HANSON OIL SYNDICATE #1
9 | 3.3043E+13,8,ARMSTRONG 1,ARMSTRONG,ARMSTRONG #1
10 | 3.3075E+13,9,GEHRINGER 1,GEHRINGER,GEHRINGER #1
11 | 3.3101E+13,10,PETROLEUM CO. 1,PETROLEUM CO.,VELVA PETROLEUM CO. #1
12 | 3.3047E+13,11,BURNSTAD 1,BURNSTAD,BURNSTAD #1
13 | 3.3105E+13,12,OIL COMPANY 1,OIL COMPANY,BIG VIKING #1
14 | 3.3105E+13,13,NELS KAMP 1,NELS KAMP,NELS KAMP #1
15 | 3.3059E+13,14,EXPLORATION-NORTH DAKOTA 1,EXPLORATION-NORTH DAKOTA,EXPLORATION-NORTH DAKOTA #1
16 | 3.3065E+13,15,WACHTER 16-18,WACHTER,E. L. SEMLING #1
17 | 3.3029E+13,16,FRANKLIN INVESTMENT CO. 1,FRANKLIN INVESTMENT CO.,FRANKLIN INVESTMENT CO. #1
18 | 3.3077E+13,17,RUDDY BROS 1,RUDDY BROS,RUDDY BROS #1
19 | 3.3101E+13,18,J. H. KLINE 1,J. H. KLINE,J. H. KLINE #1
20 | 3.3015E+13,19,STRATIGRAPHIC TEST 1,STRATIGRAPHIC TEST,STRATIGRAPHIC TEST #1
21 | 3.3071E+13,20,AANSTAD STRATIGRAPHIC TEST 1,AANSTAD STRATIGRAPHIC TEST,AANSTAD STRATIGRAPHIC TEST #1
22 | 3.3057E+13,21,FRITZ LEUTZ 1,FRITZ LEUTZ,FRITZ LEUTZ #1
23 | 3.3055E+13,22,VAUGHN HANSON 1,VAUGHN HANSON,VAUGHN HANSON #1
24 | 3.3029E+13,23,J. J. WEBER 1,J. J. WEBER,J. J. WEBER #1
25 | 3.3043E+13,24,NORTH DAKOTA STATE A 1,NORTH DAKOTA STATE A,"NORTH DAKOTA STATE ""A"" #1"
26 |
--------------------------------------------------------------------------------
/testfiles/error_comment.txt:
--------------------------------------------------------------------------------
1 | fluid,col2,col3,acentric_factor
2 | Ar,150.86,48.98,-0.002
3 | C2H4,282.34,50.41,0.087
4 | CO2,304.12,73.74,0.225
5 | CO,132.85,34.94,0.045
6 | CH4,190.56,45.99,0.011
7 | H2,32.98,12.93,-0.217
8 | Kr,209.40,55.00,0.005
9 | Xe,289.74,58.40,0.008
10 | # Values taken from a more complete list given in
11 | # R. C. Reid, J. M. Prausnitz, and B. E. Poling, 2001,
12 | # The Properties of Gases and Liquids, 5th Ed. New York: McGraw-Hill.
13 |
--------------------------------------------------------------------------------
/testfiles/int64_overflow.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 1
3 | 2
4 | 3
5 | 9223372036854775808
--------------------------------------------------------------------------------
/testfiles/issue_120.csv:
--------------------------------------------------------------------------------
1 | 3528489623.488570 ,312.73,0.00,41.87425,297.63020,0.00000,286.34230,-99.99000,-99.99000,12716,0,0,0,,-24.81942,853.80730,0.00000,.000 ,6.007e1 ,132.356
2 | 3528489624.488660 ,312.49,0.00,41.87623,297.63420,0.00000,286.35630,-99.99000,-99.99000,12716,0,0,0,,-24.82060,852.19210,0.00000,.000 ,3.827e1 ,132.356
3 | 3528489625.488570 ,312.74,0.00,41.87155,297.63270,0.00000,286.37230,-99.99000,-99.99000,12716,0,0,0,,-24.82111,853.42570,0.00000,.000 ,6.138e1 ,132.356
4 | 3528489626.488660 ,312.49,0.00,41.86422,297.63200,0.00000,286.38370,-99.99000,-99.99000,12716,0,0,0,,-24.82091,854.13420,0.00000,.000 ,4.923e1 ,132.356
5 | 3528489627.488750 ,312.62,0.00,41.87615,297.63240,0.00000,286.39700,-99.99000,-99.99000,12716,0,0,0,,-24.82035,851.17100,0.00000,.000 ,4.249e1 ,132.356
--------------------------------------------------------------------------------
/testfiles/issue_198.csv:
--------------------------------------------------------------------------------
1 | ;Taux de l'Eonia (moyenne mensuelle);EURIBOR à 1 mois;EURIBOR à 12 mois;EURIBOR à 3 mois;EURIBOR à 6 mois;EURIBOR à 9 mois
2 | 18/04/2018;-0,368;-0,371;-0,189;-0,328;-0,271;-0,219
3 | 17/04/2018;-0,368;-0,371;-0,189;-0,328;-0,27;-0,219
4 | 16/04/2018;-0,367;-0,371;-0,189;-0,329;-0,27;-0,219
5 | 15/04/2018;-;-;-;-;-;-
6 | 14/04/2018;-;-;-;-;-;-
7 | 13/04/2018;-0,364;-0,371;-0,19;-0,329;-0,271;-0,219
--------------------------------------------------------------------------------
/testfiles/issue_198_part2.csv:
--------------------------------------------------------------------------------
1 | A;B;C
2 | a;-0,367;-0,371
3 | b;++;++;++
4 | c;++;++;++
5 | d;-0,364;-0,371
--------------------------------------------------------------------------------
/testfiles/issue_207.csv:
--------------------------------------------------------------------------------
1 | a,b,c,d,e,f
2 | 1863001,134,10000,1.0009,1.0000,-0.002033899
3 | 1863209,137,0,1.0000,"2,773.9000",
--------------------------------------------------------------------------------
/testfiles/one_empty_line_windows.csv:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/testfiles/plus_as_null.csv:
--------------------------------------------------------------------------------
1 | x,y
2 | 1,2
3 | +,4
--------------------------------------------------------------------------------
/testfiles/precompile_small.csv:
--------------------------------------------------------------------------------
1 | int,float,pool,string,bool,date,datetime,time
2 | 1,2.0,a,RTrBP,true,2020-06-20,2020-06-20T00:00:00,12:00:00
3 | 1,2.0,a,aqbcM,true,2020-06-20,2020-06-20T00:00:00,12:00:00
4 | 1,2.0,a,jN9r4,true,2020-06-20,2020-06-20T00:00:00,12:00:00
5 | 1,2.0,a,aWGyX,true,2020-06-20,2020-06-20T00:00:00,12:00:00
6 | 1,2.0,a,yyBbB,true,2020-06-20,2020-06-20T00:00:00,12:00:00
7 | 1,2.0,a,sJLTp,true,2020-06-20,2020-06-20T00:00:00,12:00:00
8 | 1,2.0,a,7N1Ky,true,2020-06-20,2020-06-20T00:00:00,12:00:00
9 | 1,2.0,a,O8MBD,true,2020-06-20,2020-06-20T00:00:00,12:00:00
10 | 1,2.0,a,EIidc,true,2020-06-20,2020-06-20T00:00:00,12:00:00
11 | ,,,,,,,
12 |
--------------------------------------------------------------------------------
/testfiles/single_character.csv:
--------------------------------------------------------------------------------
1 | x
2 |
--------------------------------------------------------------------------------
/testfiles/stocks.csv:
--------------------------------------------------------------------------------
1 | Stock Name,Company Name
2 | AXP,American Express Co
3 | BA,Boeing Co
4 | CAT,Caterpillar Inc
5 | CSC, Cisco Systems Inc
6 | CVX,Chevron Corp
7 | DD,Dupont E I De Nemours & Co
8 | DIS,Walt Disney Co
9 | GE,General Electric Co
10 | GS,Goldman Sachs Group Inc
11 | HD,Home Depot Inc
12 | IBM,International Business Machines Co...
13 | INTC,Intel Corp
14 | JNJ,Johnson & Johnson
15 | JPM,JPMorgan Chase and Co
16 | KO,The Coca-Cola Co
17 | MCD,McDonald's Corp
18 | MMM,3M Co
19 | MRK,Merck & Co Inc
20 | MSFT,Microsoft Corp
21 | NKE,Nike Inc
22 | PFE,Pfizer Inc
23 | PG,Procter & Gamble Co
24 | T,AT&T Inc
25 | TRV,Travelers Companies Inc
26 | UNH,UnitedHealth Group Inc
27 | UTX,United Technologies Corp
28 | V,Visa Inc
29 | VZ,Verizon Communications Inc
30 | WMT,Wal-Mart Stores Inc
31 | XOM,Exxon Mobil Corp
--------------------------------------------------------------------------------
/testfiles/test_2_footer_rows.csv:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | col1,col2,col3
5 | 1,2,3
6 | 4,5,6
7 | 7,8,9
8 | 10,11,12
9 | 13,14,15
--------------------------------------------------------------------------------
/testfiles/test_508.csv:
--------------------------------------------------------------------------------
1 | # a comment
2 | # no header...
3 | "Yes","Medium rare"
4 | "Yes","Medium"
5 | "Yes","Medium"
6 | "Yes","Medium rare"
7 | "No",
8 | "Yes","Rare"
--------------------------------------------------------------------------------
/testfiles/test_array_lower_bounds.csv:
--------------------------------------------------------------------------------
1 | "Col1","Col2","Col3"
2 | 1,4,7
3 | 2,5,8
4 | 3,6,9
5 |
--------------------------------------------------------------------------------
/testfiles/test_bad_ISO8601.csv:
--------------------------------------------------------------------------------
1 | Problem,ISO 8601 string
2 | Month out-of-range,2021-00-29T17:58:23.492-12:00
3 | Month out-of-range,2021-13-29T17:58:23.492-12:00
4 | Day out of range,2021-06-00T17:58:23.492-12:00
5 | Day out of range,2021-06-31T17:58:23.492-12:00
6 | Hour out of range,2021-06-29T25:58:23.492-12:00
7 | Minute out of range,2021-06-29T17:61:23.492-12:00
8 | Seconds out of range,2021-06-29T17:58:60.492-12:00
9 | Time zone hours out of range,2021-06-29T17:58:23.492-24:00
10 | Time zone minutes out of range,2021-06-29T17:58:23.492-12:60
11 | Month out-of-range,2021-00-29
12 | Month out-of-range,2021-13-29
13 | Day out of range,2021-06-00
14 | Day out of range,2021-06-31
15 | Hour out of range,2021-06-29T25:15:20
16 | Month out-of-range,2021-30-29
17 | Day out of range,2021-06-40
18 | Hour out of range,2021-06-29T30:15:20
19 | Minute out of range,2021-06-29T20:60:20
20 | Seconds out of range,2021-06-29T:20:59:60
21 | Bad character at position 1,x021-06-29T17:58:23.492-12:00
22 | Bad character at position 2,2x21-06-29T17:58:23.492-12:00
23 | Bad character at position 3,20x1-06-29T17:58:23.492-12:00
24 | Bad character at position 4,202x-06-29T17:58:23.492-12:00
25 | Bad character at position 5,2021x06-29T17:58:23.492-12:00
26 | Bad character at position 6,2021-x6-29T17:58:23.492-12:00
27 | Bad character at position 7,2021-0x-29T17:58:23.492-12:00
28 | Bad character at position 8,2021-06x29T17:58:23.492-12:00
29 | Bad character at position 9,2021-06-x9T17:58:23.492-12:00
30 | Bad character at position 10,2021-06-2xT17:58:23.492-12:00
31 | Bad character at position 11,2021-06-29x17:58:23.492-12:00
32 | Bad character at position 12,2021-06-29Tx7:58:23.492-12:00
33 | Bad character at position 13,2021-06-29T1x:58:23.492-12:00
34 | Bad character at position 14,2021-06-29T17x58:23.492-12:00
35 | Bad character at position 15,2021-06-29T17:x8:23.492-12:00
36 | Bad character at position 16,2021-06-29T17:5x:23.492-12:00
37 | Bad character at position 17,2021-06-29T17:58x23.492-12:00
38 | Bad character at position 18,2021-06-29T17:58:x3.492-12:00
39 | Bad character at position 19,2021-06-29T17:58:2x.492-12:00
40 | Bad character at position 20,2021-06-29T17:58:23x492-12:00
41 | Bad character at position 21,2021-06-29T17:58:23.x92-12:00
42 | Bad character at position 22,2021-06-29T17:58:23.4x2-12:00
43 | Bad character at position 23,2021-06-29T17:58:23.49x-12:00
44 | Bad character at position 24,2021-06-29T17:58:23.492x12:00
45 | Bad character at position 25,2021-06-29T17:58:23.492-x2:00
46 | Bad character at position 26,2021-06-29T17:58:23.492-1x:00
47 | Bad character at position 27,2021-06-29T17:58:23.492-12x00
48 | Bad character at position 28,2021-06-29T17:58:23.492-12:x0
49 | Bad character at position 29,2021-06-29T17:58:23.492-12:0x
50 | Bad character at position 1,x024-05-10T05:24:27.917Z
51 | Bad character at position 2,2x24-05-10T05:24:27.917Z
52 | Bad character at position 3,20x4-05-10T05:24:27.917Z
53 | Bad character at position 4,202x-05-10T05:24:27.917Z
54 | Bad character at position 5,2024x05-10T05:24:27.917Z
55 | Bad character at position 6,2024-x5-10T05:24:27.917Z
56 | Bad character at position 7,2024-0x-10T05:24:27.917Z
57 | Bad character at position 8,2024-05x10T05:24:27.917Z
58 | Bad character at position 9,2024-05-x0T05:24:27.917Z
59 | Bad character at position 10,2024-05-1xT05:24:27.917Z
60 | Bad character at position 11,2024-05-10x05:24:27.917Z
61 | Bad character at position 12,2024-05-10Tx5:24:27.917Z
62 | Bad character at position 13,2024-05-10T0x:24:27.917Z
63 | Bad character at position 14,2024-05-10T05x24:27.917Z
64 | Bad character at position 15,2024-05-10T05:x4:27.917Z
65 | Bad character at position 16,2024-05-10T05:2x:27.917Z
66 | Bad character at position 17,2024-05-10T05:24x27.917Z
67 | Bad character at position 18,2024-05-10T05:24:x7.917Z
68 | Bad character at position 19,2024-05-10T05:24:2x.917Z
69 | Bad character at position 20,2024-05-10T05:24:27x917Z
70 | Bad character at position 21,2024-05-10T05:24:27.x17Z
71 | Bad character at position 22,2024-05-10T05:24:27.9x7Z
72 | Bad character at position 23,2024-05-10T05:24:27.91xZ
73 | Bad character at position 24,2024-05-10T05:24:27.917x
74 | Bad character at position 25,2024-05-10T05:24:27.917Zx
75 | Bad character at position 1,x021-09-26T22:52:42-12:00
76 | Bad character at position 2,2x21-09-26T22:52:42-12:00
77 | Bad character at position 3,20x1-09-26T22:52:42-12:00
78 | Bad character at position 4,202x-09-26T22:52:42-12:00
79 | Bad character at position 5,2021x09-26T22:52:42-12:00
80 | Bad character at position 6,2021-x9-26T22:52:42-12:00
81 | Bad character at position 7,2021-0x-26T22:52:42-12:00
82 | Bad character at position 8,2021-09x26T22:52:42-12:00
83 | Bad character at position 9,2021-09-x6T22:52:42-12:00
84 | Bad character at position 10,2021-09-2xT22:52:42-12:00
85 | Bad character at position 11,2021-09-26x22:52:42-12:00
86 | Bad character at position 12,2021-09-26Tx2:52:42-12:00
87 | Bad character at position 13,2021-09-26T2x:52:42-12:00
88 | Bad character at position 14,2021-09-26T22x52:42-12:00
89 | Bad character at position 15,2021-09-26T22:x2:42-12:00
90 | Bad character at position 16,2021-09-26T22:5x:42-12:00
91 | Bad character at position 17,2021-09-26T22:52x42-12:00
92 | Bad character at position 18,2021-09-26T22:52:x2-12:00
93 | Bad character at position 19,2021-09-26T22:52:4x-12:00
94 | Bad character at position 20,2021-09-26T22:52:42x12:00
95 | Bad character at position 21,2021-09-26T22:52:42-x2:00
96 | Bad character at position 22,2021-09-26T22:52:42-1x:00
97 | Bad character at position 23,2021-09-26T22:52:42-12x00
98 | Bad character at position 24,2021-09-26T22:52:42-12:x0
99 | Bad character at position 25,2021-09-26T22:52:42-12:0x
100 | Bad character at position 26,2021-09-26T22:52:42-12:00x
101 | Bad character at position 1,x023-03-08T06:29:28Z
102 | Bad character at position 2,2x23-03-08T06:29:28Z
103 | Bad character at position 3,20x3-03-08T06:29:28Z
104 | Bad character at position 4,202x-03-08T06:29:28Z
105 | Bad character at position 5,2023x03-08T06:29:28Z
106 | Bad character at position 6,2023-x3-08T06:29:28Z
107 | Bad character at position 7,2023-0x-08T06:29:28Z
108 | Bad character at position 8,2023-03x08T06:29:28Z
109 | Bad character at position 9,2023-03-x8T06:29:28Z
110 | Bad character at position 10,2023-03-0xT06:29:28Z
111 | Bad character at position 11,2023-03-08x06:29:28Z
112 | Bad character at position 12,2023-03-08Tx6:29:28Z
113 | Bad character at position 13,2023-03-08T0x:29:28Z
114 | Bad character at position 14,2023-03-08T06x29:28Z
115 | Bad character at position 15,2023-03-08T06:x9:28Z
116 | Bad character at position 16,2023-03-08T06:2x:28Z
117 | Bad character at position 17,2023-03-08T06:29x28Z
118 | Bad character at position 18,2023-03-08T06:29:x8Z
119 | Bad character at position 19,2023-03-08T06:29:2xZ
120 | Bad character at position 20,2023-03-08T06:29:28x
121 | Bad character at position 21,2023-03-08T06:29:28Zx
122 | Bad character at position 1,x022-09-01T00:08:26.304
123 | Bad character at position 2,2x22-09-01T00:08:26.304
124 | Bad character at position 3,20x2-09-01T00:08:26.304
125 | Bad character at position 4,202x-09-01T00:08:26.304
126 | Bad character at position 5,2022x09-01T00:08:26.304
127 | Bad character at position 6,2022-x9-01T00:08:26.304
128 | Bad character at position 7,2022-0x-01T00:08:26.304
129 | Bad character at position 8,2022-09x01T00:08:26.304
130 | Bad character at position 9,2022-09-x1T00:08:26.304
131 | Bad character at position 10,2022-09-0xT00:08:26.304
132 | Bad character at position 11,2022-09-01x00:08:26.304
133 | Bad character at position 12,2022-09-01Tx0:08:26.304
134 | Bad character at position 13,2022-09-01T0x:08:26.304
135 | Bad character at position 14,2022-09-01T00x08:26.304
136 | Bad character at position 15,2022-09-01T00:x8:26.304
137 | Bad character at position 16,2022-09-01T00:0x:26.304
138 | Bad character at position 17,2022-09-01T00:08x26.304
139 | Bad character at position 18,2022-09-01T00:08:x6.304
140 | Bad character at position 19,2022-09-01T00:08:2x.304
141 | Bad character at position 20,2022-09-01T00:08:26x304
142 | Bad character at position 21,2022-09-01T00:08:26.x04
143 | Bad character at position 22,2022-09-01T00:08:26.3x4
144 | Bad character at position 23,2022-09-01T00:08:26.30x
145 | Bad character at position 24,2022-09-01T00:08:26.304x
146 | Bad character at position 1,x022-12-24
147 | Bad character at position 2,2x22-12-24
148 | Bad character at position 3,20x2-12-24
149 | Bad character at position 4,202x-12-24
150 | Bad character at position 5,2022x12-24
151 | Bad character at position 6,2022-x2-24
152 | Bad character at position 7,2022-1x-24
153 | Bad character at position 8,2022-12x24
154 | Bad character at position 9,2022-12-x4
155 | Bad character at position 10,2022-12-2x
156 | Bad character at position 11,2022-12-24x
157 |
--------------------------------------------------------------------------------
/testfiles/test_bad_inputs.csv:
--------------------------------------------------------------------------------
1 | Col1,Col2,Col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
5 |
--------------------------------------------------------------------------------
/testfiles/test_basic.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_basic_pipe.csv:
--------------------------------------------------------------------------------
1 | col1|col2|col3
2 | 1|2|3
3 | 4|5|6
4 | 7|8|9
--------------------------------------------------------------------------------
/testfiles/test_column-by-column.csv:
--------------------------------------------------------------------------------
1 | "Type","Col A","Col B","Col C","Col D","Col E","Col F","Col G"
2 | "Number",44424,44424,44424,44424,44424,44424,44424
3 | "Date",2021-08-24T12:49:13,2021-08-24T12:49:13,2021-08-24T12:49:13,2021-08-24T12:49:13,2021-08-24T12:49:13,2021-08-24T12:49:13,2021-08-24T12:49:13
4 | "Boolean",True,True,True,True,True,True,True
5 | "Error",#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!,#DIV/0!
6 | "String","1","1","1","1","1","1","1"
7 | "String","2021-08-24T12:49:13","2021-08-24T12:49:13","2021-08-24T12:49:13","2021-08-24T12:49:13","2021-08-24T12:49:13","2021-08-24T12:49:13","2021-08-24T12:49:13"
8 | "String","TRUE","TRUE","TRUE","TRUE","TRUE","TRUE","TRUE"
9 | "String","#DIV/0!","#DIV/0!","#DIV/0!","#DIV/0!","#DIV/0!","#DIV/0!","#DIV/0!"
10 | "String","abc","abc","abc","abc","abc","abc","abc"
11 | "String","abc""def","abc""def","abc""def","abc""def","abc""def","abc""def","abc""def"
12 | "String","Line
13 | Feed","Line
14 | Feed","Line
15 | Feed","Line
16 | Feed","Line
17 | Feed","Line
18 | Feed","Line
19 | Feed"
20 |
--------------------------------------------------------------------------------
/testfiles/test_comment_first_row.csv:
--------------------------------------------------------------------------------
1 | # the CSV file hasn't started yet
2 | a,b,c
3 | #now the data will start
4 | 1,2,3
5 | #4,5,6
6 | 7,8,9
7 |
--------------------------------------------------------------------------------
/testfiles/test_comments1.csv:
--------------------------------------------------------------------------------
1 | a,b,c
2 | 1,2,3
3 | #4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_comments_multichar.csv:
--------------------------------------------------------------------------------
1 | a,b,c
2 | 1,2,3
3 | //4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_comments_multiple.csv:
--------------------------------------------------------------------------------
1 | a,b,c
2 | 1,2,3
3 | #4,5,6
4 | #4,5,6
5 | #4,5,6
6 | 7,8,9
7 | #
8 | 10,11,12
9 | #"1","2 with a newline character","3"
10 | 13,14,15
--------------------------------------------------------------------------------
/testfiles/test_converttypes_arg.csv:
--------------------------------------------------------------------------------
1 | "Number",44424
2 | "Date",2021-08-18
3 | "Boolean",True
4 | "Error",#DIV/0!
5 | "String","1"
6 | "String","16-Aug-2021"
7 | "String","TRUE"
8 | "String","#DIV/0!"
9 | "String","abc"
10 | "String","abc""def"
11 |
--------------------------------------------------------------------------------
/testfiles/test_correct_trailing_missings.csv:
--------------------------------------------------------------------------------
1 | A,B,C,D,E
2 | 1,2,3,,
3 | 4,5,6,,
--------------------------------------------------------------------------------
/testfiles/test_crlf_line_endings.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_d-m-y_with_time.csv:
--------------------------------------------------------------------------------
1 | 01-Sep-2021 16:23:13
2 | 09-Oct-2022 04:16:13
3 | 27-Dec-2022 13:56:15
4 | 07-May-2022 08:56:31
5 | 14-Jan-2024 05:29:48
6 | 16-Jan-2023 08:12:25
7 | 10-12-2023 13:35:13
8 | 11-01-2023 20:59:27
9 | 28-10-2021 07:31:59
10 | 21-07-2023 00:02:45
11 | 16-12-2021 19:15:38
12 |
--------------------------------------------------------------------------------
/testfiles/test_date_separator_is_space.csv:
--------------------------------------------------------------------------------
1 | Col1
2 | 1 Jan 2022
3 | 2 3 2022
4 | 1 February 2022
5 |
--------------------------------------------------------------------------------
/testfiles/test_dateformat.csv:
--------------------------------------------------------------------------------
1 | "Date1","Date2"
2 | 2021-08-30,2021-08-31
3 | 2021-08-31,2021-09-01
4 |
--------------------------------------------------------------------------------
/testfiles/test_dates.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 2015-01-01
3 | 2015-01-02
4 | 2015-01-03
--------------------------------------------------------------------------------
/testfiles/test_datetimes.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 2015-01-01 00:00:00
3 | 2015-01-02 00:00:01
4 | 2015-01-03 00:12:00.001
--------------------------------------------------------------------------------
/testfiles/test_delim.tsv:
--------------------------------------------------------------------------------
1 | col1 col2 col3
2 | 1 2 3
3 | 4 5 6
4 | 7 8 9
5 |
--------------------------------------------------------------------------------
/testfiles/test_delim.wsv:
--------------------------------------------------------------------------------
1 | col1 col2 col3
2 | 1 2 3
3 | 4 5 6
4 | 7 8 9
5 |
--------------------------------------------------------------------------------
/testfiles/test_empty_file.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/test_empty_file.csv
--------------------------------------------------------------------------------
/testfiles/test_empty_file_newlines.csv:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/testfiles/test_empty_lines.csv:
--------------------------------------------------------------------------------
1 | a,b,c
2 | 1,2,3
3 |
4 | 4,5,6
5 |
6 |
7 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_excel_date_formats.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 01/01/2015
3 | 01/02/2015
4 | 01/03/2015
--------------------------------------------------------------------------------
/testfiles/test_file_issue_154.csv:
--------------------------------------------------------------------------------
1 | a, b, ,
2 | 0, 1, , comment
3 | 12, 5, ,
4 |
--------------------------------------------------------------------------------
/testfiles/test_float_in_int_column.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5.4,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_floats.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,5.0,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_footer_missing.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
5 | 10,11,12
6 | ,,
7 |
--------------------------------------------------------------------------------
/testfiles/test_good_D-M-Y.csv:
--------------------------------------------------------------------------------
1 | D-M-Y String,EquivalentDouble
2 | 24-8-21,44432
3 | 24-8-2021,44432
4 | 24-08-21,44432
5 | 24-08-2021,44432
6 | 24-Aug-21,44432
7 | 24-Aug-2021,44432
8 | 24-August-21,44432
9 | 24-August-2021,44432
10 | 24-8-21,44432
11 | 24-8-2021,44432
12 | 24-08-21,44432
13 | 24-08-2021,44432
14 | 24-Aug-21,44432
15 | 24-Aug-2021,44432
16 | 24-August-21,44432
17 | 24-August-2021,44432
18 | 24-8-21 11:18,44432.4708333333
19 | 24-8-2021 11:18,44432.4708333333
20 | 24-08-21 11:18,44432.4708333333
21 | 24-08-2021 11:18,44432.4708333333
22 | 24-Aug-21 11:18,44432.4708333333
23 | 24-Aug-2021 11:18,44432.4708333333
24 | 24-August-21 11:18,44432.4708333333
25 | 24-August-2021 11:18,44432.4708333333
26 | 24-8-21 11:18,44432.4708333333
27 | 24-8-2021 11:18,44432.4708333333
28 | 24-08-21 11:18,44432.4708333333
29 | 24-08-2021 11:18,44432.4708333333
30 | 24-Aug-21 11:18,44432.4708333333
31 | 24-Aug-2021 11:18,44432.4708333333
32 | 24-August-21 11:18,44432.4708333333
33 | 24-August-2021 11:18,44432.4708333333
34 | 24-8-21 11:18:21,44432.4710763889
35 | 24-8-2021 11:18:21,44432.4710763889
36 | 24-08-21 11:18:21,44432.4710763889
37 | 24-08-2021 11:18:21,44432.4710763889
38 | 24-Aug-21 11:18:21,44432.4710763889
39 | 24-Aug-2021 11:18:21,44432.4710763889
40 | 24-August-21 11:18:21,44432.4710763889
41 | 24-August-2021 11:18:21,44432.4710763889
42 | 24-8-21 11:18:21,44432.4710763889
43 | 24-8-2021 11:18:21,44432.4710763889
44 | 24-08-21 11:18:21,44432.4710763889
45 | 24-08-2021 11:18:21,44432.4710763889
46 | 24-Aug-21 11:18:21,44432.4710763889
47 | 24-Aug-2021 11:18:21,44432.4710763889
48 | 24-August-21 11:18:21,44432.4710763889
49 | 24-August-2021 11:18:21,44432.4710763889
50 | 24-8-21 11:18:21.123,44432.4710778125
51 | 24-8-2021 11:18:21.123,44432.4710778125
52 | 24-08-21 11:18:21.123,44432.4710778125
53 | 24-08-2021 11:18:21.123,44432.4710778125
54 | 24-Aug-21 11:18:21.123,44432.4710778125
55 | 24-Aug-2021 11:18:21.123,44432.4710778125
56 | 24-August-21 11:18:21.123,44432.4710778125
57 | 24-August-2021 11:18:21.123,44432.4710778125
58 | 24-8-21 11:18:21.123,44432.4710778125
59 | 24-8-2021 11:18:21.123,44432.4710778125
60 | 24-08-21 11:18:21.123,44432.4710778125
61 | 24-08-2021 11:18:21.123,44432.4710778125
62 | 24-Aug-21 11:18:21.123,44432.4710778125
63 | 24-Aug-2021 11:18:21.123,44432.4710778125
64 | 24-August-21 11:18:21.123,44432.4710778125
65 | 24-August-2021 11:18:21.123,44432.4710778125
66 |
--------------------------------------------------------------------------------
/testfiles/test_good_ISO8601.csv:
--------------------------------------------------------------------------------
1 | ISO 8601 string,Category,Expected(DateFormat=ISO),Expected(DateFormat=ISOZ)
2 | 2023-01-17T18:40:01.786-12:00,DateTime with time zone,2023-01-17T18:40:01.786-12:00,44944.2777984491
3 | 2021-10-09T04:00:48.243-11:00,DateTime with time zone,2021-10-09T04:00:48.243-11:00,44478.6255583681
4 | 2022-02-13T18:10:03.598-10:00,DateTime with time zone,2022-02-13T18:10:03.598-10:00,44606.1736527546
5 | 2023-11-25T15:19:27.591-09:30,DateTime with time zone,2023-11-25T15:19:27.591-09:30,45256.0343471181
6 | 2021-12-06T16:21:10.629-09:00,DateTime with time zone,2021-12-06T16:21:10.629-09:00,44537.0563730208
7 | 2023-11-19T07:14:42.016-08:00,DateTime with time zone,2023-11-19T07:14:42.016-08:00,45249.6352085185
8 | 2022-08-17T18:58:38.966-07:00,DateTime with time zone,2022-08-17T18:58:38.966-07:00,44791.0823954398
9 | 2022-12-30T19:14:19.889-06:00,DateTime with time zone,2022-12-30T19:14:19.889-06:00,44926.0516190857
10 | 2024-03-04T13:31:04.623-05:00,DateTime with time zone,2024-03-04T13:31:04.623-05:00,45355.7715812847
11 | 2022-05-12T09:58:34.702-04:00,DateTime with time zone,2022-05-12T09:58:34.702-04:00,44693.582346088
12 | 2022-02-11T12:23:33.553-03:30,DateTime with time zone,2022-02-11T12:23:33.553-03:30,44603.6621939005
13 | 2023-07-18T22:56:17.224-03:00,DateTime with time zone,2023-07-18T22:56:17.224-03:00,45126.0807549074
14 | 2024-03-10T16:56:15.842-02:00,DateTime with time zone,2024-03-10T16:56:15.842-02:00,45361.7890722454
15 | 2023-12-25T03:53:39.947-01:00,DateTime with time zone,2023-12-25T03:53:39.947-01:00,45285.2039345718
16 | 2024-05-10T05:24:27.917Z,DateTime with time zone,2024-05-10T05:24:27.917Z,45422.2253231134
17 | 2022-09-01T00:08:26.304+01:00,DateTime with time zone,2022-09-01T00:08:26.304+01:00,44804.9641933333
18 | 2023-02-10T10:58:22.848+02:00,DateTime with time zone,2023-02-10T10:58:22.848+02:00,44967.3738755556
19 | 2023-09-10T04:49:48.520+03:00,DateTime with time zone,2023-09-10T04:49:48.520+03:00,45179.0762560185
20 | 2023-01-21T04:19:39.829+03:30,DateTime with time zone,2023-01-21T04:19:39.829+03:30,44947.0344887616
21 | 2023-12-21T23:53:44.094+04:00,DateTime with time zone,2023-12-21T23:53:44.094+04:00,45281.8289825694
22 | 2022-09-23T14:54:38.795+04:30,DateTime with time zone,2022-09-23T14:54:38.795+04:30,44827.4337823495
23 | 2024-02-04T07:45:08.056+05:00,DateTime with time zone,2024-02-04T07:45:08.056+05:00,45326.1146765741
24 | 2022-02-13T05:14:55.673+05:30,DateTime with time zone,2022-02-13T05:14:55.673+05:30,44604.9895332523
25 | 2023-02-09T22:42:26.934+05:45,DateTime with time zone,2023-02-09T22:42:26.934+05:45,44966.7065617361
26 | 2021-11-28T14:02:33.680+06:00,DateTime with time zone,2021-11-28T14:02:33.680+06:00,44528.335112037
27 | 2022-03-06T02:37:14.609+06:30,DateTime with time zone,2022-03-06T02:37:14.609+06:30,44625.8383635301
28 | 2022-05-18T13:26:59.269+07:00,DateTime with time zone,2022-05-18T13:26:59.269+07:00,44699.2687415394
29 | 2023-10-12T03:41:20.854+08:00,DateTime with time zone,2023-10-12T03:41:20.854+08:00,45210.8203802546
30 | 2022-10-23T20:13:06.354+08:45,DateTime with time zone,2022-10-23T20:13:06.354+08:45,44857.4778513194
31 | 2022-06-23T21:54:01.766+09:00,DateTime with time zone,2022-06-23T21:54:01.766+09:00,44735.5375204398
32 | 2022-08-10T23:10:35.889+09:30,DateTime with time zone,2022-08-10T23:10:35.889+09:30,44783.5698598264
33 | 2021-10-08T09:53:25.098+10:00,DateTime with time zone,2021-10-08T09:53:25.098+10:00,44476.995429375
34 | 2022-02-20T13:40:23.458+10:30,DateTime with time zone,2022-02-20T13:40:23.458+10:30,44612.1322159491
35 | 2024-05-19T02:21:56.931+11:00,DateTime with time zone,2024-05-19T02:21:56.931+11:00,45430.6402422569
36 | 2023-05-09T06:39:45.156+12:00,DateTime with time zone,2023-05-09T06:39:45.156+12:00,45054.7776059722
37 | 2024-02-17T15:28:28.148+12:45,DateTime with time zone,2024-02-17T15:28:28.148+12:45,45339.1135202315
38 | 2023-05-10T03:28:07.276+13:00,DateTime with time zone,2023-05-10T03:28:07.276+13:00,45055.6028619907
39 | 2022-02-10T20:10:54.146+14:00,DateTime with time zone,2022-02-10T20:10:54.146+14:00,44602.2575711343
40 | 2021-09-26T22:52:42-12:00,DateTime with time zone,2021-09-26T22:52:42-12:00,44466.4532638889
41 | 2022-03-19T14:23:37-11:00,DateTime with time zone,2022-03-19T14:23:37-11:00,44640.0580671296
42 | 2022-07-31T12:03:09-10:00,DateTime with time zone,2022-07-31T12:03:09-10:00,44773.9188541667
43 | 2021-12-02T17:28:14-09:30,DateTime with time zone,2021-12-02T17:28:14-09:30,44533.1237731482
44 | 2021-10-02T15:51:18-09:00,DateTime with time zone,2021-10-02T15:51:18-09:00,44472.035625
45 | 2024-01-22T19:42:48-08:00,DateTime with time zone,2024-01-22T19:42:48-08:00,45314.1547222222
46 | 2024-01-28T11:57:19-07:00,DateTime with time zone,2024-01-28T11:57:19-07:00,45319.7898032407
47 | 2024-02-25T17:06:49-06:00,DateTime with time zone,2024-02-25T17:06:49-06:00,45347.9630671296
48 | 2024-04-09T11:35:26-05:00,DateTime with time zone,2024-04-09T11:35:26-05:00,45391.6912731481
49 | 2023-07-04T01:03:25-04:00,DateTime with time zone,2023-07-04T01:03:25-04:00,45111.2107060185
50 | 2024-03-11T13:12:44-03:30,DateTime with time zone,2024-03-11T13:12:44-03:30,45362.6963425926
51 | 2022-10-09T23:35:28-03:00,DateTime with time zone,2022-10-09T23:35:28-03:00,44844.107962963
52 | 2022-06-10T03:18:48-02:00,DateTime with time zone,2022-06-10T03:18:48-02:00,44722.2213888889
53 | 2022-08-22T00:06:54-01:00,DateTime with time zone,2022-08-22T00:06:54-01:00,44795.0464583333
54 | 2023-03-08T06:29:28Z,DateTime with time zone,2023-03-08T06:29:28Z,44993.270462963
55 | 2024-02-21T02:02:59+01:00,DateTime with time zone,2024-02-21T02:02:59+01:00,45343.0437384259
56 | 2023-04-24T05:25:16+02:00,DateTime with time zone,2023-04-24T05:25:16+02:00,45040.1425462963
57 | 2023-12-04T11:29:18+03:00,DateTime with time zone,2023-12-04T11:29:18+03:00,45264.3536805556
58 | 2023-09-18T10:16:43+03:30,DateTime with time zone,2023-09-18T10:16:43+03:30,45187.2824421296
59 | 2024-01-04T04:57:34+04:00,DateTime with time zone,2024-01-04T04:57:34+04:00,45295.0399768519
60 | 2022-11-10T09:10:08+04:30,DateTime with time zone,2022-11-10T09:10:08+04:30,44875.194537037
61 | 2022-03-25T04:35:17+05:00,DateTime with time zone,2022-03-25T04:35:17+05:00,44644.9828356481
62 | 2022-01-16T09:57:34+05:30,DateTime with time zone,2022-01-16T09:57:34+05:30,44577.1858101852
63 | 2022-11-18T03:23:39+05:45,DateTime with time zone,2022-11-18T03:23:39+05:45,44882.9018402778
64 | 2023-10-28T13:53:34+06:00,DateTime with time zone,2023-10-28T13:53:34+06:00,45227.3288657407
65 | 2022-03-06T18:49:35+06:30,DateTime with time zone,2022-03-06T18:49:35+06:30,44626.513599537
66 | 2023-06-03T17:15:40+07:00,DateTime with time zone,2023-06-03T17:15:40+07:00,45080.4275462963
67 | 2023-03-27T05:59:07+08:00,DateTime with time zone,2023-03-27T05:59:07+08:00,45011.9160532407
68 | 2022-05-07T01:43:14+08:45,DateTime with time zone,2022-05-07T01:43:14+08:45,44687.7071064815
69 | 2023-09-15T21:35:44+09:00,DateTime with time zone,2023-09-15T21:35:44+09:00,45184.5248148148
70 | 2024-01-10T06:16:51+09:30,DateTime with time zone,2024-01-10T06:16:51+09:30,45300.8658680556
71 | 2022-08-02T10:46:04+10:00,DateTime with time zone,2022-08-02T10:46:04+10:00,44775.0319907407
72 | 2023-06-21T01:47:02+10:30,DateTime with time zone,2023-06-21T01:47:02+10:30,45097.6368287037
73 | 2023-02-19T04:58:22+11:00,DateTime with time zone,2023-02-19T04:58:22+11:00,44975.7488657407
74 | 2022-05-04T12:44:53+12:00,DateTime with time zone,2022-05-04T12:44:53+12:00,44685.0311689815
75 | 2022-05-19T17:46:15+12:45,DateTime with time zone,2022-05-19T17:46:15+12:45,44700.2092013889
76 | 2022-02-22T01:10:31+13:00,DateTime with time zone,2022-02-22T01:10:31+13:00,44613.5073032407
77 | 2024-03-28T11:27:53+14:00,DateTime with time zone,2024-03-28T11:27:53+14:00,45378.8943634259
78 | 2022-09-01T00:08:26.304,DateTime without time zone,44805.00586,2022-09-01T00:08:26.304
79 | 2023-02-10T10:58:22.848,DateTime without time zone,44967.4572088889,2023-02-10T10:58:22.848
80 | 2023-09-10T04:49:48.520,DateTime without time zone,45179.2012560185,2023-09-10T04:49:48.520
81 | 2023-01-21T04:19:39.829,DateTime without time zone,44947.1803220949,2023-01-21T04:19:39.829
82 | 2023-12-21T23:53:44.094,DateTime without time zone,45281.9956492361,2023-12-21T23:53:44.094
83 | 2022-09-23T14:54:38.795,DateTime without time zone,44827.6212823495,2022-09-23T14:54:38.795
84 | 2024-02-04T07:45:08.056,DateTime without time zone,45326.3230099074,2024-02-04T07:45:08.056
85 | 2022-02-13T05:14:55.673,DateTime without time zone,44605.218699919,2022-02-13T05:14:55.673
86 | 2023-02-09T22:42:26.934,DateTime without time zone,44966.9461450695,2023-02-09T22:42:26.934
87 | 2021-11-28T14:02:33.680,DateTime without time zone,44528.585112037,2021-11-28T14:02:33.680
88 | 2022-03-06T02:37:14.609,DateTime without time zone,44626.1091968634,2022-03-06T02:37:14.609
89 | 2022-05-18T13:26:59.269,DateTime without time zone,44699.560408206,2022-05-18T13:26:59.269
90 | 2023-10-12T03:41:20.854,DateTime without time zone,45211.153713588,2023-10-12T03:41:20.854
91 | 2022-10-23T20:13:06.354,DateTime without time zone,44857.8424346528,2022-10-23T20:13:06.354
92 | 2022-06-23T21:54:01.766,DateTime without time zone,44735.9125204398,2022-06-23T21:54:01.766
93 | 2022-08-10T23:10:35.889,DateTime without time zone,44783.9656931597,2022-08-10T23:10:35.889
94 | 2021-10-08T09:53:25.098,DateTime without time zone,44477.4120960417,2021-10-08T09:53:25.098
95 | 2022-02-20T13:40:23.458,DateTime without time zone,44612.5697159491,2022-02-20T13:40:23.458
96 | 2024-05-19T02:21:56.931,DateTime without time zone,45431.0985755903,2024-05-19T02:21:56.931
97 | 2023-05-09T06:39:45.156,DateTime without time zone,45055.2776059722,2023-05-09T06:39:45.156
98 | 2024-02-17T15:28:28.148,DateTime without time zone,45339.6447702315,2024-02-17T15:28:28.148
99 | 2023-05-10T03:28:07.276,DateTime without time zone,45056.1445286574,2023-05-10T03:28:07.276
100 | 2022-02-10T20:10:54.146,DateTime without time zone,44602.8409044676,2022-02-10T20:10:54.146
101 | 2022-12-24,Date,44919,44919
102 | 2023-12-16,Date,45276,45276
103 | 2023-09-14,Date,45183,45183
104 | 2023-11-12,Date,45242,45242
105 | 2023-08-11,Date,45149,45149
106 | 2023-01-27,Date,44953,44953
107 | 2023-07-15,Date,45122,45122
108 | 2024-03-08,Date,45359,45359
109 | 2021-10-06,Date,44475,44475
110 | 2024-03-29,Date,45380,45380
111 | 2023-10-04,Date,45203,45203
112 | 2023-08-10,Date,45148,45148
113 | 2023-04-04,Date,45020,45020
114 | 2021-09-27,Date,44466,44466
115 | 2023-06-28,Date,45105,45105
116 | 2021-09-08,Date,44447,44447
117 | 2022-01-16,Date,44577,44577
118 | 2023-09-24,Date,45193,45193
119 | 2022-03-20,Date,44640,44640
120 | 2024-01-28,Date,45319,45319
121 | 2023-08-27,Date,45165,45165
122 | 2023-01-15,Date,44941,44941
123 | 2023-02-22,Date,44979,44979
124 | 2022-02-26,Date,44618,44618
125 | 2023-02-23,Date,44980,44980
126 | 2023-03-04,Date,44989,44989
127 | 2022-03-26,Date,44646,44646
128 | 2022-11-15,Date,44880,44880
129 | 2021-11-01,Date,44501,44501
130 | 2021-12-29,Date,44559,44559
131 | 2023-01-06,Date,44932,44932
132 | 2024-01-12,Date,45303,45303
133 | 2023-08-13,Date,45151,45151
134 | 2023-08-24,Date,45162,45162
135 | 2021-10-16,Date,44485,44485
136 | 2022-03-19,Date,44639,44639
137 | 2022-07-10,Date,44752,44752
138 | 2022-04-25,Date,44676,44676
139 |
--------------------------------------------------------------------------------
/testfiles/test_good_M-D-Y.csv:
--------------------------------------------------------------------------------
1 | M-D-Y String,EquivalentDouble
2 | 8-24-21,44432
3 | 8-24-2021,44432
4 | 8-24-21,44432
5 | 8-24-2021,44432
6 | 08-24-21,44432
7 | 08-24-2021,44432
8 | 08-24-21,44432
9 | 08-24-2021,44432
10 | Aug-24-21,44432
11 | Aug-24-2021,44432
12 | Aug-24-21,44432
13 | Aug-24-2021,44432
14 | August-24-21,44432
15 | August-24-2021,44432
16 | August-24-21,44432
17 | August-24-2021,44432
18 | 8-24-21 11:18,44432.4708333333
19 | 8-24-2021 11:18,44432.4708333333
20 | 8-24-21 11:18,44432.4708333333
21 | 8-24-2021 11:18,44432.4708333333
22 | 08-24-21 11:18,44432.4708333333
23 | 08-24-2021 11:18,44432.4708333333
24 | 08-24-21 11:18,44432.4708333333
25 | 08-24-2021 11:18,44432.4708333333
26 | Aug-24-21 11:18,44432.4708333333
27 | Aug-24-2021 11:18,44432.4708333333
28 | Aug-24-21 11:18,44432.4708333333
29 | Aug-24-2021 11:18,44432.4708333333
30 | August-24-21 11:18,44432.4708333333
31 | August-24-2021 11:18,44432.4708333333
32 | August-24-21 11:18,44432.4708333333
33 | August-24-2021 11:18,44432.4708333333
34 | 8-24-21 11:18:21,44432.4710763889
35 | 8-24-2021 11:18:21,44432.4710763889
36 | 8-24-21 11:18:21,44432.4710763889
37 | 8-24-2021 11:18:21,44432.4710763889
38 | 08-24-21 11:18:21,44432.4710763889
39 | 08-24-2021 11:18:21,44432.4710763889
40 | 08-24-21 11:18:21,44432.4710763889
41 | 08-24-2021 11:18:21,44432.4710763889
42 | Aug-24-21 11:18:21,44432.4710763889
43 | Aug-24-2021 11:18:21,44432.4710763889
44 | Aug-24-21 11:18:21,44432.4710763889
45 | Aug-24-2021 11:18:21,44432.4710763889
46 | August-24-21 11:18:21,44432.4710763889
47 | August-24-2021 11:18:21,44432.4710763889
48 | August-24-21 11:18:21,44432.4710763889
49 | August-24-2021 11:18:21,44432.4710763889
50 | 8-24-21 11:18:21.123,44432.4710778125
51 | 8-24-2021 11:18:21.123,44432.4710778125
52 | 8-24-21 11:18:21.123,44432.4710778125
53 | 8-24-2021 11:18:21.123,44432.4710778125
54 | 08-24-21 11:18:21.123,44432.4710778125
55 | 08-24-2021 11:18:21.123,44432.4710778125
56 | 08-24-21 11:18:21.123,44432.4710778125
57 | 08-24-2021 11:18:21.123,44432.4710778125
58 | Aug-24-21 11:18:21.123,44432.4710778125
59 | Aug-24-2021 11:18:21.123,44432.4710778125
60 | Aug-24-21 11:18:21.123,44432.4710778125
61 | Aug-24-2021 11:18:21.123,44432.4710778125
62 | August-24-21 11:18:21.123,44432.4710778125
63 | August-24-2021 11:18:21.123,44432.4710778125
64 | August-24-21 11:18:21.123,44432.4710778125
65 | August-24-2021 11:18:21.123,44432.4710778125
66 |
--------------------------------------------------------------------------------
/testfiles/test_good_Y-M-D.csv:
--------------------------------------------------------------------------------
1 | Y-M-D String,EquivalentDouble
2 | 21-8-24,44432
3 | 21-8-24,44432
4 | 21-08-24,44432
5 | 21-08-24,44432
6 | 21-Aug-24,44432
7 | 21-Aug-24,44432
8 | 21-August-24,44432
9 | 21-August-24,44432
10 | 2021-8-24,44432
11 | 2021-8-24,44432
12 | 2021-08-24,44432
13 | 2021-08-24,44432
14 | 2021-Aug-24,44432
15 | 2021-Aug-24,44432
16 | 2021-August-24,44432
17 | 2021-August-24,44432
18 | 21-8-24 11:18,44432.4708333333
19 | 21-8-24 11:18,44432.4708333333
20 | 21-08-24 11:18,44432.4708333333
21 | 21-08-24 11:18,44432.4708333333
22 | 21-Aug-24 11:18,44432.4708333333
23 | 21-Aug-24 11:18,44432.4708333333
24 | 21-August-24 11:18,44432.4708333333
25 | 21-August-24 11:18,44432.4708333333
26 | 2021-8-24 11:18,44432.4708333333
27 | 2021-8-24 11:18,44432.4708333333
28 | 2021-08-24 11:18,44432.4708333333
29 | 2021-08-24 11:18,44432.4708333333
30 | 2021-Aug-24 11:18,44432.4708333333
31 | 2021-Aug-24 11:18,44432.4708333333
32 | 2021-August-24 11:18,44432.4708333333
33 | 2021-August-24 11:18,44432.4708333333
34 | 21-8-24 11:18:21,44432.4710763889
35 | 21-8-24 11:18:21,44432.4710763889
36 | 21-08-24 11:18:21,44432.4710763889
37 | 21-08-24 11:18:21,44432.4710763889
38 | 21-Aug-24 11:18:21,44432.4710763889
39 | 21-Aug-24 11:18:21,44432.4710763889
40 | 21-August-24 11:18:21,44432.4710763889
41 | 21-August-24 11:18:21,44432.4710763889
42 | 2021-8-24 11:18:21,44432.4710763889
43 | 2021-8-24 11:18:21,44432.4710763889
44 | 2021-08-24 11:18:21,44432.4710763889
45 | 2021-08-24 11:18:21,44432.4710763889
46 | 2021-Aug-24 11:18:21,44432.4710763889
47 | 2021-Aug-24 11:18:21,44432.4710763889
48 | 2021-August-24 11:18:21,44432.4710763889
49 | 2021-August-24 11:18:21,44432.4710763889
50 | 21-8-24 11:18:21.123,44432.4710778125
51 | 21-8-24 11:18:21.123,44432.4710778125
52 | 21-08-24 11:18:21.123,44432.4710778125
53 | 21-08-24 11:18:21.123,44432.4710778125
54 | 21-Aug-24 11:18:21.123,44432.4710778125
55 | 21-Aug-24 11:18:21.123,44432.4710778125
56 | 21-August-24 11:18:21.123,44432.4710778125
57 | 21-August-24 11:18:21.123,44432.4710778125
58 | 2021-8-24 11:18:21.123,44432.4710778125
59 | 2021-8-24 11:18:21.123,44432.4710778125
60 | 2021-08-24 11:18:21.123,44432.4710778125
61 | 2021-08-24 11:18:21.123,44432.4710778125
62 | 2021-Aug-24 11:18:21.123,44432.4710778125
63 | 2021-Aug-24 11:18:21.123,44432.4710778125
64 | 2021-August-24 11:18:21.123,44432.4710778125
65 | 2021-August-24 11:18:21.123,44432.4710778125
66 |
--------------------------------------------------------------------------------
/testfiles/test_header_on_row_4.csv:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | col1,col2,col3
5 | 1,2,3
6 | 4,5,6
7 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_headers.csv:
--------------------------------------------------------------------------------
1 | Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10
2 | 1,2,3,4,5,6,7,8,9,10
3 | 11,12,13,14,15,16,17,18,19,20
4 | 21,22,23,24,25,26,27,28,29,30
5 | 31,32,33,34,35,36,37,38,39,40
6 | 41,42,43,44,45,46,47,48,49,50
7 | 51,52,53,54,55,56,57,58,59,60
8 | 61,62,63,64,65,66,67,68,69,70
9 | 71,72,73,74,75,76,77,78,79,80
10 | 81,82,83,84,85,86,87,88,89,90
11 | 91,92,93,94,95,96,97,98,99,100
12 |
--------------------------------------------------------------------------------
/testfiles/test_headers_in_fixed_width_file.csv:
--------------------------------------------------------------------------------
1 | Col1 Col2 Col3 Col4 Col5 Col6
2 | 11970 37 11721 135 79270 9066
3 | 2041 26 36 85 214 20
4 | 42004 0 33236 115 1 80821
5 | xyz 137693 5175 3 3650 203158
6 |
--------------------------------------------------------------------------------
/testfiles/test_ignoring_repeated_multicharacter_delimiter.csv:
--------------------------------------------------------------------------------
1 | 1DelimDelim2DelimDelim3DelimDelim4DelimDelim5
2 | 6DelimDelim7DelimDelim8DelimDelim9DelimDelim10
3 | 11DelimDelim12DelimDelim13DelimDelim14DelimDelim15
4 | 16DelimDelim17DelimDelim18DelimDelim19DelimDelim20
5 | 21DelimDelim22DelimDelim23DelimDelim24DelimDelim25
6 | 26DelimDelim27DelimDelim28DelimDelim29DelimDelim30
7 | 31DelimDelim32DelimDelim33DelimDelim34DelimDelim35
8 | 36DelimDelim37DelimDelim38DelimDelim39DelimDelim40
9 | 41DelimDelim42DelimDelim43DelimDelim44DelimDelim45
10 | 46DelimDelim47DelimDelim48DelimDelim49DelimDelim50
11 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_ANSI_Bar.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30|1|2
2 | 2022-11-03T17:42:04|3|4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_ANSI_Semi colon.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30;1;2
2 | 2022-11-03T17:42:04;3;4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_ANSI_Tab.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30 1 2
2 | 2022-11-03T17:42:04 3 4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_ANSI_comma.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30,1,2
2 | 2022-11-03T17:42:04,3,4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Bar.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Bar.csv
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Semi colon.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Semi colon.csv
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Tab.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_Tab.csv
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_comma.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-16_comma.csv
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-8_Bar.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30|1|2
2 | 2022-11-03T17:42:04|3|4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-8_Semi colon.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30;1;2
2 | 2022-11-03T17:42:04;3;4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-8_Tab.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30 1 2
2 | 2022-11-03T17:42:04 3 4
3 |
--------------------------------------------------------------------------------
/testfiles/test_infer_delimiter_first_field_is_datetime_UTF-8_comma.csv:
--------------------------------------------------------------------------------
1 | 2022-11-03T17:41:30,1,2
2 | 2022-11-03T17:42:04,3,4
3 |
--------------------------------------------------------------------------------
/testfiles/test_inferring_delimiter_when_decimal_is_comma.csv:
--------------------------------------------------------------------------------
1 | 3,14159265358979;3,14159265358979
2 | 3,14159265358979;3,14159265358979
3 |
--------------------------------------------------------------------------------
/testfiles/test_int_sentinel.csv:
--------------------------------------------------------------------------------
1 | id,firstname,lastname,salary,hourlyrate,hiredate,lastclockin
2 | 1,Lawrence,Powell,87216.81,26.47,2002-04-09,2002-01-17T21:32:00
3 | 2,Benjamin,Chavez,57043.38,39.44,2011-07-07,2000-09-25T06:36:00
4 | 3,Wayne,Burke,46134.09,33.8,2016-02-19,2002-09-13T08:28:00
5 | 4,Sean,Richards,45046.21,15.64,2000-11-24,2011-07-10T11:24:00
6 | 5,Charles,Long,30555.6,17.67,2002-01-05,2003-02-11T11:43:00
7 | 6,Linda,Rose,88894.06,34.6,2008-05-15,2016-01-21T06:32:00
8 | 7,Steve,Gardner,32414.46,36.39,2006-03-21,2004-01-12T12:36:00
9 | 8,Jacqueline,Roberts,54839.54,26.27,,
10 | 9,Tammy,Reynolds,62300.64,37.67,2000-06-09,2006-12-30T09:48:00
11 | 10,Nicholas,Ramos,57661.69,21.37,2002-09-20,2016-04-07T14:07:00
12 | 11,Irene,King,55565.61,13.88,2006-04-14,2015-03-19T15:01:00
13 | 12,Gary,Banks,57620.06,15.68,,
14 | 13,David,Knight,49729.65,10.39,2002-08-21,2005-06-29T11:14:00
15 | 14,Jennifer,Collins,86834,10.18,2007-06-06,2001-09-17T11:47:00
16 | 15,Gary,Vasquez,47974.45,24.52,2010-06-07,2014-08-30T02:41:00
17 | 16,Theresa,Mason,67476.24,41.47,2000-09-25,2015-11-07T01:23:00
18 | 17,Carl,Williams,71048.06,29.67,2008-11-12,2009-09-06T20:21:00
19 | 18,Judy,Howard,53110.54,42.1,2015-04-29,2011-05-14T14:38:00
20 | 19,Jane,Harris,52664.59,16.48,2004-11-28,2000-10-17T14:18:00
21 | 20,Paula,Hall,77300.12,13.46,2004-02-09,2006-08-19T23:35:00
22 | 21,Jennifer,Pierce,98176.06,28.4,2012-04-30,2014-05-16T04:50:00
23 | 22,Wanda,Graham,,,2010-10-06,2013-01-22T10:06:00
24 | 23,Donna,Stevens,52731.24,35.64,2008-02-18,2004-04-09T23:03:00
25 | 24,Shawn,Olson,71341.2,28.74,2001-01-03,2014-01-08T20:25:00
26 | 25,Larry,Mills,94185.21,17.98,2008-11-07,2000-10-16T21:14:00
27 | 26,Diane,Dean,48035.26,14.52,2005-08-13,2013-07-15T05:35:00
28 | 27,Gerald,Reynolds,68902.06,14.02,2006-01-05,2013-03-25T21:58:00
29 | 28,Angela,Reyes,68431.89,29.15,2016-02-18,2007-06-02T21:37:00
30 | 29,Terry,Williamson,82284.42,11.32,2010-02-13,2009-04-28T10:16:00
31 | 30,Thomas,Peterson,32202.5,44.81,2011-04-21,2002-11-01T05:09:00
32 | 31,Gary,Ryan,47322.49,38.28,2009-11-04,2014-03-18T16:40:00
33 | 32,Kelly,Wright,77681.48,40.62,2008-10-17,2008-09-13T04:35:00
34 | 33,Jerry,Mcdonald,48634.67,40.64,2012-12-03,2009-04-04T13:34:00
35 | 34,Sara,Williamson,93591.36,29.12,2013-09-05,2009-06-15T14:10:00
36 | 35,Tammy,Richards,64163.05,27.97,2011-02-15,2004-09-19T04:44:00
37 | 36,Willie,Wilson,55013.5,23.13,2000-07-07,2016-02-04T13:32:00
38 | 37,Howard,Moore,68933.52,29.74,2009-06-18,2012-03-05T18:46:00
39 | 38,Harry,Powell,88803.14,43.68,2014-09-04,2013-01-28T23:06:00
40 | 39,Sarah,Larson,59087.65,15.33,2002-03-14,2003-06-09T10:49:00
41 | 40,Clarence,Fernandez,,,2002-06-15,2003-02-27T20:50:00
42 | 41,Frank,Oliver,46920.82,27.12,2010-06-30,2008-07-25T03:32:00
43 | 42,Helen,Diaz,79150.2,44.47,2003-11-19,2009-05-03T11:00:00
44 | 43,Carl,Payne,47331.2,28.55,2003-09-19,2004-06-10T16:44:00
45 | 44,Julie,Gibson,62976,12.89,2014-04-13,2010-10-26T12:46:00
46 | 45,Matthew,Vasquez,56466.09,28.87,2010-12-15,2006-08-04T04:15:00
47 | 46,Roger,Frazier,76210.95,17.7,2009-04-19,2010-10-26T10:16:00
48 | 47,Terry,Bailey,71592.53,30.66,2011-04-08,2004-02-10T16:05:00
49 | 48,Charles,Harris,73087.71,27.97,2008-09-15,2011-09-02T06:12:00
50 | 49,Carlos,Washington,96820.05,26.53,2004-08-11,2009-11-04T14:43:00
51 | 4495412479959714370,Arthur,Martinez,77322.05,43.76,2004-10-20,2003-02-28T00:55:00
52 | 51,Aaron,Ramos,39447.66,23.22,2001-09-25,2004-06-19T14:13:00
53 | 52,Diane,Wagner,58776.97,15.87,2009-01-28,2015-07-24T12:09:00
54 | 53,Patrick,Harvey,62550.45,27.79,2015-10-16,2014-01-17T01:46:00
55 | 54,Mildred,Kelly,56818.96,19.68,2010-05-05,2001-12-15T22:01:00
56 | 55,Christina,Wagner,92207.21,37.24,2006-03-15,2011-07-25T18:08:00
57 | 56,Walter,Jacobs,91261.51,41.24,2005-02-09,2012-12-16T08:25:00
58 | 57,Edward,Roberts,89979.1,30.01,2004-03-07,2013-01-17T09:02:00
59 | 58,Eric,Price,66234.11,16.89,2009-03-06,2009-07-18T18:53:00
60 | 59,Arthur,Mills,80119.32,20.54,2008-12-03,2010-10-12T12:11:00
61 | 60,Frank,Crawford,55120.2,20.61,2007-05-19,2013-11-28T04:05:00
62 | 61,Denise,Reynolds,41558.91,31,2003-12-12,2010-06-04T18:38:00
63 | 62,Christopher,Harvey,80935.62,43.37,2006-05-31,2002-10-17T03:34:00
64 | 63,Philip,Miller,34367.91,32.27,2003-11-21,2016-02-01T19:24:00
65 | 64,Todd,Boyd,41129.51,18.46,2007-03-28,2001-10-01T20:52:00
66 | 65,Brandon,Gibson,74951.17,13.34,2008-07-05,2001-02-07T10:34:00
67 | 66,Stephen,Simpson,82619.36,25.09,2003-06-10,2009-03-03T06:10:00
68 | 67,Matthew,Ramirez,69707.47,19.48,2008-10-28,2015-11-17T05:09:00
69 | 68,Christine,Peters,50284.83,31.02,2004-09-15,2006-02-16T00:42:00
70 | 69,Amanda,Butler,91480.48,38.19,2003-11-27,2012-01-04T08:38:00
71 | 70,Julia,Graham,92477.08,41.81,2014-05-13,2006-05-28T21:28:00
72 | 71,Gregory,Rice,91185.29,37.58,2012-03-24,2007-10-17T12:11:00
73 | 72,Louis,Crawford,52832.8,42.93,2005-05-31,2006-03-19T06:07:00
74 | 73,Brandon,Watson,45723.17,41.92,2012-10-02,2015-11-13T07:19:00
75 | 74,Philip,Shaw,69490.63,23.92,,
76 | 75,Harold,Gonzales,79224.07,36.25,2012-12-05,2010-10-05T01:09:00
77 | 76,James,Webb,33969.44,30.36,2015-05-08,2010-04-10T19:12:00
78 | 77,Joshua,Mccoy,45820.89,20.4,2004-08-28,2012-01-25T12:32:00
79 | 78,Russell,Clark,74467.95,31,2002-10-26,2013-05-29T18:09:00
80 | 79,Jerry,Greene,46403.2,13.31,2002-06-08,2009-05-03T10:00:00
81 | 80,Theresa,Barnes,57409.47,24.39,2007-01-09,2015-04-23T09:49:00
82 | 81,Sara,Graham,70440.8,29.56,2010-01-19,2008-04-08T06:55:00
83 | 82,Phillip,Johnson,91284.91,30.45,2008-01-11,2005-01-10T21:16:00
84 | 83,Patricia,Evans,75978.21,31.9,2014-04-27,2013-06-27T16:08:00
85 | 84,Donna,Crawford,62172.48,13.32,2016-01-10,2005-03-20T09:10:00
86 | 85,Kenneth,Webb,69379,37.31,2011-07-06,2005-09-10T18:28:00
87 | 86,Clarence,Jackson,94199.35,25.46,2003-10-27,2008-12-19T03:45:00
88 | 87,Robin,Armstrong,35735.08,39.43,,
89 | 88,Andrew,Baker,31860.73,10.51,2015-03-20,2000-05-01T00:01:00
90 | 89,Cheryl,Webb,47783.33,31.8,2012-12-07,2008-11-29T17:51:00
91 | 90,Wanda,Hill,53157.17,44.11,2005-04-02,2006-11-18T05:07:00
92 | 91,Lisa,Sullivan,76040.59,33.44,2006-05-08,2002-07-18T06:24:00
93 | 92,Terry,Dean,60309.32,41.71,2008-01-02,2007-09-29T12:09:00
94 | 93,Frank,Hamilton,63715.31,11.99,2006-11-14,2006-05-07T21:24:00
95 | 94,Mark,Jones,45956,42.76,2009-12-16,2015-05-16T05:16:00
96 | 95,Steve,Johnson,34983.95,25.33,2002-12-29,2011-08-19T21:06:00
97 | 96,Joan,Graham,77844.68,28.74,2007-01-01,2007-02-15T15:10:00
98 | 97,Diana,Cunningham,33346.63,42.61,2013-11-05,2014-06-07T16:14:00
99 | ,Annie,Hunt,67398.43,23.99,2004-01-28,2002-12-13T08:38:00
100 | -8899831978349840752,Craig,Robertson,,,2008-06-23,2005-04-18T07:02:00
--------------------------------------------------------------------------------
/testfiles/test_issue_326.wsv:
--------------------------------------------------------------------------------
1 | A B
2 | 1 2
3 | 11 22
--------------------------------------------------------------------------------
/testfiles/test_keep_quotes.csv:
--------------------------------------------------------------------------------
1 | "Col1","Col2","Col3","Col4"
2 | 1,"x","x",True
3 | 2,"y","y",False
4 | 3,"z","z",True
5 |
--------------------------------------------------------------------------------
/testfiles/test_m-d-y_with_time.csv:
--------------------------------------------------------------------------------
1 | Sep-01-2021 16:23:13
2 | Oct-09-2022 04:16:13
3 | Dec-27-2022 13:56:15
4 | May-07-2022 08:56:31
5 | Jan-14-2024 05:29:48
6 | Jan-16-2023 08:12:25
7 | 12-10-2023 13:35:13
8 | 01-11-2023 20:59:27
9 | 10-28-2021 07:31:59
10 | 07-21-2023 00:02:45
11 | 12-16-2021 19:15:38
12 |
--------------------------------------------------------------------------------
/testfiles/test_mac_line_endings.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
1,2,3
4,5,6
7,8,9
--------------------------------------------------------------------------------
/testfiles/test_missing_last_column.csv:
--------------------------------------------------------------------------------
1 | A,B,C,D
2 | 1,2,3
3 | 4,5,6
--------------------------------------------------------------------------------
/testfiles/test_missing_last_field.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,5.0,
--------------------------------------------------------------------------------
/testfiles/test_missing_value.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_missing_value_NULL.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,NULL,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_mixed_date_formats.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 01/01/2015
3 | 01/02/2015
4 | 01/03/2015
5 | 2015-01-02
6 | 2015-01-03
--------------------------------------------------------------------------------
/testfiles/test_multiple_missing.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,NULL,6.0
4 | 7.0,NA,9.0
5 | 7.0,\N,9.0
--------------------------------------------------------------------------------
/testfiles/test_newline_line_endings.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_no_header.csv:
--------------------------------------------------------------------------------
1 | 1.0,2.0,3.0
2 | 4.0,5.0,6.0
3 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_not_delimited.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
5 |
--------------------------------------------------------------------------------
/testfiles/test_not_delimited.txt:
--------------------------------------------------------------------------------
1 | using CSV#= as of 29 Aug 2021 one needs the main version of CSV, latest released version
2 | 0.8.5 fails to load some of the files. See https://github.com/JuliaData/CSV.jl/issues/879
3 | Use:
4 | ]add CSV#main
5 | =#
6 | using DataFrames
7 |
8 | function benchmark()
9 | benchmark_csvs_in_folder("C:/Users/phili/AppData/Local/Temp/VBA-CSV/Performance",
10 | "C:/Users/phili/AppData/Local/Temp/VBA-CSV/Performance/JuliaResults.txt")
11 | end
12 |
13 | """
14 | benchmark_csvs_in_folder(foldername::String, outputfile::String)
15 | Benchmark all .csv files in `foldername`, writing results to `outputfile`.
16 | """
17 | function benchmark_csvs_in_folder(foldername::String, outputfile::String)
18 | files = readdir(foldername, join=true)
19 | files = filter(x -> x[end - 3:end] == ".csv", files)# only .csv files
20 |
21 | n = length(files)
22 | times = fill(0.0, n)
23 | numcalls = fill(0, n)
24 | statuses = fill("OK", n)
25 |
26 | foo = benchmarkonefile(files[1], 1)# for compilation "warmup"
27 | for (f, i) in zip(files, 1:n)
28 | println(i, f)
29 | try
30 | times[i], numcalls[i] = benchmarkonefile(f, 5)
31 | catch e
32 | statuses[i] = "$e"
33 | end
34 | end
35 | times
36 |
37 | result = DataFrame(filename=replace.(files, "/" => "\\"), time=times,
38 | status=statuses, numcalls=numcalls)
39 | CSV.write(outputfile, result)
40 | end
41 |
42 | """
43 | benchmarkonefile(filename::String, timeout::Int)
44 | Average time (over sufficient trials to take `timeout` seconds) to load file `filename` to
45 | a DataFrame, using CSV.File.
46 | """
47 | function benchmarkonefile(filename::String, timeout::Int)
48 | i = 0
49 | time2 = time() # needed to give time2 scope outside the loop.
50 | time1 = time()
51 | while true
52 | i = i + 1
53 | res = CSV.File(filename, header=false, type=String) |> DataFrame
54 | time2 = time()
55 | time2 - time1 < timeout || break
56 | end
57 | (time2 - time1) / i, i
58 | end
--------------------------------------------------------------------------------
/testfiles/test_not_enough_columns.csv:
--------------------------------------------------------------------------------
1 | A,B,C,D,E
2 | 1,2,3
3 | 4,5,6
--------------------------------------------------------------------------------
/testfiles/test_not_enough_columns2.csv:
--------------------------------------------------------------------------------
1 | A,B,C,D,E
2 | 1,2,3,4,5
3 | 6,7,8
--------------------------------------------------------------------------------
/testfiles/test_null_only_column.csv:
--------------------------------------------------------------------------------
1 | col1,col2
2 | 123,NA
3 | abc,NA
4 | 123abc,NA
5 |
--------------------------------------------------------------------------------
/testfiles/test_one_row_of_data.csv:
--------------------------------------------------------------------------------
1 | 1,2,3
--------------------------------------------------------------------------------
/testfiles/test_padding.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
5 |
--------------------------------------------------------------------------------
/testfiles/test_quoted_delim_and_newline.csv:
--------------------------------------------------------------------------------
1 | col1,col2
2 | "quoted ,field 1","quoted
3 | field 2"
--------------------------------------------------------------------------------
/testfiles/test_quoted_headers.csv:
--------------------------------------------------------------------------------
1 | "Col1","Col2","Col3","Col4","Col5","Col6","Col7","Col8","Col9","Col10"
2 | 1,2,3,4,5,6,7,8,9,10
3 | 11,12,13,14,15,16,17,18,19,20
4 | 21,22,23,24,25,26,27,28,29,30
5 | 31,32,33,34,35,36,37,38,39,40
6 | 41,42,43,44,45,46,47,48,49,50
7 | 51,52,53,54,55,56,57,58,59,60
8 | 61,62,63,64,65,66,67,68,69,70
9 | 71,72,73,74,75,76,77,78,79,80
10 | 81,82,83,84,85,86,87,88,89,90
11 | 91,92,93,94,95,96,97,98,99,100
12 |
--------------------------------------------------------------------------------
/testfiles/test_quoted_numbers.csv:
--------------------------------------------------------------------------------
1 | col1,col2,"col3"
2 | 123,"1",1
3 | abc,42,42
4 | 123abc,"12",12
5 |
--------------------------------------------------------------------------------
/testfiles/test_ragged_headers.csv:
--------------------------------------------------------------------------------
1 | Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8,Col9,Col10
2 | 1
3 | 2,3
4 | 4,5,6
5 | 7,8,9,10
6 | 11,12,13,14,15
7 | 16,17,18,19,20,21
8 | 22,23,24,25,26,27,28
9 | 29,30,31,32,33,34,35,36
10 | 37,38,39,40,41,42,43,44,45
11 | 46,47,48,49,50,51,52,53,54,55
--------------------------------------------------------------------------------
/testfiles/test_repeated_delim_371.csv:
--------------------------------------------------------------------------------
1 | FAMILY PERSON MARKER RATIO
2 | A EP01223 rs710865 0.0214
3 | A EP01227 rs11249215 0.0107
4 | A EP01228 rs11249215 0.00253
5 | A EP01228 rs10903129 0.0116
6 | A EP01227 rs621559 0.00842
7 | A EP01228 rs1514175 0.0202
8 | EPGP013951 EPGP013952 rs773564 0.00955
9 | EPGP014065 EPGP014066 rs2794520 0.0193
10 | EPGP014065 EPGP014065 rs296547 0.0135
11 | EPGP014065 EPGP014068 rs296547 0.0239
12 | EP07 706 rs10927875 0.0157
13 | 83346_EPGP014244 T3011 rs2251760 0.0154
14 | 83346_EPGP014244 T3231 rs2251760 0.0154
15 | 83506 T17255 rs2475335 0.00784
16 | 87001 301 rs2413583 0.0112
17 |
--------------------------------------------------------------------------------
/testfiles/test_repeated_delimiters.csv:
--------------------------------------------------------------------------------
1 | a b c d e
2 | 1 2 3 4 5
3 | 1 2 3 4 5
4 | 1 2 3 4 5
--------------------------------------------------------------------------------
/testfiles/test_simple_quoted.csv:
--------------------------------------------------------------------------------
1 | col1,col2
2 | "quoted field 1","quoted field 2"
--------------------------------------------------------------------------------
/testfiles/test_single_column.csv:
--------------------------------------------------------------------------------
1 | col1
2 | 1
3 | 2
4 | 3
--------------------------------------------------------------------------------
/testfiles/test_skip_args.csv:
--------------------------------------------------------------------------------
1 | "1,1","1,2","1,3","1,4","1,5","1,6","1,7","1,8","1,9","1,10"
2 | "2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9","2,10"
3 | "3,1","3,2","3,3","3,4","3,5","3,6","3,7","3,8","3,9","3,10"
4 | "4,1","4,2","4,3","4,4","4,5","4,6","4,7","4,8","4,9","4,10"
5 | "5,1","5,2","5,3","5,4","5,5","5,6","5,7","5,8","5,9","5,10"
6 | "6,1","6,2","6,3","6,4","6,5","6,6","6,7","6,8","6,9","6,10"
7 | "7,1","7,2","7,3","7,4","7,5","7,6","7,7","7,8","7,9","7,10"
8 | "8,1","8,2","8,3","8,4","8,5","8,6","8,7","8,8","8,9","8,10"
9 | "9,1","9,2","9,3","9,4","9,5","9,6","9,7","9,8","9,9","9,10"
10 | "10,1","10,2","10,3","10,4","10,5","10,6","10,7","10,8","10,9","10,10"
11 |
--------------------------------------------------------------------------------
/testfiles/test_skip_args_with_comments.csv:
--------------------------------------------------------------------------------
1 | # this line is commented out,,,
2 | # this line is commented out,,,
3 | "1,1","1,2","1,3","1,4","1,5","1,6","1,7","1,8","1,9","1,10"
4 | # this line is commented out"""
5 | "2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9","2,10"
6 | # this line is commented out
7 | "3,1","3,2","3,3","3,4","3,5","3,6","3,7","3,8","3,9","3,10"
8 | "4,1","4,2","4,3","4,4","4,5","4,6","4,7","4,8","4,9","4,10"
9 | # this line is commented out
10 | "5,1","5,2","5,3","5,4","5,5","5,6","5,7","5,8","5,9","5,10"
11 | "6,1","6,2","6,3","6,4","6,5","6,6","6,7","6,8","6,9","6,10"
12 | # this line is commented out
13 | "7,1","7,2","7,3","7,4","7,5","7,6","7,7","7,8","7,9","7,10"
14 | # this line is commented out
15 | "8,1","8,2","8,3","8,4","8,5","8,6","8,7","8,8","8,9","8,10"
16 | "9,1","9,2","9,3","9,4","9,5","9,6","9,7","9,8","9,9","9,10"
17 | "10,1","10,2","10,3","10,4","10,5","10,6","10,7","10,8","10,9","10,10"
18 |
--------------------------------------------------------------------------------
/testfiles/test_skiptocol_is_string.csv:
--------------------------------------------------------------------------------
1 | aa,bb,cc,dd
2 | 1,2,3,4
3 | 5,6,7,8
--------------------------------------------------------------------------------
/testfiles/test_skiptocol_is_string_with_empty_rows.csv:
--------------------------------------------------------------------------------
1 |
2 |
3 | aa,bb,cc,dd
4 | 1,2,3,4
5 | 5,6,7,8
--------------------------------------------------------------------------------
/testfiles/test_skiptocol_is_string_with_empty_rows_and_commented_rows.csv:
--------------------------------------------------------------------------------
1 | Comment
2 |
3 | aa,bb,cc,dd
4 | 1,2,3,4
5 | 5,6,7,8
--------------------------------------------------------------------------------
/testfiles/test_skiptorow_and_headerrow_equal_and_greater_than_1.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1,2,3
3 | 4,5,6
4 | 7,8,9
--------------------------------------------------------------------------------
/testfiles/test_strange_delimiter.csv:
--------------------------------------------------------------------------------
1 | 1{"}2{"}3{"}4{"}5
2 | 6{"}7{"}8{"}9{"}10
3 | 11{"}12{"}13{"}14{"}15
4 | 16{"}17{"}18{"}19{"}20
5 | 21{"}22{"}23{"}24{"}25
6 | 26{"}27{"}28{"}29{"}30
7 | 31{"}32{"}33{"}34{"}35
8 | 36{"}37{"}38{"}39{"}40
9 | 41{"}42{"}43{"}44{"}45
10 | 46{"}47{"}48{"}49{"}50
11 |
--------------------------------------------------------------------------------
/testfiles/test_strange_number_formats.csv:
--------------------------------------------------------------------------------
1 | 1,000,000;.1;+2; 3;,000;1e6;-1e6;4 ;1 1
--------------------------------------------------------------------------------
/testfiles/test_string_delimiters.csv:
--------------------------------------------------------------------------------
1 | num1::num2::num3::num4
2 | 1::1193::5::978300760
3 | 1::661::3::978302109
--------------------------------------------------------------------------------
/testfiles/test_tab_null_empty.txt:
--------------------------------------------------------------------------------
1 | A B C D
2 | 1 2000 x 100
3 | 2 y 200
4 |
--------------------------------------------------------------------------------
/testfiles/test_tab_null_string.txt:
--------------------------------------------------------------------------------
1 | A B C D
2 | 1 2000 x 100
3 | 2 NULL y 200
4 |
--------------------------------------------------------------------------------
/testfiles/test_too_few_headers.csv:
--------------------------------------------------------------------------------
1 | Col1,Col2,Col3,Col4,Col5
2 | 1,2,3,4,5,6,7,8,9,10
3 | 11,12,13,14,15,16,17,18,19,20
4 | 21,22,23,24,25,26,27,28,29,30
5 | 31,32,33,34,35,36,37,38,39,40
6 | 41,42,43,44,45,46,47,48,49,50
7 | 51,52,53,54,55,56,57,58,59,60
8 | 61,62,63,64,65,66,67,68,69,70
9 | 71,72,73,74,75,76,77,78,79,80
10 | 81,82,83,84,85,86,87,88,89,90
11 | 91,92,93,94,95,96,97,98,99,100
12 |
--------------------------------------------------------------------------------
/testfiles/test_triangular.csv:
--------------------------------------------------------------------------------
1 | 1
2 | 1,1
3 | 1,1,1
4 | 1,1,1,1
5 | 1,1,1,1,1
6 | 1,1,1,1,1,1
7 | 1,1,1,1,1,1,1
8 | 1,1,1,1,1,1,1,1
9 | 1,1,1,1,1,1,1,1,1
10 | 1,1,1,1,1,1,1,1,1,1
--------------------------------------------------------------------------------
/testfiles/test_truestrings.csv:
--------------------------------------------------------------------------------
1 | int,bools
2 | 1,T
3 | 2,TRUE
4 | 3,true
5 | 4,F
6 | 5,FALSE
7 | 6,false
--------------------------------------------------------------------------------
/testfiles/test_two_digit_DMY_dates.csv:
--------------------------------------------------------------------------------
1 | D-M-YString,ExcelEquivalent
2 | 1-1-00,36526
3 | 2-2-01,36924
4 | 3-3-02,37318
5 | 4-4-03,37715
6 | 5-5-04,38112
7 | 6-6-05,38509
8 | 7-7-06,38905
9 | 8-8-07,39302
10 | 9-9-08,39700
11 | 10-10-09,40096
12 | 11-11-10,40493
13 | 12-12-11,40889
14 | 13-1-12,40921
15 | 14-2-13,41319
16 | 15-3-14,41713
17 | 16-4-15,42110
18 | 17-5-16,42507
19 | 18-6-17,42904
20 | 19-7-18,43300
21 | 20-8-19,43697
22 | 21-9-20,44095
23 | 22-10-21,44491
24 | 23-11-22,44888
25 | 24-12-23,45284
26 | 25-1-24,45316
27 | 26-2-25,45714
28 | 27-3-26,46108
29 | 28-4-27,46505
30 | 1-5-28,46874
31 | 2-6-29,47271
32 | 3-7-30,11142
33 | 4-8-31,11539
34 | 5-9-32,11937
35 | 6-10-33,12333
36 | 7-11-34,12730
37 | 8-12-35,13126
38 | 9-1-36,13158
39 | 10-2-37,13556
40 | 11-3-38,13950
41 | 12-4-39,14347
42 | 13-5-40,14744
43 | 14-6-41,15141
44 | 15-7-42,15537
45 | 16-8-43,15934
46 | 17-9-44,16332
47 | 18-10-45,16728
48 | 19-11-46,17125
49 | 20-12-47,17521
50 | 21-1-48,17553
51 | 22-2-49,17951
52 | 23-3-50,18345
53 | 24-4-51,18742
54 | 25-5-52,19139
55 | 26-6-53,19536
56 | 27-7-54,19932
57 | 28-8-55,20329
58 | 1-9-56,20699
59 | 2-10-57,21095
60 | 3-11-58,21492
61 | 4-12-59,21888
62 | 5-1-60,21920
63 | 6-2-61,22318
64 | 7-3-62,22712
65 | 8-4-63,23109
66 | 9-5-64,23506
67 | 10-6-65,23903
68 | 11-7-66,24299
69 | 12-8-67,24696
70 | 13-9-68,25094
71 | 14-10-69,25490
72 | 15-11-70,25887
73 | 16-12-71,26283
74 | 17-1-72,26315
75 | 18-2-73,26713
76 | 19-3-74,27107
77 | 20-4-75,27504
78 | 21-5-76,27901
79 | 22-6-77,28298
80 | 23-7-78,28694
81 | 24-8-79,29091
82 | 25-9-80,29489
83 | 26-10-81,29885
84 | 27-11-82,30282
85 | 28-12-83,30678
86 | 1-1-84,30682
87 | 2-2-85,31080
88 | 3-3-86,31474
89 | 4-4-87,31871
90 | 5-5-88,32268
91 | 6-6-89,32665
92 | 7-7-90,33061
93 | 8-8-91,33458
94 | 9-9-92,33856
95 | 10-10-93,34252
96 | 11-11-94,34649
97 | 12-12-95,35045
98 | 13-1-96,35077
99 | 14-2-97,35475
100 | 15-3-98,35869
101 | 16-4-99,36266
--------------------------------------------------------------------------------
/testfiles/test_two_digit_MDY_dates.csv:
--------------------------------------------------------------------------------
1 | M-D-YString,ExcelEquivalent
2 | 1-1-00,36526
3 | 2-2-01,36924
4 | 3-3-02,37318
5 | 4-4-03,37715
6 | 5-5-04,38112
7 | 6-6-05,38509
8 | 7-7-06,38905
9 | 8-8-07,39302
10 | 9-9-08,39700
11 | 10-10-09,40096
12 | 11-11-10,40493
13 | 12-12-11,40889
14 | 1-13-12,40921
15 | 2-14-13,41319
16 | 3-15-14,41713
17 | 4-16-15,42110
18 | 5-17-16,42507
19 | 6-18-17,42904
20 | 7-19-18,43300
21 | 8-20-19,43697
22 | 9-21-20,44095
23 | 10-22-21,44491
24 | 11-23-22,44888
25 | 12-24-23,45284
26 | 1-25-24,45316
27 | 2-26-25,45714
28 | 3-27-26,46108
29 | 4-28-27,46505
30 | 5-1-28,46874
31 | 6-2-29,47271
32 | 7-3-30,11142
33 | 8-4-31,11539
34 | 9-5-32,11937
35 | 10-6-33,12333
36 | 11-7-34,12730
37 | 12-8-35,13126
38 | 1-9-36,13158
39 | 2-10-37,13556
40 | 3-11-38,13950
41 | 4-12-39,14347
42 | 5-13-40,14744
43 | 6-14-41,15141
44 | 7-15-42,15537
45 | 8-16-43,15934
46 | 9-17-44,16332
47 | 10-18-45,16728
48 | 11-19-46,17125
49 | 12-20-47,17521
50 | 1-21-48,17553
51 | 2-22-49,17951
52 | 3-23-50,18345
53 | 4-24-51,18742
54 | 5-25-52,19139
55 | 6-26-53,19536
56 | 7-27-54,19932
57 | 8-28-55,20329
58 | 9-1-56,20699
59 | 10-2-57,21095
60 | 11-3-58,21492
61 | 12-4-59,21888
62 | 1-5-60,21920
63 | 2-6-61,22318
64 | 3-7-62,22712
65 | 4-8-63,23109
66 | 5-9-64,23506
67 | 6-10-65,23903
68 | 7-11-66,24299
69 | 8-12-67,24696
70 | 9-13-68,25094
71 | 10-14-69,25490
72 | 11-15-70,25887
73 | 12-16-71,26283
74 | 1-17-72,26315
75 | 2-18-73,26713
76 | 3-19-74,27107
77 | 4-20-75,27504
78 | 5-21-76,27901
79 | 6-22-77,28298
80 | 7-23-78,28694
81 | 8-24-79,29091
82 | 9-25-80,29489
83 | 10-26-81,29885
84 | 11-27-82,30282
85 | 12-28-83,30678
86 | 1-1-84,30682
87 | 2-2-85,31080
88 | 3-3-86,31474
89 | 4-4-87,31871
90 | 5-5-88,32268
91 | 6-6-89,32665
92 | 7-7-90,33061
93 | 8-8-91,33458
94 | 9-9-92,33856
95 | 10-10-93,34252
96 | 11-11-94,34649
97 | 12-12-95,35045
98 | 1-13-96,35077
99 | 2-14-97,35475
100 | 3-15-98,35869
101 | 4-16-99,36266
102 |
--------------------------------------------------------------------------------
/testfiles/test_two_digit_YMD_dates.csv:
--------------------------------------------------------------------------------
1 | Y-M-DString,ExcelEquivalent
2 | 00-1-1,36526
3 | 01-2-2,36924
4 | 02-3-3,37318
5 | 03-4-4,37715
6 | 04-5-5,38112
7 | 05-6-6,38509
8 | 06-7-7,38905
9 | 07-8-8,39302
10 | 08-9-9,39700
11 | 09-10-10,40096
12 | 10-11-11,40493
13 | 11-12-12,40889
14 | 12-1-13,40921
15 | 13-2-14,41319
16 | 14-3-15,41713
17 | 15-4-16,42110
18 | 16-5-17,42507
19 | 17-6-18,42904
20 | 18-7-19,43300
21 | 19-8-20,43697
22 | 20-9-21,44095
23 | 21-10-22,44491
24 | 22-11-23,44888
25 | 23-12-24,45284
26 | 24-1-25,45316
27 | 25-2-26,45714
28 | 26-3-27,46108
29 | 27-4-28,46505
30 | 28-5-1,46874
31 | 29-6-2,47271
32 | 30-7-3,11142
33 | 31-8-4,11539
34 | 32-9-5,11937
35 | 33-10-6,12333
36 | 34-11-7,12730
37 | 35-12-8,13126
38 | 36-1-9,13158
39 | 37-2-10,13556
40 | 38-3-11,13950
41 | 39-4-12,14347
42 | 40-5-13,14744
43 | 41-6-14,15141
44 | 42-7-15,15537
45 | 43-8-16,15934
46 | 44-9-17,16332
47 | 45-10-18,16728
48 | 46-11-19,17125
49 | 47-12-20,17521
50 | 48-1-21,17553
51 | 49-2-22,17951
52 | 50-3-23,18345
53 | 51-4-24,18742
54 | 52-5-25,19139
55 | 53-6-26,19536
56 | 54-7-27,19932
57 | 55-8-28,20329
58 | 56-9-1,20699
59 | 57-10-2,21095
60 | 58-11-3,21492
61 | 59-12-4,21888
62 | 60-1-5,21920
63 | 61-2-6,22318
64 | 62-3-7,22712
65 | 63-4-8,23109
66 | 64-5-9,23506
67 | 65-6-10,23903
68 | 66-7-11,24299
69 | 67-8-12,24696
70 | 68-9-13,25094
71 | 69-10-14,25490
72 | 70-11-15,25887
73 | 71-12-16,26283
74 | 72-1-17,26315
75 | 73-2-18,26713
76 | 74-3-19,27107
77 | 75-4-20,27504
78 | 76-5-21,27901
79 | 77-6-22,28298
80 | 78-7-23,28694
81 | 79-8-24,29091
82 | 80-9-25,29489
83 | 81-10-26,29885
84 | 82-11-27,30282
85 | 83-12-28,30678
86 | 84-1-1,30682
87 | 85-2-2,31080
88 | 86-3-3,31474
89 | 87-4-4,31871
90 | 88-5-5,32268
91 | 89-6-6,32665
92 | 90-7-7,33061
93 | 91-8-8,33458
94 | 92-9-9,33856
95 | 93-10-10,34252
96 | 94-11-11,34649
97 | 95-12-12,35045
98 | 96-1-13,35077
99 | 97-2-14,35475
100 | 98-3-15,35869
101 | 99-4-16,36266
--------------------------------------------------------------------------------
/testfiles/test_types.csv:
--------------------------------------------------------------------------------
1 | int,float,date,datetime,bool,string,weakrefstring,missing
2 | 1,1.0,2018-01-01,2018-01-01T00:00:00,true,hey,there,
--------------------------------------------------------------------------------
/testfiles/test_utf16.csv:
--------------------------------------------------------------------------------
1 | c o l 1 , c o l 2 , c o l 3
2 | 1 . 0 , 2 . 0 , 3 . 0
3 | 4 . 0 , 5 . 0 , 6 . 0
4 | 7 . 0 , 8 . 0 , 9 . 0
--------------------------------------------------------------------------------
/testfiles/test_utf16_le.csv:
--------------------------------------------------------------------------------
1 | c o l 1 , c o l 2 , c o l 3
2 | 1 . 0 , 2 . 0 , 3 . 0
3 | 4 . 0 , 5 . 0 , 6 . 0
4 | 7 . 0 , 8 . 0 , 9 . 0
--------------------------------------------------------------------------------
/testfiles/test_utf8.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,5.0,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_utf8_with_BOM.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,5.0,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_various_time_formats.csv:
--------------------------------------------------------------------------------
1 | Time,Should cast to
2 | 4:1:2,0.167384259259259
3 | 4:1:2 am,0.167384259259259
4 | 4:1:02,0.167384259259259
5 | 4:1:02 am,0.167384259259259
6 | 4:01:2,0.167384259259259
7 | 4:01:2 am,0.167384259259259
8 | 4:01:02,0.167384259259259
9 | 4:01:02 am,0.167384259259259
10 | 04:1:2,0.167384259259259
11 | 04:1:2 am,0.167384259259259
12 | 04:1:02,0.167384259259259
13 | 04:1:02 am,0.167384259259259
14 | 04:01:2,0.167384259259259
15 | 04:01:2 am,0.167384259259259
16 | 04:01:02,0.167384259259259
17 | 04:01:02 am,0.167384259259259
18 | 4:1:2.123,0.16738568287037
19 | 4:1:2.123 am,0.16738568287037
20 | 4:1:02.123,0.16738568287037
21 | 4:1:02.123 am,0.16738568287037
22 | 4:01:2.123,0.16738568287037
23 | 4:01:2.123 am,0.16738568287037
24 | 4:01:02.123,0.16738568287037
25 | 4:01:02.123 am,0.16738568287037
26 | 04:1:2.123,0.16738568287037
27 | 04:1:2.123 am,0.16738568287037
28 | 04:1:02.123,0.16738568287037
29 | 04:1:02.123 am,0.16738568287037
30 | 04:01:2.123,0.16738568287037
31 | 04:01:2.123 am,0.16738568287037
32 | 04:01:02.123,0.16738568287037
33 | 04:01:02.123 am,0.16738568287037
34 | 4:2,0.168055555555556
35 | 4:2 am,0.168055555555556
36 | 4:02,0.168055555555556
37 | 4:02 am,0.168055555555556
38 | 04:2,0.168055555555556
39 | 04:2 am,0.168055555555556
40 | 04:02,0.168055555555556
41 | 04:02 am,0.168055555555556
42 | 4:1:2 pm,0.667384259259259
43 | 4:1:02 pm,0.667384259259259
44 | 4:01:2 pm,0.667384259259259
45 | 4:01:02 pm,0.667384259259259
46 | 04:1:2 pm,0.667384259259259
47 | 04:1:02 pm,0.667384259259259
48 | 04:01:2 pm,0.667384259259259
49 | 04:01:02 pm,0.667384259259259
50 | 4:1:2.123 pm,0.66738568287037
51 | 4:1:02.123 pm,0.66738568287037
52 | 4:01:2.123 pm,0.66738568287037
53 | 4:01:02.123 pm,0.66738568287037
54 | 04:1:2.123 pm,0.66738568287037
55 | 04:1:02.123 pm,0.66738568287037
56 | 04:01:2.123 pm,0.66738568287037
57 | 04:01:02.123 pm,0.66738568287037
58 | 4:2 pm,0.668055555555556
59 | 4:02 pm,0.668055555555556
60 | 04:2 pm,0.668055555555556
61 | 04:02 pm,0.668055555555556
62 | 04:02.123,04:02.123
63 | 04:02.123 am,04:02.123 am
64 | 04:02.123 pm,04:02.123 pm
65 | 04:2.123,04:2.123
66 | 04:2.123 am,04:2.123 am
67 | 04:2.123 pm,04:2.123 pm
68 | 24:01:02,24:01:02
69 | 24:01:02 am,24:01:02 am
70 | 24:01:02 pm,24:01:02 pm
71 | 24:01:02.123,24:01:02.123
72 | 24:01:02.123 am,24:01:02.123 am
73 | 24:01:02.123 pm,24:01:02.123 pm
74 | 24:01:2,24:01:2
75 | 24:01:2 am,24:01:2 am
76 | 24:01:2 pm,24:01:2 pm
77 | 24:01:2.123,24:01:2.123
78 | 24:01:2.123 am,24:01:2.123 am
79 | 24:01:2.123 pm,24:01:2.123 pm
80 | 24:02,24:02
81 | 24:02 am,24:02 am
82 | 24:02 pm,24:02 pm
83 | 24:02.123,24:02.123
84 | 24:02.123 am,24:02.123 am
85 | 24:02.123 pm,24:02.123 pm
86 | 24:1:02,24:1:02
87 | 24:1:02 am,24:1:02 am
88 | 24:1:02 pm,24:1:02 pm
89 | 24:1:02.123,24:1:02.123
90 | 24:1:02.123 am,24:1:02.123 am
91 | 24:1:02.123 pm,24:1:02.123 pm
92 | 24:1:2,24:1:2
93 | 24:1:2 am,24:1:2 am
94 | 24:1:2 pm,24:1:2 pm
95 | 24:1:2.123,24:1:2.123
96 | 24:1:2.123 am,24:1:2.123 am
97 | 24:1:2.123 pm,24:1:2.123 pm
98 | 24:2,24:2
99 | 24:2 am,24:2 am
100 | 24:2 pm,24:2 pm
101 | 24:2.123,24:2.123
102 | 24:2.123 am,24:2.123 am
103 | 24:2.123 pm,24:2.123 pm
104 | 4:02.123,4:02.123
105 | 4:02.123 am,4:02.123 am
106 | 4:02.123 pm,4:02.123 pm
107 | 4:2.123,4:2.123
108 | 4:2.123 am,4:2.123 am
109 | 4:2.123 pm,4:2.123 pm
110 |
--------------------------------------------------------------------------------
/testfiles/test_windows.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3
2 | 1.0,2.0,3.0
3 | 4.0,5.0,6.0
4 | 7.0,8.0,9.0
--------------------------------------------------------------------------------
/testfiles/test_y-m-d_with_time.csv:
--------------------------------------------------------------------------------
1 | 2021-Sep-01 16:23:13
2 | 2022-Oct-09 04:16:13
3 | 2022-Dec-27 13:56:15
4 | 2022-May-07 08:56:31
5 | 2024-Jan-14 05:29:48
6 | 2023-Jan-16 08:12:25
7 | 2023-12-10 13:35:13
8 | 2023-01-11 20:59:27
9 | 2021-10-28 07:31:59
10 | 2023-07-21 00:02:45
11 | 2021-12-16 19:15:38
12 |
--------------------------------------------------------------------------------
/testfiles/time.csv:
--------------------------------------------------------------------------------
1 | time,value
2 | 00:00:00,1
3 | 00:10:00,2
--------------------------------------------------------------------------------
/testfiles/types_override.csv:
--------------------------------------------------------------------------------
1 | col1,col2,col3,col4,col5
2 | A,1,2,3,4
3 | B,5,6,7,8
4 | C,9,10,11,12
--------------------------------------------------------------------------------
/testfiles/utf_8_with_bom.csv:
--------------------------------------------------------------------------------
1 | 1,2,3,4
2 | 5,6,7,8
3 | 9,10,11,12
--------------------------------------------------------------------------------
/testresults/SpeedTestRDatasets.csv:
--------------------------------------------------------------------------------
1 | "File Name","Size","CSVRead time","sdkn104 time","ws_garcia time","sFileShow time"
2 | "C:\Projects\RDatasets\csv\openintro\military.csv",75834630,17.227298200014,19.0597069999785,38.2260239000316,39.744655699993
3 | "C:\Projects\RDatasets\csv\mosaicData\Birthdays.csv",17041203,5.37923289998434,5.47507980000228,9.71185580000747,8.97477839997737
4 | "C:\Projects\RDatasets\csv\stevedata\wvs_justifbribe.csv",13865923,3.65180829999736,3.69349169998895,7.58964459999697,6.75487200001953
5 | "C:\Projects\RDatasets\csv\nycflights13\flights.csv",36662955,10.0413879000116,10.1517499000183,29.9894386999658,18.4015824000235
6 | "C:\Projects\RDatasets\csv\stevedata\wvs_immig.csv",12466517,3.86172899999656,4.23992249998264,7.07374879997224,6.41132479999214
7 | "C:\Projects\RDatasets\csv\AER\Fertility.csv",13126568,4.14055519999238,4.34038469998632,8.14865099999588,7.13716340000974
8 | "C:\Projects\RDatasets\csv\openintro\avandia.csv",6791639,1.56858249998186,1.647877099982,2.61640230001649,3.19490290002432
9 | "C:\Projects\RDatasets\csv\Stat2Data\AthleteGrad.csv",6957769,1.56789909995859,1.7231424000347,3.02845019998495,3.35895000002347
10 | "C:\Projects\RDatasets\csv\causaldata\mortgages.csv",7413415,2.3402012999868,2.12149879999924,4.89660049998201,3.88578250003047
11 | "C:\Projects\RDatasets\csv\openintro\mammogram.csv",2235827,0.701276500010863,0.646963300008792,1.48231130000204,1.32681090000551
12 | "C:\Projects\RDatasets\csv\lme4\InstEval.csv",2961256,0.95355550001841,1.10602569999173,1.75358670001151,1.61335639999015
13 | "C:\Projects\RDatasets\csv\stevedata\gss_abortion.csv",5445241,2.03374149999581,1.85522630001651,5.19064290000824,2.94080059998669
14 | "C:\Projects\RDatasets\csv\stevedata\TV16.csv",7507239,2.13716390001355,2.10940749995643,6.45889470004477,3.28436529997271
15 | "C:\Projects\RDatasets\csv\stevedata\gss_wages.csv",5993720,1.40729070000816,1.37251509999624,2.88701869995566,2.91526790003991
16 | "C:\Projects\RDatasets\csv\AER\CPSSW8.csv",2638772,0.7317047000397,0.66516719997162,1.48112459998811,1.14047980000032
17 | "C:\Projects\RDatasets\csv\stevedata\eq_passengercars.csv",7179209,0.926773099985439,1.03347590001067,1.16827879997436,2.18614570004866
18 | "C:\Projects\RDatasets\csv\ggplot2movies\movies.csv",6059498,2.00453889998607,2.0191380000324,7.04936399997678,2.8979881000123
19 | "C:\Projects\RDatasets\csv\ggplot2\diamonds.csv",3246501,0.997769700014032,0.959420200029854,2.6842552999733,1.97346810001181
20 | "C:\Projects\RDatasets\csv\causaldata\gov_transfers_density.csv",1093754,0.335608399997,0.257663499971386,0.449510500009637,0.493548099999316
21 | "C:\Projects\RDatasets\csv\openintro\seattlepets.csv",4127658,1.08434339996893,1.1609723000438,1.53135079995263,1.60844660003204
22 |
--------------------------------------------------------------------------------
/vba/VBA-CSV-GIFMaker.xlsm/AuditSheetComments.txt:
--------------------------------------------------------------------------------
1 | Version Date Time Author Comment
2 | 2 31-Oct-2022 16:31 Philip Swannell Corrected typo in instructions.
3 | 1 01-Nov-2021 16:10 Philip Swannell Added Audit sheet
--------------------------------------------------------------------------------
/vba/VBA-CSV-GIFMaker.xlsm/FilesInProject.txt:
--------------------------------------------------------------------------------
1 | AuditSheetComments.txt
2 | modClipboard.bas
3 | Module1.bas
4 | VBA-CSV-GIFMaker.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CSV-GIFMaker.xlsm/Module1.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "Module1"
2 | Option Explicit
3 |
4 | Sub MakeGIF()
5 | Dim Keys
6 | Dim i As Long
7 | Dim t1 As Double
8 |
9 | AppActivate "VBA-CSV.xlsm"
10 |
11 | ActiveSheet.Calculate
12 | Keys = sExpandDown(ActiveSheet.Range("keys"))
13 |
14 | For i = 1 To sNRows(Keys)
15 |
16 | Application.SendKeys Keys(i, 1)
17 | t1 = sElapsedTime()
18 | While sElapsedTime() < t1 + ActiveSheet.Range("Delays").Offset(i - 1).Value
19 | DoEvents
20 | Wend
21 | Next i
22 |
23 | Debug.Print Now()
24 |
25 |
26 | End Sub
27 |
28 |
29 | Sub MakeFirstGIF()
30 |
31 | CopyStringToClipboard "https://vincentarelbundock.github.io/Rdatasets/csv/carData/TitanicSurvival.csv"
32 | MakeGIF
33 |
34 | End Sub
35 |
--------------------------------------------------------------------------------
/vba/VBA-CSV-GIFMaker.xlsm/VBA-CSV-GIFMaker.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV-GIFMaker.xlsm/VBA-CSV-GIFMaker.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CSV-GIFMaker.xlsm/modClipboard.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "modClipboard"
2 | ' -----------------------------------------------------------------------------------------------------------------------
3 | ' Module : modClipboard
4 | ' Author : Philip Swannell
5 | ' Date : 28-Mar-2016, 21-Nov-2017
6 | ' Purpose : Copy text to clipboard, Try two approaches: via a "DataObject" and via Windows API
7 | ' References:
8 | ' http://www.thespreadsheetguru.com/blog/2015/1/13/how-to-use-vba-code-to-copy-text-to-the-clipboard
9 | ' 21 Nov 2017 Was finding problems with 64-bit implementation on the page above, fixed on Stack Overflow :-)
10 | ' https://stackoverflow.com/questions/18668928/excel-2013-64-bit-vba-clipboard-api-doesnt-work
11 | ' -----------------------------------------------------------------------------------------------------------------------
12 | Option Explicit
13 |
14 | Private Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal wFlags As Long, ByVal dwBytes As LongPtr) As LongPtr
15 | Private Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
16 | Private Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As Long
17 | Private Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As Long
18 | Private Declare PtrSafe Function CloseClipboard Lib "user32" () As Long
19 | Private Declare PtrSafe Function EmptyClipboard Lib "user32" () As Long
20 | Private Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As LongPtr) As LongPtr
21 | Private Declare PtrSafe Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As LongPtr
22 |
23 | ' -----------------------------------------------------------------------------------------------------------------------
24 | ' Procedure : CopyStringToClipboard
25 | ' Author : Philip Swannell
26 | ' Date : 08-Feb-2018
27 | ' Purpose : Copies a string to the Windows clipboard. Previously had a way of doing this using DataObject.PutInClipboard, but that proved unreliable
28 | ' Parameters :
29 | ' MyString: The string to put on the clipboard
30 | ' -----------------------------------------------------------------------------------------------------------------------
31 | Sub CopyStringToClipboard(MyString As String)
32 |
33 | Dim ErrorMessage As String
34 | Dim hClipMemory As LongPtr
35 | Dim hGlobalMemory As LongPtr
36 | Dim lpGlobalMemory As LongPtr
37 | Dim x As Long
38 | Const GHND = &H42
39 | Const CF_TEXT = 1
40 |
41 | 'Allocate moveable global memory
42 | 1 On Error GoTo ErrHandler
43 | 2 hGlobalMemory = GlobalAlloc(GHND, Len(MyString) + 1)
44 |
45 | 'Lock the block to get a far pointer to this memory.
46 | 3 lpGlobalMemory = GlobalLock(hGlobalMemory)
47 |
48 | 'Copy the string to this global memory.
49 | 4 lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString)
50 |
51 | 'Unlock the memory.
52 | 5 If GlobalUnlock(hGlobalMemory) <> 0 Then
53 | 6 ErrorMessage = "Could not unlock memory location. Copy aborted."
54 | 7 GoTo OutOfHere2
55 | 8 End If
56 |
57 | 'Open the Clipboard to copy data to.
58 | 9 If OpenClipboard(0&) = 0 Then
59 | 10 Throw "Could not open the Clipboard. Copy aborted."
60 | 11 End If
61 |
62 | 'Clear the Clipboard.
63 | 12 x = EmptyClipboard()
64 |
65 | 'Copy the data to the Clipboard.
66 | 13 hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory)
67 |
68 | OutOfHere2:
69 | 14 If CloseClipboard() = 0 Then
70 | 15 ErrorMessage = "Could not close Clipboard."
71 | 16 End If
72 |
73 | 17 If ErrorMessage <> vbNullString Then Throw ErrorMessage
74 | 18 Exit Sub
75 | ErrHandler:
76 | 19 Throw "#CopyStringToClipboard (line " & CStr(Erl) + "): " & Err.Description & "!"
77 | End Sub
78 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/FilesInProject.txt:
--------------------------------------------------------------------------------
1 | AuditSheetComments.txt
2 | Formulas\CSVWriteTests.txt
3 | Formulas\DateParsingTest.txt
4 | Formulas\GIF.txt
5 | Formulas\GIF2.txt
6 | Formulas\GIF3.txt
7 | Formulas\Performance (10).txt
8 | Formulas\Performance (2).txt
9 | Formulas\Performance (3).txt
10 | Formulas\Performance (4).txt
11 | Formulas\Performance (6).txt
12 | Formulas\Performance (7).txt
13 | Formulas\Performance (8).txt
14 | Formulas\Performance (9).txt
15 | Formulas\Performance.txt
16 | Formulas\RegExp.txt
17 | Formulas\Test.txt
18 | Values\Audit.csv
19 | Values\CSVWriteTests.csv
20 | Values\DateParsingTest.csv
21 | Values\GIF.csv
22 | Values\GIF2.csv
23 | Values\GIF3.csv
24 | Values\HiddenSheet.csv
25 | Values\Performance (10).csv
26 | Values\Performance (2).csv
27 | Values\Performance (3).csv
28 | Values\Performance (4).csv
29 | Values\Performance (6).csv
30 | Values\Performance (7).csv
31 | Values\Performance (8).csv
32 | Values\Performance (9).csv
33 | Values\Performance.csv
34 | Values\RegExp.csv
35 | Values\Test.csv
36 | Values\TestResults.csv
37 | VBA\CSVinterface.cls
38 | VBA\ECPArrayList.cls
39 | VBA\ECPTextStream.cls
40 | VBA\modCSVNotRFC4180.bas
41 | VBA\modCSVPerformance.bas
42 | VBA\modCSVPerformanceLowLevel.bas
43 | VBA\modCSVReadWrite.bas
44 | VBA\modCSVTest.bas
45 | VBA\modCSVTestDeps.bas
46 | VBA\modCSVTestRDatasets.bas
47 | VBA\modCSVTestRoundTrip.bas
48 | VBA\modCSVTestUtils.bas
49 | VBA\modCSVWritePerformance.bas
50 | VBA\modCSVXLUtils.bas
51 | VBA\parserConfig.cls
52 | VBA\sdkn104_CSVUtils.bas
53 | VBA\shTest.cls
54 | VBA\ThisWorkbook.cls
55 | VBA-CSV.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/CSVWriteTests.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | F5 =AND(Q8#)
3 | O8 =CSVWrite(INDIRECT(E8),G8,F8,H8,I8,J8,K8,L8,M8,N8)
4 | Q8:Q57 =O8:O57=P8:P57
5 | O9 =CSVWrite(INDIRECT(E9),G9,F9,H9,I9,J9,K9,L9,M9,N9)
6 | O10 =CSVWrite(INDIRECT(E10),G10,F10,H10,I10,J10,K10,L10,M10,N10)
7 | O11 =CSVWrite(INDIRECT(E11),G11,F11,H11,I11,J11,K11,L11,M11,N11)
8 | O12 =CSVWrite(INDIRECT(E12),G12,F12,H12,I12,J12,K12,L12,M12,N12)
9 | O13 =CSVWrite(INDIRECT(E13),G13,F13,H13,I13,J13,K13,L13,M13,N13)
10 | O14 =CSVWrite(INDIRECT(E14),G14,F14,H14,I14,J14,K14,L14,M14,N14)
11 | O15 =CSVWrite(INDIRECT(E15),G15,F15,H15,I15,J15,K15,L15,M15,N15)
12 | O16 =CSVWrite(INDIRECT(E16),G16,F16,H16,I16,J16,K16,L16,M16,N16)
13 | O17 =CSVWrite(INDIRECT(E17),G17,F17,H17,I17,J17,K17,L17,M17,N17)
14 | C18 =PI()
15 | O18 =CSVWrite(INDIRECT(E18),G18,F18,H18,I18,J18,K18,L18,M18,N18)
16 | B19 =1/0
17 | C19 =NA()
18 | O19 =CSVWrite(INDIRECT(E19),G19,F19,H19,I19,J19,K19,L19,M19,N19)
19 | O20 =CSVWrite(INDIRECT(E20),G20,F20,H20,I20,J20,K20,L20,M20,N20)
20 | O21 =CSVWrite(INDIRECT(E21),G21,F21,H21,I21,J21,K21,L21,M21,N21)
21 | B22:C25 =UNICHAR(10000+SEQUENCE(4,2))
22 | O22 =CSVWrite(INDIRECT(E22),G22,F22,H22,I22,J22,K22,L22,M22,N22)
23 | O23 =CSVWrite(INDIRECT(E23),G23,F23,H23,I23,J23,K23,L23,M23,N23)
24 | O24 =CSVWrite(INDIRECT(E24),G24,F24,H24,I24,J24,K24,L24,M24,N24)
25 | O25 =CSVWrite(INDIRECT(E25),G25,F25,H25,I25,J25,K25,L25,M25,N25)
26 | O26 =CSVWrite(INDIRECT(E26),G26,F26,H26,I26,J26,K26,L26,M26,N26)
27 | O27 =CSVWrite(INDIRECT(E27),G27,F27,H27,I27,J27,K27,L27,M27,N27)
28 | O28 =CSVWrite(INDIRECT(E28),G28,F28,H28,I28,J28,K28,L28,M28,N28)
29 | O29 =CSVWrite(INDIRECT(E29),G29,F29,H29,I29,J29,K29,L29,M29,N29)
30 | O30 =CSVWrite(INDIRECT(E30),G30,F30,H30,I30,J30,K30,L30,M30,N30)
31 | O31 =CSVWrite(INDIRECT(E31),G31,F31,H31,I31,J31,K31,L31,M31,N31)
32 | O32 =CSVWrite(INDIRECT(E32),G32,F32,H32,I32,J32,K32,L32,M32,N32)
33 | O33 =CSVWrite(INDIRECT(E33),G33,F33,H33,I33,J33,K33,L33,M33,N33)
34 | N34 =CHAR(10)
35 | O34 =CSVWrite(INDIRECT(E34),G34,F34,H34,I34,J34,K34,L34,M34,N34)
36 | N35 =CHAR(13)
37 | O35 =CSVWrite(INDIRECT(E35),G35,F35,H35,I35,J35,K35,L35,M35,N35)
38 | O36 =CSVWrite(INDIRECT(E36),G36,F36,H36,I36,J36,K36,L36,M36,N36)
39 | O37 =CSVWrite(INDIRECT(E37),G37,F37,H37,I37,J37,K37,L37,M37,N37)
40 | O38 =CSVWrite(INDIRECT(E38),G38,F38,H38,I38,J38,K38,L38,M38,N38)
41 | O39 =CSVWrite(INDIRECT(E39),G39,F39,H39,I39,J39,K39,L39,M39,N39)
42 | O40 =CSVWrite(INDIRECT(E40),G40,F40,H40,I40,J40,K40,L40,M40,N40)
43 | O41 =CSVWrite(INDIRECT(E41),G41,F41,H41,I41,J41,K41,L41,M41,N41)
44 | O42 =CSVWrite(INDIRECT(E42),G42,F42,H42,I42,J42,K42,L42,M42,N42)
45 | O43 =CSVWrite(INDIRECT(E43),G43,F43,H43,I43,J43,K43,L43,M43,N43)
46 | O44 =CSVWrite(INDIRECT(E44),G44,F44,H44,I44,J44,K44,L44,M44,N44)
47 | O45 =CSVWrite(INDIRECT(E45),G45,F45,H45,I45,J45,K45,L45,M45,N45)
48 | O46 =CSVWrite(INDIRECT(E46),G46,F46,H46,I46,J46,K46,L46,M46,N46)
49 | O47 =CSVWrite(INDIRECT(E47),G47,F47,H47,I47,J47,K47,L47,M47,N47)
50 | O48 =CSVWrite(INDIRECT(E48),G48,F48,H48,I48,J48,K48,L48,M48,N48)
51 | J49 =CHAR(10)
52 | O49 =CSVWrite(INDIRECT(E49),G49,F49,H49,I49,J49,K49,L49,M49,N49)
53 | J50 =CHAR(13)
54 | O50 =CSVWrite(INDIRECT(E50),G50,F50,H50,I50,J50,K50,L50,M50,N50)
55 | O51 =CSVWrite(INDIRECT(E51),G51,F51,H51,I51,J51,K51,L51,M51,N51)
56 | O52 =CSVWrite(INDIRECT(E52),G52,F52,H52,I52,J52,K52,L52,M52,N52)
57 | O53 =CSVWrite(INDIRECT(E53),G53,F53,H53,I53,J53,K53,L53,M53,N53)
58 | O54 =CSVWrite(INDIRECT(E54),G54,F54,H54,I54,J54,K54,L54,M54,N54)
59 | O55 =CSVWrite(INDIRECT(E55),G55,F55,H55,I55,J55,K55,L55,M55,N55)
60 | O56 =CSVWrite(INDIRECT(E56),G56,F56,H56,I56,J56,K56,L56,M56,N56)
61 | O57 =CSVWrite(INDIRECT(E57),G57,F57,H57,I57,J57,K57,L57,M57,N57)
62 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/DateParsingTest.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | J12:J14 =INDEX(B29:D108,J10,{1;2;3})
3 | J15 =SUM(IF(F29#=J29#,1,0))
4 | J16 =SUM(IF(ISNUMBER(J29#),1,0))
5 | J17 =SUM(IF(ISTEXT(J29#),1,0))
6 | J21 =AND(M29:O108=Q29#)
7 | M27:O27 =TRANSPOSE(I15:I17)
8 | Q27:S27 =TRANSPOSE(I15:I17)
9 | C28 =I13
10 | M28:O28 =TRANSPOSE(J15:J17)
11 | A29:A108 =SEQUENCE(80)
12 | C29:C108 =B29:B108&" "&TimeFormat
13 | F29:F758 =SEQUENCE(365*2,,2*DATE(2023,1,1))/2
14 | H29:H758 =CSVRead(CSVWrite(F29#,,,WriteFormat,WriteFromatDateTime),FALSE,",")
15 | J29:J758 =CSVRead(CSVWrite(F29#,,,WriteFormat,WriteFromatDateTime),TRUE,",",,ReadFormat)
16 | L29:L108 =SEQUENCE(80)
17 | Q29:S108 ={730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;730,730,0;24,288,442;24,288,442;24,288,442;24,288,442;0,0,730;0,0,730;0,0,730;0,0,730;24,288,442;24,288,442;24,288,442;24,288,442;0,0,730;0,0,730;0,0,730;0,0,730;24,288,442;24,288,442;24,288,442;24,288,442;24,288,442;24,288,442;24,288,442;24,288,442;0,0,730;0,0,730;0,0,730;0,0,730;0,0,730;0,0,730;0,0,730;0,0,730}
18 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/GIF.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | B3:F1312 =CSVRead(B1,TRUE,,,,,,,,,,,,,"NA",NA())
3 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/GIF2.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | F2 =CSVWrite(A2:D8,"C:\Temp\Test.csv")
3 | H2:H10 =CSVRead(F2,,FALSE)
4 | J2:M8 =CSVRead(F2,TRUE)
5 | A3:A8 =SEQUENCE(6)
6 | B3:B8 =MOD(A3#,2)=0
7 | C3:C8 =TODAY()+A3#
8 | D6 ="A"&CHAR(13)&" CR"
9 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/GIF3.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | A3:A7 =SEQUENCE(5)
3 | B3:B7 =MOD(A3#,2)=0
4 | C3:C7 =TODAY()+A3#
5 | D6 ="A"&CHAR(13)&" CR"
6 | A10 =CSVWrite(A2:D7,"C:\Temp\Test.csv")
7 | A13:A20 =CSVRead(A10,FALSE,FALSE)
8 | A23:D28 =CSVRead(A10,TRUE)
9 | A31:D36 =A2:D7=A23:D28
10 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (10).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | E33 =$E$6
28 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
29 | A34 =LEN(B34)
30 | B34 =REPT("x",32)
31 | A35 =LEN(B35)
32 | B35 =REPT("x",32)
33 | A36 =LEN(B36)
34 | B36 =REPT("x",32)
35 | A37 =LEN(B37)
36 | B37 =REPT("x",32)
37 | A38 =LEN(B38)
38 | B38 =REPT("x",32)
39 | A39 =LEN(B39)
40 | B39 =REPT("x",32)
41 | A40 =LEN(B40)
42 | B40 =REPT("x",32)
43 | A41 =LEN(B41)
44 | B41 =REPT("x",32)
45 | A42 =LEN(B42)
46 | B42 =REPT("x",32)
47 | A43 =LEN(B43)
48 | B43 =REPT("x",32)
49 | A44 =LEN(B44)
50 | B44 =REPT("x",32)
51 | A45 =LEN(B45)
52 | B45 =REPT("x",32)
53 | A46 =LEN(B46)
54 | B46 =REPT("x",32)
55 | A47 =LEN(B47)
56 | B47 =REPT("x",32)
57 | A48 =LEN(B48)
58 | B48 =REPT("x",32)
59 | A49 =LEN(B49)
60 | B49 =REPT("x",32)
61 | A50 =LEN(B50)
62 | B50 =REPT("x",32)
63 | A51 =LEN(B51)
64 | B51 =REPT("x",32)
65 | A52 =LEN(B52)
66 | B52 =REPT("x",32)
67 | A53 =LEN(B53)
68 | B53 =REPT("x",32)
69 | A54 =LEN(B54)
70 | B54 =REPT("x",32)
71 | N56 =N54/1000000/E54
72 | N57 =C54*D54/E54
73 | E60 =$E$6
74 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
75 | A61 =LEN(B61)
76 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A62 =LEN(B62)
78 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A63 =LEN(B63)
80 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A64 =LEN(B64)
82 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A65 =LEN(B65)
84 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A66 =LEN(B66)
86 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A67 =LEN(B67)
88 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A68 =LEN(B68)
90 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A69 =LEN(B69)
92 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A70 =LEN(B70)
94 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A71 =LEN(B71)
96 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A72 =LEN(B72)
98 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A73 =LEN(B73)
100 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A74 =LEN(B74)
102 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A75 =LEN(B75)
104 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A76 =LEN(B76)
106 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A77 =LEN(B77)
108 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A78 =LEN(B78)
110 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A79 =LEN(B79)
112 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A80 =LEN(B80)
114 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | A81 =LEN(B81)
116 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
117 | N83 =N81/1000000/E81
118 | G84 =G81/E81
119 | N84 =C81*D81/E81
120 | G85 =E81/H81
121 | E87 =$E$6
122 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
123 | A88 =LEN(B88)
124 | A89 =LEN(B89)
125 | A90 =LEN(B90)
126 | A91 =LEN(B91)
127 | A92 =LEN(B92)
128 | A93 =LEN(B93)
129 | A94 =LEN(B94)
130 | A95 =LEN(B95)
131 | A96 =LEN(B96)
132 | A97 =LEN(B97)
133 | A98 =LEN(B98)
134 | A99 =LEN(B99)
135 | A100 =LEN(B100)
136 | A101 =LEN(B101)
137 | A102 =LEN(B102)
138 | A103 =LEN(B103)
139 | A104 =LEN(B104)
140 | A105 =LEN(B105)
141 | A106 =LEN(B106)
142 | N108 =N106/1000000/E106
143 | N109 =C106*D106/E106
144 | E114 =$E$6
145 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
146 | A115 =LEN(B115)
147 | B115 =REPT("x",16)
148 | A116 =LEN(B116)
149 | B116 =REPT("x",16)
150 | A117 =LEN(B117)
151 | B117 =REPT("x",16)
152 | A118 =LEN(B118)
153 | B118 =REPT("x",16)
154 | A119 =LEN(B119)
155 | B119 =REPT("x",16)
156 | A120 =LEN(B120)
157 | B120 =REPT("x",16)
158 | A121 =LEN(B121)
159 | B121 =REPT("x",16)
160 | A122 =LEN(B122)
161 | B122 =REPT("x",16)
162 | A123 =LEN(B123)
163 | B123 =REPT("x",16)
164 | A124 =LEN(B124)
165 | B124 =REPT("x",16)
166 | A125 =LEN(B125)
167 | B125 =REPT("x",16)
168 | A126 =LEN(B126)
169 | B126 =REPT("x",16)
170 | A127 =LEN(B127)
171 | B127 =REPT("x",16)
172 | A128 =LEN(B128)
173 | B128 =REPT("x",16)
174 | E141 =$E$6
175 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
176 | A142:A156 =LEN(B142:B156)
177 | N158 =N156/1000000/E156
178 | N159 =C156*D156/E156
179 | E168 =$E$6
180 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
181 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (2).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | J6:N6 ="NCalls"&CHAR(10)&E6:I6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A19 =LEN(B19)
15 | A20 =LEN(B20)
16 | A21 =LEN(B21)
17 | A22 =LEN(B22)
18 | A23 =LEN(B23)
19 | A24 =LEN(B24)
20 | A25 =LEN(B25)
21 | A26 =LEN(B26)
22 | A27 =LEN(B27)
23 | A28 =LEN(B28)
24 | P30 =P28/1000000/E28
25 | P31 =C28*D28/E28
26 | J33:N33 ="NCalls"&CHAR(10)&E33:I33
27 | A34 =LEN(B34)
28 | B34 =REPT("x",32)
29 | A35 =LEN(B35)
30 | B35 =REPT("x",32)
31 | A36 =LEN(B36)
32 | B36 =REPT("x",32)
33 | A37 =LEN(B37)
34 | B37 =REPT("x",32)
35 | A38 =LEN(B38)
36 | B38 =REPT("x",32)
37 | A39 =LEN(B39)
38 | B39 =REPT("x",32)
39 | A40 =LEN(B40)
40 | B40 =REPT("x",32)
41 | A41 =LEN(B41)
42 | B41 =REPT("x",32)
43 | A42 =LEN(B42)
44 | B42 =REPT("x",32)
45 | A43 =LEN(B43)
46 | B43 =REPT("x",32)
47 | A44 =LEN(B44)
48 | B44 =REPT("x",32)
49 | A45 =LEN(B45)
50 | B45 =REPT("x",32)
51 | A46 =LEN(B46)
52 | B46 =REPT("x",32)
53 | A47 =LEN(B47)
54 | B47 =REPT("x",32)
55 | A48 =LEN(B48)
56 | B48 =REPT("x",32)
57 | A49 =LEN(B49)
58 | B49 =REPT("x",32)
59 | A50 =LEN(B50)
60 | B50 =REPT("x",32)
61 | A51 =LEN(B51)
62 | B51 =REPT("x",32)
63 | A52 =LEN(B52)
64 | B52 =REPT("x",32)
65 | A53 =LEN(B53)
66 | B53 =REPT("x",32)
67 | A54 =LEN(B54)
68 | B54 =REPT("x",32)
69 | P56 =P54/1000000/E54
70 | P57 =C54*D54/E54
71 | J60:N60 ="NCalls"&CHAR(10)&E60:I60
72 | A61 =LEN(B61)
73 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
74 | A62 =LEN(B62)
75 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
76 | A63 =LEN(B63)
77 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
78 | A64 =LEN(B64)
79 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
80 | A65 =LEN(B65)
81 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
82 | A66 =LEN(B66)
83 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
84 | A67 =LEN(B67)
85 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
86 | A68 =LEN(B68)
87 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
88 | A69 =LEN(B69)
89 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
90 | A70 =LEN(B70)
91 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
92 | A71 =LEN(B71)
93 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
94 | A72 =LEN(B72)
95 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
96 | A73 =LEN(B73)
97 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
98 | A74 =LEN(B74)
99 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
100 | A75 =LEN(B75)
101 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
102 | A76 =LEN(B76)
103 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
104 | A77 =LEN(B77)
105 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
106 | A78 =LEN(B78)
107 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
108 | A79 =LEN(B79)
109 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
110 | A80 =LEN(B80)
111 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
112 | A81 =LEN(B81)
113 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
114 | P83 =P81/1000000/E81
115 | G84 =G81/E81
116 | P84 =C81*D81/E81
117 | G85 =E81/H81
118 | J87:N87 ="NCalls"&CHAR(10)&E87:I87
119 | A88 =LEN(B88)
120 | A89 =LEN(B89)
121 | A90 =LEN(B90)
122 | A91 =LEN(B91)
123 | A92 =LEN(B92)
124 | A93 =LEN(B93)
125 | A94 =LEN(B94)
126 | A95 =LEN(B95)
127 | A96 =LEN(B96)
128 | A97 =LEN(B97)
129 | A98 =LEN(B98)
130 | A99 =LEN(B99)
131 | A100 =LEN(B100)
132 | A101 =LEN(B101)
133 | A102 =LEN(B102)
134 | A103 =LEN(B103)
135 | A104 =LEN(B104)
136 | A105 =LEN(B105)
137 | A106 =LEN(B106)
138 | P108 =P106/1000000/E106
139 | P109 =C106*D106/E106
140 | J114:N114 ="NCalls"&CHAR(10)&E114:I114
141 | A115 =LEN(B115)
142 | B115 =REPT("x",16)
143 | A116 =LEN(B116)
144 | B116 =REPT("x",16)
145 | A117 =LEN(B117)
146 | B117 =REPT("x",16)
147 | A118 =LEN(B118)
148 | B118 =REPT("x",16)
149 | A119 =LEN(B119)
150 | B119 =REPT("x",16)
151 | A120 =LEN(B120)
152 | B120 =REPT("x",16)
153 | A121 =LEN(B121)
154 | B121 =REPT("x",16)
155 | A122 =LEN(B122)
156 | B122 =REPT("x",16)
157 | A123 =LEN(B123)
158 | B123 =REPT("x",16)
159 | A124 =LEN(B124)
160 | B124 =REPT("x",16)
161 | A125 =LEN(B125)
162 | B125 =REPT("x",16)
163 | A126 =LEN(B126)
164 | B126 =REPT("x",16)
165 | A127 =LEN(B127)
166 | B127 =REPT("x",16)
167 | A128 =LEN(B128)
168 | B128 =REPT("x",16)
169 | J141:N141 ="NCalls"&CHAR(10)&E141:I141
170 | A142:A156 =LEN(B142:B156)
171 | P158 =P156/1000000/E156
172 | P159 =C156*D156/E156
173 | J168:N168 ="NCalls"&CHAR(10)&E168:I168
174 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (3).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
28 | A34 =LEN(B34)
29 | B34 =REPT("x",32)
30 | A35 =LEN(B35)
31 | B35 =REPT("x",32)
32 | A36 =LEN(B36)
33 | B36 =REPT("x",32)
34 | A37 =LEN(B37)
35 | B37 =REPT("x",32)
36 | A38 =LEN(B38)
37 | B38 =REPT("x",32)
38 | A39 =LEN(B39)
39 | B39 =REPT("x",32)
40 | A40 =LEN(B40)
41 | B40 =REPT("x",32)
42 | A41 =LEN(B41)
43 | B41 =REPT("x",32)
44 | A42 =LEN(B42)
45 | B42 =REPT("x",32)
46 | A43 =LEN(B43)
47 | B43 =REPT("x",32)
48 | A44 =LEN(B44)
49 | B44 =REPT("x",32)
50 | A45 =LEN(B45)
51 | B45 =REPT("x",32)
52 | A46 =LEN(B46)
53 | B46 =REPT("x",32)
54 | A47 =LEN(B47)
55 | B47 =REPT("x",32)
56 | A48 =LEN(B48)
57 | B48 =REPT("x",32)
58 | A49 =LEN(B49)
59 | B49 =REPT("x",32)
60 | A50 =LEN(B50)
61 | B50 =REPT("x",32)
62 | A51 =LEN(B51)
63 | B51 =REPT("x",32)
64 | A52 =LEN(B52)
65 | B52 =REPT("x",32)
66 | A53 =LEN(B53)
67 | B53 =REPT("x",32)
68 | A54 =LEN(B54)
69 | B54 =REPT("x",32)
70 | N56 =N54/1000000/E54
71 | N57 =C54*D54/E54
72 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
73 | A61 =LEN(B61)
74 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
75 | A62 =LEN(B62)
76 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A63 =LEN(B63)
78 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A64 =LEN(B64)
80 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A65 =LEN(B65)
82 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A66 =LEN(B66)
84 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A67 =LEN(B67)
86 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A68 =LEN(B68)
88 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A69 =LEN(B69)
90 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A70 =LEN(B70)
92 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A71 =LEN(B71)
94 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A72 =LEN(B72)
96 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A73 =LEN(B73)
98 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A74 =LEN(B74)
100 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A75 =LEN(B75)
102 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A76 =LEN(B76)
104 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A77 =LEN(B77)
106 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A78 =LEN(B78)
108 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A79 =LEN(B79)
110 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A80 =LEN(B80)
112 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A81 =LEN(B81)
114 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | N83 =N81/1000000/E81
116 | G84 =G81/E81
117 | N84 =C81*D81/E81
118 | G85 =E81/H81
119 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
120 | A88 =LEN(B88)
121 | A89 =LEN(B89)
122 | A90 =LEN(B90)
123 | A91 =LEN(B91)
124 | A92 =LEN(B92)
125 | A93 =LEN(B93)
126 | A94 =LEN(B94)
127 | A95 =LEN(B95)
128 | A96 =LEN(B96)
129 | A97 =LEN(B97)
130 | A98 =LEN(B98)
131 | A99 =LEN(B99)
132 | A100 =LEN(B100)
133 | A101 =LEN(B101)
134 | A102 =LEN(B102)
135 | A103 =LEN(B103)
136 | A104 =LEN(B104)
137 | A105 =LEN(B105)
138 | A106 =LEN(B106)
139 | N108 =N106/1000000/E106
140 | N109 =C106*D106/E106
141 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
142 | A115 =LEN(B115)
143 | B115 =REPT("x",16)
144 | A116 =LEN(B116)
145 | B116 =REPT("x",16)
146 | A117 =LEN(B117)
147 | B117 =REPT("x",16)
148 | A118 =LEN(B118)
149 | B118 =REPT("x",16)
150 | A119 =LEN(B119)
151 | B119 =REPT("x",16)
152 | A120 =LEN(B120)
153 | B120 =REPT("x",16)
154 | A121 =LEN(B121)
155 | B121 =REPT("x",16)
156 | A122 =LEN(B122)
157 | B122 =REPT("x",16)
158 | A123 =LEN(B123)
159 | B123 =REPT("x",16)
160 | A124 =LEN(B124)
161 | B124 =REPT("x",16)
162 | A125 =LEN(B125)
163 | B125 =REPT("x",16)
164 | A126 =LEN(B126)
165 | B126 =REPT("x",16)
166 | A127 =LEN(B127)
167 | B127 =REPT("x",16)
168 | A128 =LEN(B128)
169 | B128 =REPT("x",16)
170 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
171 | A142:A156 =LEN(B142:B156)
172 | N158 =N156/1000000/E156
173 | N159 =C156*D156/E156
174 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
175 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (4).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | J7:N7 ="NCalls"&CHAR(10)&E7:I7
3 | A8 =LEN(B8)
4 | A9 =LEN(B9)
5 | A10 =LEN(B10)
6 | A11 =LEN(B11)
7 | A12 =LEN(B12)
8 | A13 =LEN(B13)
9 | A14 =LEN(B14)
10 | A15 =LEN(B15)
11 | A16 =LEN(B16)
12 | A17 =LEN(B17)
13 | A18 =LEN(B18)
14 | A19 =LEN(B19)
15 | A20 =LEN(B20)
16 | A21 =LEN(B21)
17 | A22 =LEN(B22)
18 | A23 =LEN(B23)
19 | A24 =LEN(B24)
20 | A25 =LEN(B25)
21 | A26 =LEN(B26)
22 | A27 =LEN(B27)
23 | A28 =LEN(B28)
24 | A29 =LEN(B29)
25 | P31 =P29/1000000/E29
26 | P32 =C29*D29/E29
27 | E34:I34 =ParserNames
28 | J34:N34 ="NCalls"&CHAR(10)&ParserNames
29 | A35 =LEN(B35)
30 | B35 =REPT("x",32)
31 | A36 =LEN(B36)
32 | B36 =REPT("x",32)
33 | A37 =LEN(B37)
34 | B37 =REPT("x",32)
35 | A38 =LEN(B38)
36 | B38 =REPT("x",32)
37 | A39 =LEN(B39)
38 | B39 =REPT("x",32)
39 | A40 =LEN(B40)
40 | B40 =REPT("x",32)
41 | A41 =LEN(B41)
42 | B41 =REPT("x",32)
43 | A42 =LEN(B42)
44 | B42 =REPT("x",32)
45 | A43 =LEN(B43)
46 | B43 =REPT("x",32)
47 | A44 =LEN(B44)
48 | B44 =REPT("x",32)
49 | A45 =LEN(B45)
50 | B45 =REPT("x",32)
51 | A46 =LEN(B46)
52 | B46 =REPT("x",32)
53 | A47 =LEN(B47)
54 | B47 =REPT("x",32)
55 | A48 =LEN(B48)
56 | B48 =REPT("x",32)
57 | A49 =LEN(B49)
58 | B49 =REPT("x",32)
59 | A50 =LEN(B50)
60 | B50 =REPT("x",32)
61 | A51 =LEN(B51)
62 | B51 =REPT("x",32)
63 | A52 =LEN(B52)
64 | B52 =REPT("x",32)
65 | A53 =LEN(B53)
66 | B53 =REPT("x",32)
67 | A54 =LEN(B54)
68 | B54 =REPT("x",32)
69 | A55 =LEN(B55)
70 | B55 =REPT("x",32)
71 | P57 =P55/1000000/E55
72 | P58 =C55*D55/E55
73 | E61:I61 =ParserNames
74 | J61:N61 ="NCalls"&CHAR(10)&ParserNames
75 | A62 =LEN(B62)
76 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A63 =LEN(B63)
78 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A64 =LEN(B64)
80 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A65 =LEN(B65)
82 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A66 =LEN(B66)
84 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A67 =LEN(B67)
86 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A68 =LEN(B68)
88 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A69 =LEN(B69)
90 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A70 =LEN(B70)
92 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A71 =LEN(B71)
94 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A72 =LEN(B72)
96 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A73 =LEN(B73)
98 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A74 =LEN(B74)
100 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A75 =LEN(B75)
102 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A76 =LEN(B76)
104 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A77 =LEN(B77)
106 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A78 =LEN(B78)
108 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A79 =LEN(B79)
110 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A80 =LEN(B80)
112 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A81 =LEN(B81)
114 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | A82 =LEN(B82)
116 | B82 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
117 | P84 =P82/1000000/E82
118 | G85 =G82/E82
119 | P85 =C82*D82/E82
120 | G86 =E82/I82
121 | E88:I88 =ParserNames
122 | J88:N88 ="NCalls"&CHAR(10)&ParserNames
123 | A89 =LEN(B89)
124 | A90 =LEN(B90)
125 | A91 =LEN(B91)
126 | A92 =LEN(B92)
127 | A93 =LEN(B93)
128 | A94 =LEN(B94)
129 | A95 =LEN(B95)
130 | A96 =LEN(B96)
131 | A97 =LEN(B97)
132 | A98 =LEN(B98)
133 | A99 =LEN(B99)
134 | A100 =LEN(B100)
135 | A101 =LEN(B101)
136 | A102 =LEN(B102)
137 | A103 =LEN(B103)
138 | A104 =LEN(B104)
139 | A105 =LEN(B105)
140 | A106 =LEN(B106)
141 | A107 =LEN(B107)
142 | P109 =P107/1000000/E107
143 | P110 =C107*D107/E107
144 | E115:I115 =ParserNames
145 | J115:N115 ="NCalls"&CHAR(10)&ParserNames
146 | A116 =LEN(B116)
147 | B116 =REPT("x",16)
148 | A117 =LEN(B117)
149 | B117 =REPT("x",16)
150 | A118 =LEN(B118)
151 | B118 =REPT("x",16)
152 | A119 =LEN(B119)
153 | B119 =REPT("x",16)
154 | A120 =LEN(B120)
155 | B120 =REPT("x",16)
156 | A121 =LEN(B121)
157 | B121 =REPT("x",16)
158 | A122 =LEN(B122)
159 | B122 =REPT("x",16)
160 | A123 =LEN(B123)
161 | B123 =REPT("x",16)
162 | A124 =LEN(B124)
163 | B124 =REPT("x",16)
164 | A125 =LEN(B125)
165 | B125 =REPT("x",16)
166 | A126 =LEN(B126)
167 | B126 =REPT("x",16)
168 | A127 =LEN(B127)
169 | B127 =REPT("x",16)
170 | A128 =LEN(B128)
171 | B128 =REPT("x",16)
172 | A129 =LEN(B129)
173 | B129 =REPT("x",16)
174 | E142:I142 =ParserNames
175 | J142:N142 ="NCalls"&CHAR(10)&ParserNames
176 | A143:A157 =LEN(B143:B157)
177 | P159 =P157/1000000/E157
178 | P160 =C157*D157/E157
179 | E169:I169 =ParserNames
180 | J169:N169 ="NCalls"&CHAR(10)&ParserNames
181 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (6).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | H7:J7 ="NCalls"&CHAR(10)&E7:G7
3 | A8 =LEN(B8)
4 | A9 =LEN(B9)
5 | D9 =D8*2
6 | A10 =LEN(B10)
7 | D10 =D9*2
8 | A11 =LEN(B11)
9 | D11 =D10*2
10 | A12 =LEN(B12)
11 | D12 =D11*2
12 | A13 =LEN(B13)
13 | D13 =D12*2
14 | A14 =LEN(B14)
15 | C14 =C13*2
16 | D14 =D13*2
17 | A15 =LEN(B15)
18 | C15 =C14*2
19 | D15 =D14*2
20 | A16 =LEN(B16)
21 | C16 =C15*2
22 | D16 =D15*2
23 | A17 =LEN(B17)
24 | C17 =C16*2
25 | D17 =D16*2
26 | A18 =LEN(B18)
27 | C18 =C17*2
28 | D18 =D17*2
29 | A19 =LEN(B19)
30 | C19 =C18*2
31 | D19 =D18*2
32 | A20 =LEN(B20)
33 | C20 =C19*2
34 | D20 =D19*2
35 | A21 =LEN(B21)
36 | C21 =C20*2
37 | D21 =D20*2
38 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (7).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
28 | A34 =LEN(B34)
29 | B34 =REPT("x",32)
30 | A35 =LEN(B35)
31 | B35 =REPT("x",32)
32 | A36 =LEN(B36)
33 | B36 =REPT("x",32)
34 | A37 =LEN(B37)
35 | B37 =REPT("x",32)
36 | A38 =LEN(B38)
37 | B38 =REPT("x",32)
38 | A39 =LEN(B39)
39 | B39 =REPT("x",32)
40 | A40 =LEN(B40)
41 | B40 =REPT("x",32)
42 | A41 =LEN(B41)
43 | B41 =REPT("x",32)
44 | A42 =LEN(B42)
45 | B42 =REPT("x",32)
46 | A43 =LEN(B43)
47 | B43 =REPT("x",32)
48 | A44 =LEN(B44)
49 | B44 =REPT("x",32)
50 | A45 =LEN(B45)
51 | B45 =REPT("x",32)
52 | A46 =LEN(B46)
53 | B46 =REPT("x",32)
54 | A47 =LEN(B47)
55 | B47 =REPT("x",32)
56 | A48 =LEN(B48)
57 | B48 =REPT("x",32)
58 | A49 =LEN(B49)
59 | B49 =REPT("x",32)
60 | A50 =LEN(B50)
61 | B50 =REPT("x",32)
62 | A51 =LEN(B51)
63 | B51 =REPT("x",32)
64 | A52 =LEN(B52)
65 | B52 =REPT("x",32)
66 | A53 =LEN(B53)
67 | B53 =REPT("x",32)
68 | A54 =LEN(B54)
69 | B54 =REPT("x",32)
70 | N56 =N54/1000000/E54
71 | N57 =C54*D54/E54
72 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
73 | A61 =LEN(B61)
74 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
75 | A62 =LEN(B62)
76 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A63 =LEN(B63)
78 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A64 =LEN(B64)
80 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A65 =LEN(B65)
82 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A66 =LEN(B66)
84 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A67 =LEN(B67)
86 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A68 =LEN(B68)
88 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A69 =LEN(B69)
90 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A70 =LEN(B70)
92 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A71 =LEN(B71)
94 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A72 =LEN(B72)
96 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A73 =LEN(B73)
98 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A74 =LEN(B74)
100 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A75 =LEN(B75)
102 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A76 =LEN(B76)
104 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A77 =LEN(B77)
106 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A78 =LEN(B78)
108 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A79 =LEN(B79)
110 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A80 =LEN(B80)
112 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A81 =LEN(B81)
114 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | N83 =N81/1000000/E81
116 | G84 =G81/E81
117 | N84 =C81*D81/E81
118 | G85 =E81/H81
119 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
120 | A88 =LEN(B88)
121 | A89 =LEN(B89)
122 | A90 =LEN(B90)
123 | A91 =LEN(B91)
124 | A92 =LEN(B92)
125 | A93 =LEN(B93)
126 | A94 =LEN(B94)
127 | A95 =LEN(B95)
128 | A96 =LEN(B96)
129 | A97 =LEN(B97)
130 | A98 =LEN(B98)
131 | A99 =LEN(B99)
132 | A100 =LEN(B100)
133 | A101 =LEN(B101)
134 | A102 =LEN(B102)
135 | A103 =LEN(B103)
136 | A104 =LEN(B104)
137 | A105 =LEN(B105)
138 | A106 =LEN(B106)
139 | N108 =N106/1000000/E106
140 | N109 =C106*D106/E106
141 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
142 | A115 =LEN(B115)
143 | B115 =REPT("x",16)
144 | A116 =LEN(B116)
145 | B116 =REPT("x",16)
146 | A117 =LEN(B117)
147 | B117 =REPT("x",16)
148 | A118 =LEN(B118)
149 | B118 =REPT("x",16)
150 | A119 =LEN(B119)
151 | B119 =REPT("x",16)
152 | A120 =LEN(B120)
153 | B120 =REPT("x",16)
154 | A121 =LEN(B121)
155 | B121 =REPT("x",16)
156 | A122 =LEN(B122)
157 | B122 =REPT("x",16)
158 | A123 =LEN(B123)
159 | B123 =REPT("x",16)
160 | A124 =LEN(B124)
161 | B124 =REPT("x",16)
162 | A125 =LEN(B125)
163 | B125 =REPT("x",16)
164 | A126 =LEN(B126)
165 | B126 =REPT("x",16)
166 | A127 =LEN(B127)
167 | B127 =REPT("x",16)
168 | A128 =LEN(B128)
169 | B128 =REPT("x",16)
170 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
171 | A142:A156 =LEN(B142:B156)
172 | N158 =N156/1000000/E156
173 | N159 =C156*D156/E156
174 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
175 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (8).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | E33 =$E$6
28 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
29 | A34 =LEN(B34)
30 | B34 =REPT("x",32)
31 | A35 =LEN(B35)
32 | B35 =REPT("x",32)
33 | A36 =LEN(B36)
34 | B36 =REPT("x",32)
35 | A37 =LEN(B37)
36 | B37 =REPT("x",32)
37 | A38 =LEN(B38)
38 | B38 =REPT("x",32)
39 | A39 =LEN(B39)
40 | B39 =REPT("x",32)
41 | A40 =LEN(B40)
42 | B40 =REPT("x",32)
43 | A41 =LEN(B41)
44 | B41 =REPT("x",32)
45 | A42 =LEN(B42)
46 | B42 =REPT("x",32)
47 | A43 =LEN(B43)
48 | B43 =REPT("x",32)
49 | A44 =LEN(B44)
50 | B44 =REPT("x",32)
51 | A45 =LEN(B45)
52 | B45 =REPT("x",32)
53 | A46 =LEN(B46)
54 | B46 =REPT("x",32)
55 | A47 =LEN(B47)
56 | B47 =REPT("x",32)
57 | A48 =LEN(B48)
58 | B48 =REPT("x",32)
59 | A49 =LEN(B49)
60 | B49 =REPT("x",32)
61 | A50 =LEN(B50)
62 | B50 =REPT("x",32)
63 | A51 =LEN(B51)
64 | B51 =REPT("x",32)
65 | A52 =LEN(B52)
66 | B52 =REPT("x",32)
67 | A53 =LEN(B53)
68 | B53 =REPT("x",32)
69 | A54 =LEN(B54)
70 | B54 =REPT("x",32)
71 | N56 =N54/1000000/E54
72 | N57 =C54*D54/E54
73 | E60 =$E$6
74 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
75 | A61 =LEN(B61)
76 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A62 =LEN(B62)
78 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A63 =LEN(B63)
80 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A64 =LEN(B64)
82 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A65 =LEN(B65)
84 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A66 =LEN(B66)
86 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A67 =LEN(B67)
88 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A68 =LEN(B68)
90 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A69 =LEN(B69)
92 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A70 =LEN(B70)
94 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A71 =LEN(B71)
96 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A72 =LEN(B72)
98 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A73 =LEN(B73)
100 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A74 =LEN(B74)
102 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A75 =LEN(B75)
104 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A76 =LEN(B76)
106 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A77 =LEN(B77)
108 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A78 =LEN(B78)
110 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A79 =LEN(B79)
112 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A80 =LEN(B80)
114 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | A81 =LEN(B81)
116 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
117 | N83 =N81/1000000/E81
118 | G84 =G81/E81
119 | N84 =C81*D81/E81
120 | G85 =E81/H81
121 | E87 =$E$6
122 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
123 | A88 =LEN(B88)
124 | A89 =LEN(B89)
125 | A90 =LEN(B90)
126 | A91 =LEN(B91)
127 | A92 =LEN(B92)
128 | A93 =LEN(B93)
129 | A94 =LEN(B94)
130 | A95 =LEN(B95)
131 | A96 =LEN(B96)
132 | A97 =LEN(B97)
133 | A98 =LEN(B98)
134 | A99 =LEN(B99)
135 | A100 =LEN(B100)
136 | A101 =LEN(B101)
137 | A102 =LEN(B102)
138 | A103 =LEN(B103)
139 | A104 =LEN(B104)
140 | A105 =LEN(B105)
141 | A106 =LEN(B106)
142 | N108 =N106/1000000/E106
143 | N109 =C106*D106/E106
144 | E114 =$E$6
145 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
146 | A115 =LEN(B115)
147 | B115 =REPT("x",16)
148 | A116 =LEN(B116)
149 | B116 =REPT("x",16)
150 | A117 =LEN(B117)
151 | B117 =REPT("x",16)
152 | A118 =LEN(B118)
153 | B118 =REPT("x",16)
154 | A119 =LEN(B119)
155 | B119 =REPT("x",16)
156 | A120 =LEN(B120)
157 | B120 =REPT("x",16)
158 | A121 =LEN(B121)
159 | B121 =REPT("x",16)
160 | A122 =LEN(B122)
161 | B122 =REPT("x",16)
162 | A123 =LEN(B123)
163 | B123 =REPT("x",16)
164 | A124 =LEN(B124)
165 | B124 =REPT("x",16)
166 | A125 =LEN(B125)
167 | B125 =REPT("x",16)
168 | A126 =LEN(B126)
169 | B126 =REPT("x",16)
170 | A127 =LEN(B127)
171 | B127 =REPT("x",16)
172 | A128 =LEN(B128)
173 | B128 =REPT("x",16)
174 | E141 =$E$6
175 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
176 | A142:A156 =LEN(B142:B156)
177 | N158 =N156/1000000/E156
178 | N159 =C156*D156/E156
179 | E168 =$E$6
180 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
181 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance (9).txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | E33 =$E$6
28 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
29 | A34 =LEN(B34)
30 | B34 =REPT("x",32)
31 | A35 =LEN(B35)
32 | B35 =REPT("x",32)
33 | A36 =LEN(B36)
34 | B36 =REPT("x",32)
35 | A37 =LEN(B37)
36 | B37 =REPT("x",32)
37 | A38 =LEN(B38)
38 | B38 =REPT("x",32)
39 | A39 =LEN(B39)
40 | B39 =REPT("x",32)
41 | A40 =LEN(B40)
42 | B40 =REPT("x",32)
43 | A41 =LEN(B41)
44 | B41 =REPT("x",32)
45 | A42 =LEN(B42)
46 | B42 =REPT("x",32)
47 | A43 =LEN(B43)
48 | B43 =REPT("x",32)
49 | A44 =LEN(B44)
50 | B44 =REPT("x",32)
51 | A45 =LEN(B45)
52 | B45 =REPT("x",32)
53 | A46 =LEN(B46)
54 | B46 =REPT("x",32)
55 | A47 =LEN(B47)
56 | B47 =REPT("x",32)
57 | A48 =LEN(B48)
58 | B48 =REPT("x",32)
59 | A49 =LEN(B49)
60 | B49 =REPT("x",32)
61 | A50 =LEN(B50)
62 | B50 =REPT("x",32)
63 | A51 =LEN(B51)
64 | B51 =REPT("x",32)
65 | A52 =LEN(B52)
66 | B52 =REPT("x",32)
67 | A53 =LEN(B53)
68 | B53 =REPT("x",32)
69 | A54 =LEN(B54)
70 | B54 =REPT("x",32)
71 | N56 =N54/1000000/E54
72 | N57 =C54*D54/E54
73 | E60 =$E$6
74 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
75 | A61 =LEN(B61)
76 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A62 =LEN(B62)
78 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A63 =LEN(B63)
80 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A64 =LEN(B64)
82 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A65 =LEN(B65)
84 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A66 =LEN(B66)
86 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A67 =LEN(B67)
88 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A68 =LEN(B68)
90 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A69 =LEN(B69)
92 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A70 =LEN(B70)
94 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A71 =LEN(B71)
96 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A72 =LEN(B72)
98 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A73 =LEN(B73)
100 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A74 =LEN(B74)
102 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A75 =LEN(B75)
104 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A76 =LEN(B76)
106 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A77 =LEN(B77)
108 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A78 =LEN(B78)
110 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A79 =LEN(B79)
112 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A80 =LEN(B80)
114 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | A81 =LEN(B81)
116 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
117 | N83 =N81/1000000/E81
118 | G84 =G81/E81
119 | N84 =C81*D81/E81
120 | G85 =E81/H81
121 | E87 =$E$6
122 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
123 | A88 =LEN(B88)
124 | A89 =LEN(B89)
125 | A90 =LEN(B90)
126 | A91 =LEN(B91)
127 | A92 =LEN(B92)
128 | A93 =LEN(B93)
129 | A94 =LEN(B94)
130 | A95 =LEN(B95)
131 | A96 =LEN(B96)
132 | A97 =LEN(B97)
133 | A98 =LEN(B98)
134 | A99 =LEN(B99)
135 | A100 =LEN(B100)
136 | A101 =LEN(B101)
137 | A102 =LEN(B102)
138 | A103 =LEN(B103)
139 | A104 =LEN(B104)
140 | A105 =LEN(B105)
141 | A106 =LEN(B106)
142 | N108 =N106/1000000/E106
143 | N109 =C106*D106/E106
144 | E114 =$E$6
145 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
146 | A115 =LEN(B115)
147 | B115 =REPT("x",16)
148 | A116 =LEN(B116)
149 | B116 =REPT("x",16)
150 | A117 =LEN(B117)
151 | B117 =REPT("x",16)
152 | A118 =LEN(B118)
153 | B118 =REPT("x",16)
154 | A119 =LEN(B119)
155 | B119 =REPT("x",16)
156 | A120 =LEN(B120)
157 | B120 =REPT("x",16)
158 | A121 =LEN(B121)
159 | B121 =REPT("x",16)
160 | A122 =LEN(B122)
161 | B122 =REPT("x",16)
162 | A123 =LEN(B123)
163 | B123 =REPT("x",16)
164 | A124 =LEN(B124)
165 | B124 =REPT("x",16)
166 | A125 =LEN(B125)
167 | B125 =REPT("x",16)
168 | A126 =LEN(B126)
169 | B126 =REPT("x",16)
170 | A127 =LEN(B127)
171 | B127 =REPT("x",16)
172 | A128 =LEN(B128)
173 | B128 =REPT("x",16)
174 | E141 =$E$6
175 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
176 | A142:A156 =LEN(B142:B156)
177 | N158 =N156/1000000/E156
178 | N159 =C156*D156/E156
179 | E168 =$E$6
180 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
181 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/Performance.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | I6:L6 ="NCalls"&CHAR(10)&E6:H6
3 | A7 =LEN(B7)
4 | A8 =LEN(B8)
5 | A9 =LEN(B9)
6 | A10 =LEN(B10)
7 | A11 =LEN(B11)
8 | A12 =LEN(B12)
9 | A13 =LEN(B13)
10 | A14 =LEN(B14)
11 | A15 =LEN(B15)
12 | A16 =LEN(B16)
13 | A17 =LEN(B17)
14 | A18 =LEN(B18)
15 | A19 =LEN(B19)
16 | A20 =LEN(B20)
17 | A21 =LEN(B21)
18 | A22 =LEN(B22)
19 | A23 =LEN(B23)
20 | A24 =LEN(B24)
21 | A25 =LEN(B25)
22 | A26 =LEN(B26)
23 | A27 =LEN(B27)
24 | A28 =LEN(B28)
25 | N30 =N28/1000000/E28
26 | N31 =C28*D28/E28
27 | I33:L33 ="NCalls"&CHAR(10)&E33:H33
28 | A34 =LEN(B34)
29 | B34 =REPT("x",32)
30 | A35 =LEN(B35)
31 | B35 =REPT("x",32)
32 | A36 =LEN(B36)
33 | B36 =REPT("x",32)
34 | A37 =LEN(B37)
35 | B37 =REPT("x",32)
36 | A38 =LEN(B38)
37 | B38 =REPT("x",32)
38 | A39 =LEN(B39)
39 | B39 =REPT("x",32)
40 | A40 =LEN(B40)
41 | B40 =REPT("x",32)
42 | A41 =LEN(B41)
43 | B41 =REPT("x",32)
44 | A42 =LEN(B42)
45 | B42 =REPT("x",32)
46 | A43 =LEN(B43)
47 | B43 =REPT("x",32)
48 | A44 =LEN(B44)
49 | B44 =REPT("x",32)
50 | A45 =LEN(B45)
51 | B45 =REPT("x",32)
52 | A46 =LEN(B46)
53 | B46 =REPT("x",32)
54 | A47 =LEN(B47)
55 | B47 =REPT("x",32)
56 | A48 =LEN(B48)
57 | B48 =REPT("x",32)
58 | A49 =LEN(B49)
59 | B49 =REPT("x",32)
60 | A50 =LEN(B50)
61 | B50 =REPT("x",32)
62 | A51 =LEN(B51)
63 | B51 =REPT("x",32)
64 | A52 =LEN(B52)
65 | B52 =REPT("x",32)
66 | A53 =LEN(B53)
67 | B53 =REPT("x",32)
68 | A54 =LEN(B54)
69 | B54 =REPT("x",32)
70 | N56 =N54/1000000/E54
71 | N57 =C54*D54/E54
72 | I60:L60 ="NCalls"&CHAR(10)&E60:H60
73 | A61 =LEN(B61)
74 | B61 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
75 | A62 =LEN(B62)
76 | B62 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
77 | A63 =LEN(B63)
78 | B63 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
79 | A64 =LEN(B64)
80 | B64 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
81 | A65 =LEN(B65)
82 | B65 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
83 | A66 =LEN(B66)
84 | B66 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
85 | A67 =LEN(B67)
86 | B67 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
87 | A68 =LEN(B68)
88 | B68 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
89 | A69 =LEN(B69)
90 | B69 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
91 | A70 =LEN(B70)
92 | B70 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
93 | A71 =LEN(B71)
94 | B71 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
95 | A72 =LEN(B72)
96 | B72 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
97 | A73 =LEN(B73)
98 | B73 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
99 | A74 =LEN(B74)
100 | B74 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
101 | A75 =LEN(B75)
102 | B75 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
103 | A76 =LEN(B76)
104 | B76 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
105 | A77 =LEN(B77)
106 | B77 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
107 | A78 =LEN(B78)
108 | B78 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
109 | A79 =LEN(B79)
110 | B79 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
111 | A80 =LEN(B80)
112 | B80 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
113 | A81 =LEN(B81)
114 | B81 ="""xxxxxxxx"&CHAR(13)&CHAR(10)&"yyyyyyyy"""
115 | N83 =N81/1000000/E81
116 | G84 =G81/E81
117 | N84 =C81*D81/E81
118 | G85 =E81/H81
119 | I87:L87 ="NCalls"&CHAR(10)&E87:H87
120 | A88 =LEN(B88)
121 | A89 =LEN(B89)
122 | A90 =LEN(B90)
123 | A91 =LEN(B91)
124 | A92 =LEN(B92)
125 | A93 =LEN(B93)
126 | A94 =LEN(B94)
127 | A95 =LEN(B95)
128 | A96 =LEN(B96)
129 | A97 =LEN(B97)
130 | A98 =LEN(B98)
131 | A99 =LEN(B99)
132 | A100 =LEN(B100)
133 | A101 =LEN(B101)
134 | A102 =LEN(B102)
135 | A103 =LEN(B103)
136 | A104 =LEN(B104)
137 | A105 =LEN(B105)
138 | A106 =LEN(B106)
139 | N108 =N106/1000000/E106
140 | N109 =C106*D106/E106
141 | I114:L114 ="NCalls"&CHAR(10)&E114:H114
142 | A115 =LEN(B115)
143 | B115 =REPT("x",16)
144 | A116 =LEN(B116)
145 | B116 =REPT("x",16)
146 | A117 =LEN(B117)
147 | B117 =REPT("x",16)
148 | A118 =LEN(B118)
149 | B118 =REPT("x",16)
150 | A119 =LEN(B119)
151 | B119 =REPT("x",16)
152 | A120 =LEN(B120)
153 | B120 =REPT("x",16)
154 | A121 =LEN(B121)
155 | B121 =REPT("x",16)
156 | A122 =LEN(B122)
157 | B122 =REPT("x",16)
158 | A123 =LEN(B123)
159 | B123 =REPT("x",16)
160 | A124 =LEN(B124)
161 | B124 =REPT("x",16)
162 | A125 =LEN(B125)
163 | B125 =REPT("x",16)
164 | A126 =LEN(B126)
165 | B126 =REPT("x",16)
166 | A127 =LEN(B127)
167 | B127 =REPT("x",16)
168 | A128 =LEN(B128)
169 | B128 =REPT("x",16)
170 | I141:L141 ="NCalls"&CHAR(10)&E141:H141
171 | A142:A156 =LEN(B142:B156)
172 | N158 =N156/1000000/E156
173 | N159 =C156*D156/E156
174 | I168:L168 ="NCalls"&CHAR(10)&E168:H168
175 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Formulas/RegExp.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | L6 =L4&"("&L5&")?"
3 | L8 =L6&"("&L7&")?"
4 | L9 =L6&L7
5 | L11 =L2&L3&L10
6 | B12 =TestFolder()&"\test_good_ISO8601.csv"
7 | L12 =L2&L3&"("&L6&")?"&L10
8 | L13 =L2&L3&"("&L9&")?"&L10
9 | B14 =TestFolder()&"\test_bad_ISO8601.csv"
10 | L14 =L2&L3&"("&L8&")?"&L10
11 | C16:F16 =TRANSPOSE(K11:K14)
12 | I16:L16 =TRANSPOSE(K11:K14)
13 | B17:B153 =CSVRead(B12,FALSE,,,,,,,2,,,1)
14 | C17:C153 =IsRegMatch(rxNoNo,$B$17#)
15 | D17:D153 =IsRegMatch(rxYesNo,$B$17#)
16 | E17:E153 =IsRegMatch(rxNoYes,$B$17#)
17 | F17:F153 =IsRegMatch(rxYesYes,$B$17#)
18 | H17:H171 =CSVRead(B14,FALSE,,,,,,,2,2,,1)
19 | I17:I171 =IsRegMatch(rxNoNo,$H$17#)
20 | J17:J171 =IsRegMatch(rxYesNo,$H$17#)
21 | K17:K171 =IsRegMatch(rxNoYes,$H$17#)
22 | L17:L171 =IsRegMatch(rxYesYes,$H$17#)
23 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA-CSV.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA-CSV.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/CSVinterface.cls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA/CSVinterface.cls
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/ECPArrayList.cls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA/ECPArrayList.cls
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/ECPTextStream.cls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA/ECPTextStream.cls
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/ThisWorkbook.cls:
--------------------------------------------------------------------------------
1 | VERSION 1.0 CLASS
2 | BEGIN
3 | MultiUse = -1 'True
4 | END
5 | Attribute VB_Name = "ThisWorkbook"
6 | Attribute VB_GlobalNameSpace = False
7 | Attribute VB_Creatable = False
8 | Attribute VB_PredeclaredId = True
9 | Attribute VB_Exposed = True
10 | Option Explicit
11 |
12 | Private Sub Workbook_Open()
13 | On Error GoTo ErrHandler
14 | RegisterCSVRead
15 | RegisterCSVWrite
16 |
17 | Exit Sub
18 | ErrHandler:
19 | ReThrow "Workbook_Open", Err
20 | End Sub
21 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/modCSVNotRFC4180.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "modCSVNotRFC4180"
2 | Option Explicit
3 |
4 | 'Convenience function to compare parser's handling of non-RFC4180 compliant input, with those of _
5 | the Java library FastCSV (and other Java libraries). See notation used at https://github.com/osiegmar/JavaCsvComparison
6 |
7 | Function TestNonStandardInput(ByVal InputString As String, IgnoreEmptyLines As Boolean, ParserName As String, ExpectedResult As String)
8 |
9 | Dim i As Long
10 | Dim j As Long
11 | Dim NC As Long
12 | Dim NR As Long
13 | Dim OneDArray() As String
14 | Dim out As String
15 | Dim ParserRes As Variant
16 |
17 | On Error GoTo ErrHandler
18 |
19 | Dim LFSymbol As String: LFSymbol = ChrW(9226)
20 | Dim CRSymbol As String: CRSymbol = ChrW(9229)
21 | Dim NewRowSymbol As String: NewRowSymbol = ChrW(9166)
22 | Dim NewColumnSymbol As String: NewColumnSymbol = ChrW(8631)
23 | Dim EmptyFieldSymbol As String: EmptyFieldSymbol = ChrW(9711)
24 | Dim SpaceSymbol As String: SpaceSymbol = ChrW(9251)
25 | Dim NotSupportedSymbol As String: NotSupportedSymbol = ChrW(10134)
26 | Dim CorrectResultSymbol As String: CorrectResultSymbol = ChrW(9989)
27 | Dim CrashesSymbol As String: CrashesSymbol = WorksheetFunction.Unichar(128165)
28 |
29 | InputString = Replace(InputString, LFSymbol, vbLf)
30 | InputString = Replace(InputString, CRSymbol, vbCr)
31 | InputString = Replace(InputString, SpaceSymbol, " ")
32 |
33 | If ParserName = "CSVRead" Then
34 | ParserRes = CSVRead(InputString, IgnoreEmptyLines:=IgnoreEmptyLines, ShowMissingsAs:=EmptyFieldSymbol, Delimiter:=",")
35 | ElseIf ParserName = "sdkn104" Then
36 | If IgnoreEmptyLines Then
37 | TestNonStandardInput = NotSupportedSymbol
38 | Exit Function
39 | End If
40 |
41 | ParserRes = ParseCSVToArray(InputString, True)
42 | If IsNull(ParserRes) Then
43 | ' Debug.Print Err.Description
44 | TestNonStandardInput = CrashesSymbol
45 | Exit Function
46 | End If
47 |
48 | For i = LBound(ParserRes, 1) To UBound(ParserRes, 1)
49 | For j = LBound(ParserRes, 2) To UBound(ParserRes, 2)
50 | If ParserRes(i, j) = "" Then
51 | ParserRes(i, j) = EmptyFieldSymbol
52 | End If
53 | Next
54 | Next
55 | ElseIf ParserName = "ws_garcia" Then
56 | Dim FSO As New Scripting.FileSystemObject
57 | Dim t As Scripting.TextStream
58 | Set t = FSO.OpenTextFile("c:\Temp\temp.txt", ForWriting, True)
59 | t.Write InputString
60 | t.Close
61 |
62 | ParserRes = Wrap_ws_garcia("c:\temp\temp.txt", ",", vbLf, IgnoreEmptyLines, True)
63 | If NumDimensions(ParserRes) = 0 Then
64 | TestNonStandardInput = CrashesSymbol
65 | Exit Function
66 | End If
67 |
68 | For i = LBound(ParserRes, 1) To UBound(ParserRes, 1)
69 | For j = LBound(ParserRes, 2) To UBound(ParserRes, 2)
70 | If ParserRes(i, j) = "" Then
71 | ParserRes(i, j) = EmptyFieldSymbol
72 | End If
73 | Next
74 | Next
75 |
76 | Else
77 | Throw "ParserName not recognised"
78 | End If
79 |
80 | NR = NRows(ParserRes)
81 | NC = NCols(ParserRes)
82 | ReDim OneDArray(LBound(ParserRes, 1) To UBound(ParserRes, 1))
83 |
84 | For i = LBound(ParserRes, 1) To UBound(ParserRes, 1)
85 | OneDArray(i) = ParserRes(i, LBound(ParserRes, 1))
86 | For j = LBound(ParserRes, 2) + 1 To UBound(ParserRes, 2)
87 | OneDArray(i) = OneDArray(i) & NewColumnSymbol & ParserRes(i, j)
88 | Next j
89 | Next i
90 |
91 | out = VBA.Join(OneDArray, NewRowSymbol)
92 | out = Replace(out, vbLf, LFSymbol)
93 | out = Replace(out, vbCr, CRSymbol)
94 | out = Replace(out, " ", SpaceSymbol)
95 | If out = ExpectedResult Then out = CorrectResultSymbol
96 | TestNonStandardInput = out
97 |
98 | Exit Function
99 | ErrHandler:
100 | TestNonStandardInput = ReThrow("TestNonStandardInput", Err, True)
101 | End Function
102 |
103 | Function SaveNotCompliantFile(ByVal InputString As String, FileName As String)
104 |
105 | On Error GoTo ErrHandler
106 | On Error GoTo ErrHandler
107 |
108 | Dim LFSymbol As String: LFSymbol = ChrW(9226)
109 | Dim CRSymbol As String: CRSymbol = ChrW(9229)
110 | Dim SpaceSymbol As String: SpaceSymbol = ChrW(9251)
111 |
112 | InputString = Replace(InputString, LFSymbol, vbLf)
113 | InputString = Replace(InputString, CRSymbol, vbCr)
114 | InputString = Replace(InputString, SpaceSymbol, " ")
115 |
116 | Dim FSO As New Scripting.FileSystemObject
117 | Dim t As Scripting.TextStream
118 | Set t = FSO.OpenTextFile(FileName, ForWriting, True)
119 | t.Write InputString
120 | t.Close
121 |
122 | SaveNotCompliantFile = FileName
123 |
124 | Exit Function
125 | ErrHandler:
126 | SaveNotCompliantFile = ReThrow("SaveNotCompliantFile", Err, True)
127 | End Function
128 |
129 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/modCSVTest.bas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA/modCSVTest.bas
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/modCSVTestRDatasets.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "modCSVTestRDatasets"
2 | Option Explicit
3 |
4 | ' returns largest 20 files in RDatasets
5 | Function RDatesetsFiles()
6 |
7 | RDatesetsFiles = Array("csv\openintro\military.csv", "csv\mosaicData\Birthdays.csv", _
8 | "csv\stevedata\wvs_justifbribe.csv", "csv\nycflights13\flights.csv", _
9 | "csv\stevedata\wvs_immig.csv", "csv\AER\Fertility.csv", _
10 | "csv\openintro\avandia.csv", "csv\Stat2Data\AthleteGrad.csv", _
11 | "csv\causaldata\mortgages.csv", "csv\openintro\mammogram.csv", _
12 | "csv\lme4\InstEval.csv", "csv\stevedata\gss_abortion.csv", _
13 | "csv\stevedata\TV16.csv", "csv\stevedata\gss_wages.csv", _
14 | "csv\AER\CPSSW8.csv", "csv\stevedata\eq_passengercars.csv", _
15 | "csv\ggplot2movies\movies.csv", "csv\ggplot2\diamonds.csv", _
16 | "csv\causaldata\gov_transfers_density.csv", "csv\openintro\seattlepets.csv")
17 |
18 | End Function
19 |
20 | 'Tested 5 Oct 2021, CSVRead against ArrayFromCSVfile, Nigel Hefferman's code given as an answer at
21 | 'https://stackoverflow.com/questions/12259595/load-csv-file-into-a-vba-array-rather-than-excel-sheet
22 |
23 | 'With RemoveQuotes = True
24 | 'CSVRead 23.285191300005 ArrayFromCSVfile 281.768168099996, True
25 | 'CSVRead 23.8145522999985 ArrayFromCSVfile 325.074338899998 True
26 |
27 | 'With RemoveQuotes = False
28 | 'CSVRead 24.9822067999921 ArrayFromCSVfile 18.9174217000109 False
29 |
30 | Sub TestAgainstLargestFileInRDatasets()
31 |
32 | Const FileName As String = "C:\Projects\RDatasets\csv\openintro\military.csv"
33 | Dim res1
34 | Dim res2
35 | Dim t1 As Double
36 | Dim t2 As Double
37 | Dim t3 As Double
38 | Dim WhatDiffers As String
39 |
40 | t1 = ElapsedTime
41 | res1 = CSVRead(FileName, False)
42 | t2 = ElapsedTime
43 | ' res2 = ArrayFromCSVfile(FileName, , , RemoveQuotes)
44 | t3 = ElapsedTime
45 |
46 | Debug.Print "CSVRead", t2 - t1, "ArrayFromCSVfile", t3 - t2, ArraysIdentical(res1, res2, , True, WhatDiffers)
47 | Debug.Print WhatDiffers
48 |
49 | End Sub
50 |
51 | 'Time for type conversion is trivial (at least for the test file in quesiton)
52 | '====================================================================================================
53 | 'Running TestImpactOfTypeConversion 2023-Mar-02 11:19:34
54 | 'NumTrials = 20
55 | 'FileName = C:\Projects\RDatasets\csv\openintro\military.csv
56 | 'ComputerName = DESKTOP-HSGAM5S
57 | 'VBA-CSV Audit Sheet Version = 240
58 | 'Elapsed time for CSVRead(FileName, False): 9.53321450500225
59 | 'Elapsed time for CSVRead(FileName, True): 9.57358807499986
60 |
61 | Sub TestImpactOfTypeConversion()
62 | Const FileName As String = "C:\Projects\RDatasets\csv\openintro\military.csv"
63 | Dim res1, res2, t1 As Double, t2 As Double, i As Long
64 |
65 | Const NumTrials = 20
66 |
67 | Debug.Print "'" & String(100, "=")
68 | Debug.Print "'Running TestImpactOfTypeConversion " & Format$(Now(), "yyyy-mmm-dd hh:mm:ss")
69 | Debug.Print "'NumTrials = " & CStr(NumTrials)
70 | Debug.Print "'FileName = " & FileName
71 | Debug.Print "'ComputerName = " & Environ("ComputerName")
72 | Debug.Print "'VBA-CSV Audit Sheet Version = " & shAudit.Range("Headers").Cells(2, 1).value
73 |
74 | t1 = ElapsedTime()
75 | For i = 1 To NumTrials
76 | res1 = CSVRead(FileName, False)
77 | Next i
78 | t2 = ElapsedTime()
79 | Debug.Print "'Elapsed time for CSVRead(FileName, False): " & CStr((t2 - t1) / NumTrials)
80 |
81 | t1 = ElapsedTime()
82 | For i = 1 To NumTrials
83 | res1 = CSVRead(FileName, True)
84 | Next i
85 | t2 = ElapsedTime()
86 | Debug.Print "'Elapsed time for CSVRead(FileName, True): " & CStr((t2 - t1) / NumTrials)
87 |
88 | End Sub
89 |
90 |
91 | ' -----------------------------------------------------------------------------------------------------------------------
92 | ' Procedure : TestAgainstRDatasets
93 | ' Purpose : Test against the 20 largest files in Rdatasets https://github.com/vincentarelbundock/Rdatasets
94 | ' To run the code, first clone the above repo to C:\Projects
95 | ' -----------------------------------------------------------------------------------------------------------------------
96 | Sub TestAgainstRDatasets()
97 |
98 | Const DatasetsFolder As String = "C:\Projects\RDatasets\"
99 |
100 | Dim ResultsFile As String
101 |
102 | ResultsFile = Left$(ThisWorkbook.path, InStrRev(ThisWorkbook.path, "\")) & _
103 | "testresults\SpeedTestRDatasets.csv"
104 |
105 | Dim CSVResult As Variant
106 | Dim FileName As String
107 | Dim Files As Variant
108 | Dim i As Long
109 | Dim Result As Variant
110 | Dim sdkn104Result As Variant
111 | Dim t1 As Double
112 | Dim t2 As Double
113 | Dim t3 As Double
114 | Dim t4 As Double
115 | Dim ws_garciaResult As Variant
116 |
117 | On Error GoTo ErrHandler
118 | Files = RDatesetsFiles()
119 |
120 | Result = Fill(vbNullString, UBound(Files) - LBound(Files) + 2, 5)
121 | Result(1, 1) = "File Name"
122 | Result(1, 2) = "Size"
123 | Result(1, 3) = "CSVRead time"
124 | Result(1, 4) = "sdkn104 time"
125 | Result(1, 5) = "ws_garcia time"
126 |
127 | For i = LBound(Files) To UBound(Files)
128 | FileName = DatasetsFolder & Files(i)
129 | If Not FileExists(FileName) Then Throw "Cannot find file '" & FileName & "'"
130 | Next
131 |
132 | For i = LBound(Files) To UBound(Files)
133 | FileName = DatasetsFolder & Files(i)
134 | If Not FileExists(FileName) Then Throw "Cannot find file '" & FileName & "'"
135 | t1 = ElapsedTime()
136 | CSVResult = CSVRead(FileName)
137 | t2 = ElapsedTime()
138 | sdkn104Result = Wrap_sdkn104(FileName, False)
139 | t3 = ElapsedTime()
140 | ws_garciaResult = Wrap_ws_garcia(FileName, ",", vbCrLf)
141 | t4 = ElapsedTime()
142 |
143 | ThrowIfError CSVResult
144 | ThrowIfError ws_garciaResult
145 | ThrowIfError sdkn104Result
146 |
147 | Debug.Print i, t2 - t1, t3 - t2, t4 - t3
148 | Result(i + 2, 1) = FileName
149 | Result(i + 2, 2) = FileSize(FileName)
150 | Result(i + 2, 3) = t2 - t1
151 | Result(i + 2, 4) = t3 - t2
152 | Result(i + 2, 5) = t4 - t3
153 |
154 | Next
155 |
156 | ThrowIfError CSVWrite(Result, ResultsFile)
157 |
158 | Exit Sub
159 | ErrHandler:
160 | MsgBox ReThrow("TestAgainstRDatasets", Err, True), vbCritical
161 | End Sub
162 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/modCSVWritePerformance.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "modCSVWritePerformance"
2 | Option Explicit
3 |
4 | '--------------------------------------------------------------------------------
5 | 'Time: 27/11/2022 15:14:08
6 | 'ComputerName: PHILIP-LAPTOP
7 | 'VersionNumber: 206
8 | 'Elapsed time for CSVRead: 17.5810412999708 seconds
9 | 'Elapsed time for CSVWrite ANSI: 25.1498529999517 seconds
10 | 'Elapsed time for CSVWrite ANSI: 26.987809299957 seconds
11 | 'Elapsed time for CSVWrite ANSI: 27.0266166999936 seconds
12 | 'Elapsed time for CSVWrite ANSI: 27.2726858998649 seconds
13 | 'Elapsed time for CSVWrite ANSI: 26.7385879000649 seconds
14 | 'Elapsed time for CSVWrite UTF-8: 20.1281892000698 seconds
15 | 'Elapsed time for CSVWrite UTF-8: 17.2521635999437 seconds
16 | 'Elapsed time for CSVWrite UTF-8: 19.8307610999327 seconds
17 | 'Elapsed time for CSVWrite UTF-8: 16.9916775000747 seconds
18 | 'Elapsed time for CSVWrite UTF-8: 16.8933107000776 seconds
19 | 'Elapsed time for CSVWrite UTF-16: 27.9302846000064 seconds
20 | 'Elapsed time for CSVWrite UTF-16: 27.2358552000951 seconds
21 | 'Elapsed time for CSVWrite UTF-16: 26.9824278000742 seconds
22 | 'Elapsed time for CSVWrite UTF-16: 28.2433342998847 seconds
23 | 'Elapsed time for CSVWrite UTF-16: 27.3908504000865 seconds
24 | '--------------------------------------------------------------------------------
25 |
26 | '--------------------------------------------------------------------------------
27 | 'Time: 27/11/2022 15:46:11
28 | 'ComputerName: PHILIP-LAPTOP
29 | 'VersionNumber: 208
30 | 'Elapsed time for CSVRead: 13.6756363001186 seconds
31 | 'Elapsed time for CSVWrite ANSI: 11.0888602000196 seconds
32 | 'Elapsed time for CSVWrite ANSI: 10.5916883000173 seconds
33 | 'Elapsed time for CSVWrite ANSI: 11.331025699852 seconds
34 | 'Elapsed time for CSVWrite ANSI: 11.0151514001191 seconds
35 | 'Elapsed time for CSVWrite ANSI: 11.0596908999141 seconds
36 | 'Elapsed time for CSVWrite UTF-8: 10.6685319000389 seconds
37 | 'Elapsed time for CSVWrite UTF-8: 10.5587436000351 seconds
38 | 'Elapsed time for CSVWrite UTF-8: 10.6614930001087 seconds
39 | 'Elapsed time for CSVWrite UTF-8: 10.7582542998716 seconds
40 | 'Elapsed time for CSVWrite UTF-8: 11.1152926001232 seconds
41 | 'Elapsed time for CSVWrite UTF-16: 11.0943058999255 seconds
42 | 'Elapsed time for CSVWrite UTF-16: 11.284852599958 seconds
43 | 'Elapsed time for CSVWrite UTF-16: 11.7004682000261 seconds
44 | 'Elapsed time for CSVWrite UTF-16: 11.5732845000457 seconds
45 | 'Elapsed time for CSVWrite UTF-16: 11.3086764998734 seconds
46 | '--------------------------------------------------------------------------------
47 |
48 | '--------------------------------------------------------------------------------
49 | 'Time: 28/11/2022 13:38:49
50 | 'ComputerName: DESKTOP-0VD2AF0
51 | 'VersionNumber: 212
52 | 'Elapsed time for CSVRead: 12.6903092000284 seconds
53 | 'Elapsed time for CSVWrite ANSI: 9.0200504999957 seconds
54 | 'Elapsed time for CSVWrite ANSI: 8.97261259995867 seconds
55 | 'Elapsed time for CSVWrite ANSI: 8.83159349998459 seconds
56 | 'Elapsed time for CSVWrite ANSI: 8.94957689999137 seconds
57 | 'Elapsed time for CSVWrite ANSI: 8.87800550000975 seconds
58 | 'Elapsed time for CSVWrite UTF-8: 9.05053659999976 seconds
59 | 'Elapsed time for CSVWrite UTF-8: 9.07855340000242 seconds
60 | 'Elapsed time for CSVWrite UTF-8: 8.94219269999303 seconds
61 | 'Elapsed time for CSVWrite UTF-8: 8.96188490005443 seconds
62 | 'Elapsed time for CSVWrite UTF-8: 8.95847179996781 seconds
63 | 'Elapsed time for CSVWrite UTF-16: 9.29401939996751 seconds
64 | 'Elapsed time for CSVWrite UTF-16: 9.64014640002279 seconds
65 | 'Elapsed time for CSVWrite UTF-16: 9.23568999994313 seconds
66 | 'Elapsed time for CSVWrite UTF-16: 9.18535220000194 seconds
67 | 'Elapsed time for CSVWrite UTF-16: 9.20971269998699 seconds
68 | '--------------------------------------------------------------------------------
69 |
70 | '--------------------------------------------------------------------------------
71 | 'Time: 04/01/2023 16:06:04
72 | 'ComputerName: DESKTOP -HSGAM5S
73 | 'VersionNumber: 216
74 | 'Elapsed time for CSVRead: 8.40554780000093 seconds
75 | 'Elapsed time for CSVWrite ANSI: 5.72161549999873 seconds
76 | 'Elapsed time for CSVWrite ANSI: 5.73175289999926 seconds
77 | 'Elapsed time for CSVWrite ANSI: 5.67613829999755 seconds
78 | 'Elapsed time for CSVWrite ANSI: 5.66072480000003 seconds
79 | 'Elapsed time for CSVWrite ANSI: 5.74036770000021 seconds
80 | 'Elapsed time for CSVWrite UTF-8: 5.70110969999951 seconds
81 | 'Elapsed time for CSVWrite UTF-8: 5.75665819999995 seconds
82 | 'Elapsed time for CSVWrite UTF-8: 5.90536229999998 seconds
83 | 'Elapsed time for CSVWrite UTF-8: 5.89822220000133 seconds
84 | 'Elapsed time for CSVWrite UTF-8: 5.93974149999849 seconds
85 | 'Elapsed time for CSVWrite UTF-16: 6.00605799999903 seconds
86 | 'Elapsed time for CSVWrite UTF-16: 5.93665500000134 seconds
87 | 'Elapsed time for CSVWrite UTF-16: 5.90333740000278 seconds
88 | 'Elapsed time for CSVWrite UTF-16: 5.8423709000017 seconds
89 | 'Elapsed time for CSVWrite UTF-16: 5.87104679999902 seconds
90 | '--------------------------------------------------------------------------------
91 | Sub TestWriteSpeedUsingMilitary()
92 |
93 | Const FileToWrite = "c:\Temp\military.csv"
94 | Dim Data
95 | Dim Encoding As String
96 | Dim i As Long
97 | Dim j As Long
98 | Dim Res As String
99 | 1 On Error GoTo ErrHandler
100 | 2 Debug.Print String(80, "-")
101 | 3 Debug.Print "Time: ", Now
102 | 4 Debug.Print "ComputerName: ", Environ$("ComputerName")
103 | 5 Debug.Print "'VBA-CSV Audit Sheet Version = " & shAudit.Range("Headers").Cells(2, 1).value
104 | 6 tic
105 | 7 Data = ThrowIfError(CSVRead("C:\Projects\RDatasets\csv\openintro\military.csv", True))
106 | 8 toc "CSVRead"
107 |
108 | 9 For j = 1 To 3
109 | 10 Encoding = Choose(j, "ANSI", "UTF-8", "UTF-16")
110 | 11 For i = 1 To 5
111 | 12 tic
112 | 13 Res = CSVWrite(Data, FileToWrite, , , , , Encoding)
113 | 14 toc "CSVWrite " & Encoding
114 | 15 Next i
115 | 16 Next j
116 | 17 Debug.Print String(80, "-")
117 |
118 | 18 Exit Sub
119 | ErrHandler:
120 | 19 MsgBox ReThrow("TestWriteSpeedUsingMilitary", Err, True), vbCritical
121 | End Sub
122 |
123 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/parserConfig.cls:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CSV.xlsm/VBA/parserConfig.cls
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/VBA/shTest.cls:
--------------------------------------------------------------------------------
1 | VERSION 1.0 CLASS
2 | BEGIN
3 | MultiUse = -1 'True
4 | END
5 | Attribute VB_Name = "shTest"
6 | Attribute VB_GlobalNameSpace = False
7 | Attribute VB_Creatable = False
8 | Attribute VB_PredeclaredId = True
9 | Attribute VB_Exposed = True
10 | Option Explicit
11 |
12 | Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
13 | On Error GoTo ErrHandler
14 | Dim CSVReadRes As Range
15 | Dim i As Long
16 | Dim NewTestNo As Variant
17 | Dim protContents As Boolean
18 | Dim R As Range
19 | Const MAXWIDTH As Long = 50
20 | Const MINWIDTH As Long = 4
21 |
22 | Set R = ActiveSheet.ListObjects("Tests").DataBodyRange
23 |
24 | If Not Application.Intersect(Target, R) Is Nothing Then
25 | NewTestNo = Application.Intersect(Target.EntireRow, R.Columns(2)).value
26 | If Not IsNumeric(NewTestNo) Then Throw "TestNo must be a number"
27 | End If
28 |
29 | If NewTestNo > 0 Then
30 | Me.Range("TestNo").value = NewTestNo
31 | Me.Calculate
32 | Cancel = True
33 | On Error Resume Next
34 | Set CSVReadRes = Me.Range("CallToCSVRead").SpillingToRange
35 | On Error GoTo ErrHandler
36 | If CSVReadRes Is Nothing Then
37 | Set CSVReadRes = Me.Range("CallToCSVRead")
38 | End If
39 |
40 | Application.GoTo Me.Cells(1, 1)
41 | Me.Range("TheVBACode").Select
42 |
43 | protContents = Me.ProtectContents
44 |
45 | If protContents Then Me.Unprotect
46 | With CSVReadRes
47 | .NumberFormat = "General"
48 | .Columns.AutoFit
49 | End With
50 |
51 | With Me.Range("FormattedRange1")
52 | .Columns.AutoFit
53 | If .Columns(1).ColumnWidth < MINWIDTH Then
54 | .Columns(1).ColumnWidth = MINWIDTH
55 | ElseIf .Columns(1).ColumnWidth > MAXWIDTH Then
56 | .Columns(1).ColumnWidth = MAXWIDTH
57 | End If
58 | End With
59 |
60 | With Me.Range("FormattedRange2")
61 | For i = 1 To .Columns.count
62 | If .Cells(1, i).ColumnWidth < MINWIDTH Then
63 | .Columns(i).ColumnWidth = MINWIDTH
64 | ElseIf .Cells(1, i).ColumnWidth > MAXWIDTH Then
65 | .Columns(i).ColumnWidth = MAXWIDTH
66 | End If
67 | Next i
68 | End With
69 |
70 | ClearUsedRange
71 |
72 | If protContents Then Me.Protect , , True
73 |
74 | End If
75 |
76 | Exit Sub
77 | ErrHandler:
78 | MsgBox ReThrow("Worksheet_BeforeDoubleClick", Err, True), vbCritical
79 | End Sub
80 |
81 | Sub ClearUsedRange()
82 | Dim i As Long
83 | Dim LastCol As Long
84 | Dim LastRow As Long
85 | Dim RealLastCol As Long
86 | Dim RealLastRow As Long
87 | Dim UsedRange As Range
88 |
89 | Dim NeedThis As Range
90 |
91 | On Error GoTo ErrHandler
92 | For i = 1 To 6
93 |
94 | Select Case i
95 | Case 1, 2, 3
96 | Set NeedThis = Me.Range("FormattedRange" & i)
97 |
98 | Case 4
99 | Set NeedThis = Me.Cells.Find(What:="*", After:=Me.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
100 | xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious, MatchCase:=False)
101 | Case 5
102 | Set NeedThis = Me.Cells.Find(What:="*", After:=Me.Cells(1, 1), LookIn:=xlFormulas, LookAt:= _
103 | xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, MatchCase:=False)
104 | Case 6
105 | Set NeedThis = Me.ListObjects("Tests").DataBodyRange
106 | End Select
107 |
108 | If Not NeedThis Is Nothing Then
109 | With NeedThis
110 | If .Row + .Rows.count - 1 > RealLastRow Then RealLastRow = .Row + .Rows.count - 1
111 | If .Column + .Columns.count - 1 > RealLastCol Then RealLastCol = .Column + .Columns.count - 1
112 | End With
113 | End If
114 | Next i
115 |
116 | Set UsedRange = Me.UsedRange
117 | With UsedRange
118 | LastRow = .Row + .Rows.count - 1
119 | LastCol = .Column + .Columns.count - 1
120 | End With
121 |
122 | If LastRow > RealLastRow Then
123 | Debug.Print Me.Cells(RealLastRow + 1, 1).Resize(LastRow - RealLastRow + 1).EntireRow.Address
124 | Me.Cells(RealLastRow + 1, 1).Resize(LastRow - RealLastRow + 1).EntireRow.Delete
125 | End If
126 | If LastCol > RealLastCol Then
127 | Debug.Print Me.Cells(1, RealLastCol + 1).Resize(, LastCol - RealLastCol + 1).EntireColumn.Address
128 | Me.Cells(1, RealLastCol + 1).Resize(, LastCol - RealLastCol + 1).EntireColumn.Delete
129 | End If
130 |
131 | Set UsedRange = Me.UsedRange
132 |
133 | Exit Sub
134 | ErrHandler:
135 | ReThrow "ClearUsedRange", Err
136 | End Sub
137 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Values/GIF2.csv:
--------------------------------------------------------------------------------
1 | "Data",,,,,"CSVWrite",,"CSVRead (Delimited = FALSE)",,"CSVRead",,,
2 | "Nums","Bools","Dates","Strings",,"C:\Temp\Test.csv",,"""Nums"",""Bools"",""Dates"",""Strings""",,"Nums","Bools","Dates","Strings"
3 | 1,False,2021-11-02,"Text",,,,"1,False,2021-11-02,""Text""",,1,False,2021-11-02,"Text"
4 | 2,True,2021-11-03,"A, comma",,,,"2,True,2021-11-03,""A, comma""",,2,True,2021-11-03,"A, comma"
5 | 3,False,2021-11-04,"A
6 | LF",,,,"3,False,2021-11-04,""A",,3,False,2021-11-04,"A
7 | LF"
8 | 4,True,2021-11-05,"A
CR",,,,"LF""",,4,True,2021-11-05,"A
CR"
9 | 5,False,2021-11-06,"""Quotes""",,,,"4,True,2021-11-05,""A",,5,False,2021-11-06,"""Quotes"""
10 | 6,True,2021-11-07,"Text",,,," CR""",,6,True,2021-11-07,"Text"
11 | ,,,,,,,"5,False,2021-11-06,""""""Quotes""""""",,,,,
12 | ,,,,,,,"6,True,2021-11-07,""Text""",,,,,
13 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Values/GIF3.csv:
--------------------------------------------------------------------------------
1 | "Data",,,
2 | "Nums","Bools","Dates","Strings"
3 | 1,False,2021-11-02,"Text"
4 | 2,True,2021-11-03,"A, comma"
5 | 3,False,2021-11-04,"A
6 | LF"
7 | 4,True,2021-11-05,"A
CR"
8 | 5,False,2021-11-06,"""Quotes"""
9 | ,,,
10 | "CSVWrite",,,
11 | "C:\Temp\Test.csv",,,
12 | ,,,
13 | "CSVRead (Delimited = FALSE)",,,
14 | """Nums"",""Bools"",""Dates"",""Strings""",,,
15 | "1,False,2021-11-02,""Text""",,,
16 | "2,True,2021-11-03,""A, comma""",,,
17 | "3,False,2021-11-04,""A",,,
18 | "LF""",,,
19 | "4,True,2021-11-05,""A",,,
20 | " CR""",,,
21 | "5,False,2021-11-06,""""""Quotes""""""",,,
22 | ,,,
23 | "CSVRead",,,
24 | "Nums","Bools","Dates","Strings"
25 | 1,False,2021-11-02,"Text"
26 | 2,True,2021-11-03,"A, comma"
27 | 3,False,2021-11-04,"A
28 | LF"
29 | 4,True,2021-11-05,"A
CR"
30 | 5,False,2021-11-06,"""Quotes"""
31 | ,,,
32 | "Test equality (A2:D7=A23:D28)",,,
33 | True,True,True,True
34 | True,True,True,True
35 | True,True,True,True
36 | True,True,True,True
37 | True,True,True,True
38 | True,True,True,True
39 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Values/HiddenSheet.csv:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Values/Performance (6).csv:
--------------------------------------------------------------------------------
1 | ,,,,,,,,,,,
2 | "Performance",,,,,,,,,,,
3 | ,,,,,,,,,,,
4 | ,,,,,,,,,,,
5 | "This data generated 08-October-2021 19:26:26",,,,,,,,,,"Chart_1_Time_v_N for file with N rows and N columns.jpg",
6 | ,,,,,,,,,,"Parse Time v N. Log Scales.
7 | N columns, N rows of 1-char fields.",
8 | "Field Length","Each Field Contains","Num Rows","Num Cols and Rows","CSVRead
9 | v0.14","sdkn104
10 | v1.9","ArrayFromCSVfile","NCalls
11 | CSVRead
12 | v0.14","NCalls
13 | sdkn104
14 | v1.9","NCalls
15 | ArrayFromCSVfile","File","Size"
16 | 1,"x",1,1,1.76448012488409E-04,1.147792423264E-04,1.13554741232414E-04,5471,8255,8340,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0001_x_001_Ascii.csv",3
17 | 1,"x",2,2,1.84451184213404E-04,1.20630134380587E-04,1.15503454189803E-04,5241,7875,8206,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0002_x_002_Ascii.csv",10
18 | 1,"x",4,4,2.01201359833478E-04,1.31907868132015E-04,1.25321296813089E-04,4818,7233,7595,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0004_x_004_Ascii.csv",36
19 | 1,"x",8,8,2.71480837555945E-04,1.78996213432738E-04,1.58817824114612E-04,3600,5396,6055,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0008_x_008_Ascii.csv",136
20 | 1,"x",16,16,5.35173324502474E-04,3.5523165980093E-04,2.87312592919331E-04,1847,2766,3406,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0016_x_016_Ascii.csv",528
21 | 1,"x",32,32,1.63772236162585E-03,1.05671306468826E-03,8.05627093681258E-04,609,941,1232,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0032_x_032_Ascii.csv",2080
22 | 1,"x",64,64,6.41791698718308E-03,3.8925967586751E-03,2.98903848262207E-03,156,257,334,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0064_x_064_Ascii.csv",8256
23 | 1,"x",128,128,2.38228504097884E-02,1.53248327214564E-02,1.16575376191517E-02,43,66,86,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0128_x_128_Ascii.csv",32896
24 | 1,"x",256,256,9.59993296918058E-02,0.066397720031857,5.09581537819415E-02,11,16,20,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0256_x_256_Ascii.csv",131328
25 | 1,"x",512,512,0.592675238781196,0.279872413781816,0.227966898781999,2,4,5,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_0512_x_512_Ascii.csv",524800
26 | 1,"x",1024,1024,1.65146033878304,1.25909503878833,1.1223542387805,1,1,1,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_1024_x_1024_Ascii.csv",2098176
27 | 1,"x",2048,2048,7.78989793877449,6.12252443878137,5.22956923877686,1,1,1,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_2048_x_2048_Ascii.csv",8390656
28 | 1,"x",4096,4096,32.3049384387767,28.0344056387756,26.2637082387872,1,1,1,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_4096_x_4096_Ascii.csv",33558528
29 | 1,"x",8192,8192,159.126722738793,156.653830938775,169.50707963878,1,1,1,"C:\Users\phili\AppData\Local\Temp\VBA-CSV\Performance\Strings_length_1_8192_x_8192_Ascii.csv",134225920
30 |
--------------------------------------------------------------------------------
/vba/VBA-CSV.xlsm/Values/TestResults.csv:
--------------------------------------------------------------------------------
1 | "Test Results"
2 |
3 | "All tests passed."
4 |
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/AuditSheetComments.txt:
--------------------------------------------------------------------------------
1 | Version Date Time Author Comment
2 | 27 02-Dec-2023 09:41 Philip Swannell CSVWrite now supports Encoding agument UTF-8NOBOM and UTF-16NOBOM.
3 | 26 26-Oct-2023 11:51 Philip Swannell CSVWrite now supports "Raw" as value for QuoteAllStrings.
4 | 25 26-Oct-2023 09:44 Philip Swannell Added "Usage" text box.
5 | 24 25-Oct-2023 19:04 Philip Swannell Updated help for "K" option to ConvertTypes.
6 | 23 06-Feb-2023 16:05 Philip Swannell Updated documentation for SkipToCol and NumCols.
7 | 22 09-Nov-2022 22:10 Philip Swannell Updates to Help.
8 | 21 07-Nov-2022 18:58 Philip Swannell Updated help for Encoding argument to CSVRead.
9 | 20 03-Nov-2022 16:39 Philip Swannell Updated help for Delimiter argument to CSVRead.
10 | 19 03-Nov-2022 09:59 Philip Swannell Tweak to method CodeToRegister.
11 | 18 03-Nov-2022 09:38 Philip Swannell Tweaks to help text
12 | 17 02-Nov-2022 19:21 Philip Swannell Changed help for EOL argument to CSVWrite.
13 | 16 31-Oct-2022 16:12 Philip Swannell Changes to code that creates the intellisense workbook.
14 | 15 28-Oct-2022 16:27 Philip Swannell Changes to code that creates the intellisense workbook.
15 | 14 21-Oct-2022 17:04 Philip Swannell Changes relating to the two additional arguments to CSVWrite - TrueString and FalseString.
16 | 13 15-Oct-2021 20:08 Philip Swannell Create VBA-CSV-Intellisense.xlsx workbook
17 | 12 13-Oct-2021 12:45 Philip Swannell Tweaks to CSVWrite documentation.
18 | 11 12-Oct-2021 12:32 Philip Swannell CSVWrite now accepts Data having one dimension.
19 | 10 30-Sep-2021 17:05 Philip Swannell Edit to function CodeToRegister.
20 | 9 29-Sep-2021 19:55 Philip Swannell Edit to function CodeToRegister.
21 | 8 27-Sep-2021 19:22 Philip Swannell DateFormat arg to CSVRead now defaults to Y-M-D.
22 | 7 23-Sep-2021 13:15 Philip Swannell CSVWrite now takes argument Encoding, not Unicode.
23 | 6 20-Sep-2021 14:42 Philip Swannell Edits to help.
24 | 5 09-Sep-2021 08:28 Philip Swannell Edits to help.
25 | 4 08-Sep-2021 18:46 Philip Swannell Edits to help.
26 | 3 06-Sep-2021 14:26 Philip Swannell Fixed typo in IgnoreRepeated.
27 | 2 05-Sep-2021 07:52 Philip Swannell Now save backups of this workbook to my one-drive.
28 | 1 15-Aug-2021 13:29 Philip Swannell Added audit sheet
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/FilesInProject.txt:
--------------------------------------------------------------------------------
1 | AuditSheetComments.txt
2 | Formulas\Help.txt
3 | Values\Audit.csv
4 | Values\Help.csv
5 | VBA\modCSVHelp.bas
6 | VBA\modDependencies.bas
7 | VBA\modIntellisense.bas
8 | VBA\Module1.bas
9 | VBA-CVS-HelpGenerator.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/Formulas/Help.txt:
--------------------------------------------------------------------------------
1 | Address Formula
2 | D9:D27 =LEN(C9:C27)
3 | E9 =C9
4 | E12 =C12
5 | E13 =C13
6 | E14 =C14
7 | E15 =C15
8 | E17 =C17
9 | E18 =C18
10 | E19 =C19
11 | E20 =C20
12 | E21 =C21
13 | E22 =C22
14 | E23 =C23
15 | E24 =C24 &CHAR(10)&CHAR(10)&"If NumRows is greater than the number of rows in the file then the return is ""padded"" with the value of ShowMissingsAs. Likewise, if NumCols is greater than the number of columns in the file."
16 | E25 =C25&" If auto-detection does not work, then it's possible that the file is encoded `UTF-8` or `UTF-16` but without a byte order mark to identify the encoding. Experiment with Encoding as each of `UTF-8` and `UTF-16`." & CHAR(10) & CHAR(10)&"`ANSI` is taken to mean `Windows-1252` encoding."
17 | D31 =LEN(C31)
18 | D33:D42 =LEN(C33:C42)
19 | E33 =C33
20 | E33 =C33
21 | E34 =C34
22 | E36 =C36
23 | E37 =C37
24 | E38 =C38
25 | E39 =C39
26 | E41 =C41
27 | E42 =C42
28 | B47:B107 =CodeToRegister(B7,C7,C9:C27)
29 | B109:B153 =CodeToRegister(B31,C31,C33:C42)
30 | B157:B273 =HelpForVBE(B7,C7,CSVReadArgs,E9:E27,C28)
31 | B276:B315 =HelpForVBE(B31,C31,CSVWriteArgs,E33:E42,C43)
32 | B317:B352 =MarkdownHelp(SourceFile,B7,C7,CSVReadArgs,E9:E27,L6:M8)
33 | B354:B375 =MarkdownHelp(SourceFile,B31,C31,CSVWriteArgs,E33:E42)
34 |
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/VBA-CVS-HelpGenerator.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CVS-HelpGenerator.xlsm/VBA-CVS-HelpGenerator.xlsm
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/VBA/Module1.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "Module1"
2 | 'Option Explicit
3 | '
4 | '' -----------------------------------------------------------------------------------------------------------------------
5 | '' Procedure : SaveAndBackupWorkbook
6 | '' Purpose : Export the modules of this workbook to the src folder, also save the workbook in its current location,
7 | '' and save a backup of the workbook to my OneDrive folder.
8 | '' -----------------------------------------------------------------------------------------------------------------------
9 | 'Sub SaveAndBackupWorkbook()
10 | '
11 | ' Const Title = "VBA-CSV"
12 | ' Dim BackUpBookName As String
13 | '
14 | '1 On Error GoTo ErrHandler
15 | '
16 | '2 PrepareForRelease
17 | '3 CreateIntellisenseWorkbook
18 | '4 ThisWorkbook.Save
19 | '
20 | '5 BackUpBookName = Environ("OneDriveConsumer") + "\Excel Sheets\VBA-CSV_Backups\" + Replace(ThisWorkbook.Name, ".", "_v" & shAudit.Range("B6") & ".")
21 | '
22 | '6 FileCopy ThisWorkbook.FullName, BackUpBookName
23 | '
24 | '7 Exit Sub
25 | 'ErrHandler:
26 | '8 MsgBox "#SaveAndBackupWorkbook (line " & CStr(Erl) + "): " & Err.Description & "!", , Title
27 | 'End Sub
28 | '
29 | '' -----------------------------------------------------------------------------------------------------------------------
30 | '' Procedure : PrepareForRelease
31 | '' Purpose : Tidy up the worksheets of this workbook.
32 | '' -----------------------------------------------------------------------------------------------------------------------
33 | 'Sub PrepareForRelease()
34 | '
35 | ' Dim i As Long
36 | ' Dim ws As Worksheet
37 | '
38 | ' On Error GoTo ErrHandler
39 | '
40 | ' If Application.DisplayFormulaBar Then Application.FormulaBarHeight = 1
41 | '
42 | ' For Each ws In ThisWorkbook.Worksheets
43 | ' If ws.Visible = xlSheetVisible Then
44 | ' Application.GoTo ws.Cells(1, 1)
45 | ' ActiveWindow.DisplayGridlines = False
46 | ' ActiveWindow.DisplayHeadings = False
47 | ' End If
48 | ' ws.Protect , True, True
49 | ' Next
50 | ' For i = 1 To ThisWorkbook.Worksheets.Count
51 | ' If ThisWorkbook.Worksheets(i).Visible Then
52 | ' Application.GoTo ThisWorkbook.Worksheets(i).Cells(1, 1)
53 | ' Exit For
54 | ' End If
55 | ' Next i
56 | ' Exit Sub
57 | 'ErrHandler:
58 | ' Throw "#PrepareForRelease: " & Err.Description & "!"
59 | 'End Sub
60 | '
61 | 'Function FileCopy(SourceFile As String, TargetFile As String)
62 | ' Dim F As Scripting.File
63 | ' Dim FSO As Scripting.FileSystemObject
64 | ' Dim CopyOfErr As String
65 | ' On Error GoTo ErrHandler
66 | ' Set FSO = New FileSystemObject
67 | ' Set F = FSO.GetFile(SourceFile)
68 | ' F.Copy TargetFile, True
69 | ' FileCopy = TargetFile
70 | ' Set FSO = Nothing: Set F = Nothing
71 | ' Exit Function
72 | 'ErrHandler:
73 | ' CopyOfErr = Err.Description
74 | ' Set FSO = Nothing: Set F = Nothing
75 | ' Throw "#" + CopyOfErr + "!"
76 | 'End Function
77 | '
78 |
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/VBA/modDependencies.bas:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/vba/VBA-CVS-HelpGenerator.xlsm/VBA/modDependencies.bas
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/VBA/modIntellisense.bas:
--------------------------------------------------------------------------------
1 | Attribute VB_Name = "modIntellisense"
2 | Option Explicit
3 |
4 | Sub CreateIntellisenseWorkbook()
5 |
6 | Const TargetBookName = "VBA-CSV-Intellisense.xlsx"
7 | Dim FnName As String
8 | Dim i As Long
9 | Dim j As Long
10 | Dim Prompt As String
11 | Dim SourceRange As Range
12 | Dim targetsheet As Worksheet
13 | Dim wb As Workbook
14 |
15 | 1 On Error GoTo ErrHandler
16 | 2 Prompt = "Create intellisense data and save to " & ThisWorkbook.Path & "\" & TargetBookName
17 |
18 | 3 If MsgBox(Prompt, vbOKCancel + vbQuestion) <> vbOK Then Exit Sub
19 |
20 | 4 On Error Resume Next
21 | 5 Set wb = Application.Workbooks(TargetBookName)
22 | 6 On Error GoTo ErrHandler
23 | 7 If Not wb Is Nothing Then
24 | 8 Err.Raise vbObjectError + 1, , "Please close workbook " & TargetBookName
25 | 9 End If
26 |
27 | 10 Set wb = Application.Workbooks.Add()
28 | 11 Set targetsheet = wb.Worksheets(1)
29 |
30 | 12 targetsheet.Name = "_Intellisense_"
31 |
32 | 13 targetsheet.Cells(1, 1).value = "FunctionInfo"
33 | 14 targetsheet.Cells(1, 2).value = "'1.0"
34 | 15 shHelp.Calculate
35 |
36 | 16 For i = 1 To 2
37 | 17 FnName = Choose(i, "CSVRead", "CSVWrite")
38 | 18 Set SourceRange = shHelp.Range(FnName & "Args")
39 | 19 targetsheet.Cells(1 + i, 1) = FnName
40 | 20 targetsheet.Cells(1 + i, 2) = vbCrLf & Replace(SourceRange.Cells(1, 1).Offset(-2, 1).value, vbLf, vbCrLf) & vbCrLf
41 | 21 For j = 1 To SourceRange.Rows.Count
42 | 22 targetsheet.Cells(1 + i, 2 * (1 + j)).value = SourceRange.Cells(j, 1).value
43 | 23 targetsheet.Cells(1 + i, 1 + 2 * (1 + j)).value = Replace(SourceRange.Cells(j, 4).value, vbLf, vbCrLf) 'Use the "long form" of the help...
44 | 24 Next j
45 | 25 Next i
46 |
47 | 26 With targetsheet.UsedRange
48 | 27 .Columns.ColumnWidth = 40
49 | 28 .WrapText = True
50 | 29 .VerticalAlignment = xlVAlignCenter
51 | 30 .Columns.AutoFit
52 | 31 End With
53 | 32 Application.DisplayAlerts = False
54 | 33 wb.SaveAs ThisWorkbook.Path & "\" & TargetBookName, xlOpenXMLWorkbook
55 | 34 wb.Close False
56 |
57 | 35 Exit Sub
58 | ErrHandler:
59 | 36 MsgBox "#CreateIntellisenseWorkbook (line " & CStr(Erl) + "): " & Err.Description & "!"
60 | End Sub
61 |
--------------------------------------------------------------------------------
/vba/VBA-CVS-HelpGenerator.xlsm/Values/Audit.csv:
--------------------------------------------------------------------------------
1 | ,"Audit",,,,
2 | ,,,,,
3 | ,,,,,
4 | ,,,,,
5 | ,"Version","Date","Time","Author","Comment"
6 | ,27,2023-12-02,0.403888888889924,"Philip Swannell","CSVWrite now supports Encoding agument UTF-8NOBOM and UTF-16NOBOM."
7 | ,26,2023-10-26,0.494143518517376,"Philip Swannell","CSVWrite now supports ""Raw"" as value for QuoteAllStrings."
8 | ,25,2023-10-26,0.405879629630363,"Philip Swannell","Added ""Usage"" text box."
9 | ,24,2023-10-25,0.794803240743931,"Philip Swannell","Updated help for ""K"" option to ConvertTypes."
10 | ,23,2023-02-06,0.670821759260434,"Philip Swannell","Updated documentation for SkipToCol and NumCols."
11 | ,22,2022-11-09,0.923657407409337,"Philip Swannell","Updates to Help."
12 | ,21,2022-11-07,0.790902777778683,"Philip Swannell","Updated help for Encoding argument to CSVRead."
13 | ,20,2022-11-03,0.693807870367891,"Philip Swannell","Updated help for Delimiter argument to CSVRead."
14 | ,19,2022-11-03,0.416388888887013,"Philip Swannell","Tweak to method CodeToRegister."
15 | ,18,2022-11-03,0.401481481480005,"Philip Swannell","Tweaks to help text"
16 | ,17,2022-11-02,0.806516203701904,"Philip Swannell","Changed help for EOL argument to CSVWrite."
17 | ,16,2022-10-31,0.675138888887886,"Philip Swannell","Changes to code that creates the intellisense workbook."
18 | ,15,2022-10-28,0.685821759259852,"Philip Swannell","Changes to code that creates the intellisense workbook."
19 | ,14,2022-10-21,0.711273148146574,"Philip Swannell","Changes relating to the two additional arguments to CSVWrite - TrueString and FalseString."
20 | ,13,2021-10-15,0.83906250000291,"Philip Swannell","Create VBA-CSV-Intellisense.xlsx workbook"
21 | ,12,2021-10-13,0.531712962962047,"Philip Swannell","Tweaks to CSVWrite documentation."
22 | ,11,2021-10-12,0.522627314814599,"Philip Swannell","CSVWrite now accepts Data having one dimension."
23 | ,10,2021-09-30,0.711967592593282,"Philip Swannell","Edit to function CodeToRegister."
24 | ,9,2021-09-29,0.83050925925636,"Philip Swannell","Edit to function CodeToRegister."
25 | ,8,2021-09-27,0.807118055556202,"Philip Swannell","DateFormat arg to CSVRead now defaults to Y-M-D."
26 | ,7,2021-09-23,0.552222222220735,"Philip Swannell","CSVWrite now takes argument Encoding, not Unicode."
27 | ,6,2021-09-20,0.613136574072996,"Philip Swannell","Edits to help."
28 | ,5,2021-09-09,0.353437500001746,"Philip Swannell","Edits to help."
29 | ,4,2021-09-08,0.78216435185459,"Philip Swannell","Edits to help."
30 | ,3,2021-09-06,0.601793981484661,"Philip Swannell","Fixed typo in IgnoreRepeated."
31 | ,2,2021-09-05,0.328229166669189,"Philip Swannell","Now save backups of this workbook to my one-drive."
32 | ,1,2021-08-15,0.562395833330811,"Philip Swannell","Added audit sheet"
33 |
--------------------------------------------------------------------------------
/workbooks/VBA-CSV-GIFMaker.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/workbooks/VBA-CSV-GIFMaker.xlsm
--------------------------------------------------------------------------------
/workbooks/VBA-CSV-Intellisense.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/workbooks/VBA-CSV-Intellisense.xlsx
--------------------------------------------------------------------------------
/workbooks/VBA-CSV.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/workbooks/VBA-CSV.xlsm
--------------------------------------------------------------------------------
/workbooks/VBA-CVS-HelpGenerator.xlsm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/PGS62/VBA-CSV/017a1829f77ed7d8ef9094089d1647ef66e62400/workbooks/VBA-CVS-HelpGenerator.xlsm
--------------------------------------------------------------------------------