├── .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 | 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_utf16_le.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.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 --------------------------------------------------------------------------------