DexTool/LivingDexSS.gmx/scripts/csv_load_escape.gml
2020-02-17 14:15:34 -06:00

108 lines
3.3 KiB
Plaintext

///csv_load_escape(filename, _sep)
/***************************************************
Loads in an included .csv file
Same as csv_load, but will ignore seperators in quotes
If you want to use a quote, exit it first by using another quote (e.g. "" imports to ")
argument0 - The filename of the .csv
argument1 (Optional) - The seperator being used if not ","
returns: array
***************************************************/
var arr_tmp; // Temporary array to store the data
var file; // File that you are reading
var str; // Each line as a string
var esc = 34; // Quotation mark Unicode number
// Select the seperator being used
if (argument_count > 1)
var sep = argument[1]; // Use custom seperator
else
var sep = ","; // Default seperator
var i = 0; // The current row
var j = 0; // The current column
// Open the selected file
file = file_text_open_read(working_directory + string(argument[0]) + ".csv");
// Loop though the file
while (true) {
// Check for end of file
if (file_text_eof(file))
break;
// Read into the array
str = file_text_read_string(file);
j = 0; // Back to first column
while (string_length(str) > 0) {
if (string_count(sep, str) > 0) {
var pos_end = 1;
var cur = 1;
var escape = false;
// Travel cursor through string
while (true) {
var char = string_char_at(str, cur);
// Check to see if end of string is reached
if (char == "") {
pos_end = cur;
break;
}
// Check to see if we hit a seperator
if (char == sep && escape == false) {
pos_end = cur;
break;
}
// Escape string
if (char == chr(esc))
escape = !escape;
// Move the cursor
cur++;
}
// Copy section to array
arr_tmp[i, j] = string(string_copy(str, 1, cur-1));
// Clean up encapsulation quotes
if (string_char_at(arr_tmp[i, j], 1) == chr(esc))
arr_tmp[i, j] = string_copy(arr_tmp[i, j], 2, string_length(str));
if (string_char_at(arr_tmp[i, j], string_length(arr_tmp[i, j])) == chr(esc))
arr_tmp[i, j] = string_copy(arr_tmp[i, j], 1, string_length(arr_tmp[i, j])-1);
arr_tmp[i, j] = string_replace_all(arr_tmp[i, j], chr(esc) + chr(esc), chr(esc));
// Removed processed part of string
str = string_delete(str, 1, cur);
// Debug Log
trace("Array[" + string(i) + "," + string(j) + "] = " + string(arr_tmp[i, j]));
// Move to next column
j++;
}
else {
arr_tmp[i, j] = string_copy(str, 1, string_length(str));
trace("Array[" + string(i) + "," + string(j) + "] = " + string(arr_tmp[i, j]));
break;
}
}
// Next line in the file
file_text_readln(file);
i++;
}
// Close the file
file_text_close(file);
// Return the array
return arr_tmp;