From 1e7eef6e3f5f2cd88cfd3a90e3f2ca80b669c78f Mon Sep 17 00:00:00 2001 From: don-tnowe <67479453+don-tnowe@users.noreply.github.com> Date: Sun, 23 Oct 2022 16:45:49 +0300 Subject: [PATCH] Add support for importing jaggy csv and ", " delim --- .../import_export/formats_edit/edit_csv.gd | 29 +++++++++++++++---- .../import_export/import_export_dialog.gd | 21 ++++++++++++-- .../import_export/spreadsheet_import.gd | 2 +- project.godot | 8 +---- 4 files changed, 45 insertions(+), 15 deletions(-) diff --git a/addons/resources_speadsheet_view/import_export/formats_edit/edit_csv.gd b/addons/resources_speadsheet_view/import_export/formats_edit/edit_csv.gd index cedf105..34f0fe8 100644 --- a/addons/resources_speadsheet_view/import_export/formats_edit/edit_csv.gd +++ b/addons/resources_speadsheet_view/import_export/formats_edit/edit_csv.gd @@ -19,17 +19,25 @@ func set_value(entry, key : String, value, index : int): func save_entries(all_entries : Array, indices : Array, repeat : bool = true): if timer == null || timer.time_left <= 0.0: var file = File.new() + var space_after_delimeter = import_data.delimeter.ends_with(" ") file.open(import_data.edited_path, File.WRITE) if import_data.remove_first_row: var names = [] names.resize(import_data.prop_names.size()) for i in names.size(): names[i] = TextEditingUtils.string_snake_to_naming_case(import_data.prop_names[i]) + if i != 0 and space_after_delimeter: + names[i] = " " + names[i] - file.store_csv_line(names, import_data.delimeter) + file.store_csv_line(names, import_data.delimeter[0]) for x in csv_rows: - file.store_csv_line(x, import_data.delimeter) + if space_after_delimeter: + for i in x.size(): + if i == 0: continue + x[i] = " " + x[i] + + file.store_csv_line(x, import_data.delimeter[0]) file.close() if repeat: @@ -48,15 +56,26 @@ func import_from_path(path : String, insert_func : FuncRef, sort_by : String, so var line var first = true + var space_after_delimeter = import_data.delimeter.ends_with(" ") csv_rows = [] while !file.eof_reached(): - line = file.get_csv_line(import_data.delimeter) - if first && import_data.remove_first_row: + line = file.get_csv_line(import_data.delimeter[0]) + if space_after_delimeter: + for i in line.size(): + line[i] = line[i].trim_prefix(" ") + + if first and import_data.remove_first_row: line = " " first = false continue - if csv_rows.size() == 0 || line.size() == csv_rows[0].size(): + if csv_rows.size() == 0: + csv_rows.append(line) + + elif line.size() != 1: + if line.size() != csv_rows[0].size(): + line.resize(csv_rows[0].size()) + csv_rows.append(line) var rows := [] diff --git a/addons/resources_speadsheet_view/import_export/import_export_dialog.gd b/addons/resources_speadsheet_view/import_export/import_export_dialog.gd index 5c8b6b0..35b7a60 100644 --- a/addons/resources_speadsheet_view/import_export/import_export_dialog.gd +++ b/addons/resources_speadsheet_view/import_export/import_export_dialog.gd @@ -40,16 +40,33 @@ func _load_entries(): import_data.delimeter = ";" var text_lines := [file.get_line().split(import_data.delimeter)] + var space_after_delimeter = false var line = text_lines[0] if line.size() == 1: import_data.delimeter = "," - text_lines[0] = text_lines[0][0].split(import_data.delimeter) + line = line[0].split(import_data.delimeter) + text_lines[0] = line + if line[1].begins_with(" "): + for i in line.size(): + line[i] = line[i].trim_prefix(" ") + + text_lines[0] = line + space_after_delimeter = true + import_data.delimeter = ", " while !file.eof_reached(): - line = file.get_csv_line(import_data.delimeter) + line = file.get_csv_line(import_data.delimeter[0]) + if space_after_delimeter: + for i in line.size(): + line[i] = line[i].trim_prefix(" ") + if line.size() == text_lines[0].size(): text_lines.append(line) + elif line.size() != 1: + line.resize(text_lines[0].size()) + text_lines.append(line) + entries = [] entries.resize(text_lines.size()) diff --git a/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd b/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd index 70f15d3..2cda173 100644 --- a/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd +++ b/addons/resources_speadsheet_view/import_export/spreadsheet_import.gd @@ -167,7 +167,7 @@ func create_enum_for_prop(col_index): func strings_to_resource(strings : Array): var new_res = new_script.new() - for j in prop_names.size(): + for j in min(prop_names.size(), strings.size()): new_res.set(prop_names[j], string_to_property(strings[j], j)) if prop_used_as_filename != "": diff --git a/project.godot b/project.godot index 90dfbd3..6955066 100644 --- a/project.godot +++ b/project.godot @@ -63,11 +63,6 @@ _global_script_classes=[ { "class": "ThemeStylebox", "language": "GDScript", "path": "res://addons/resources_speadsheet_view/editor_stylebox_overrider.gd" -}, { -"base": "Resource", -"class": "TrainBigmartsalesprediction", -"language": "GDScript", -"path": "res://aa/train_BigMartSalesPrediction.gd" } ] _global_script_class_icons={ "CellEditor": "", @@ -80,8 +75,7 @@ _global_script_class_icons={ "SpreadsheetImport": "", "TextEditingUtils": "", "ThemeIconButton": "", -"ThemeStylebox": "", -"TrainBigmartsalesprediction": "" +"ThemeStylebox": "" } color_rows=false color_arrays=true