boiii-scripts/shared/table_shared.gsc
2023-04-13 17:30:38 +02:00

84 lines
1.7 KiB
Plaintext

#namespace table;
/@
"Name: load( <str_filename>, <str_table_start>, [b_convert_numbers] )"
"Summary: Load a table into an array indexed by the values in the first row and column ( table[ row ][ column ] )."
"Module: String"
"MandatoryArg: <string> : The string to strip."
"OptionalArg: [b_convert_numbers] : Convert number cells from strings to numbers."
"Example: table::load( "gamedata\tables\cp\blahblah.csv", "tableheader" );"
"SPMP: both"
@/
function load( str_filename, str_table_start, b_convert_numbers = true )
{
a_table = [];
n_header_row = TableLookupRowNum( str_filename, 0, str_table_start );
Assert( n_header_row > -1, "Could not find start of table." );
a_headers = TableLookupRow( str_filename, n_header_row );
n_row = n_header_row + 1;
do
{
a_row = TableLookupRow( str_filename, n_row );
if ( isdefined( a_row ) && a_row.size > 0 )
{
index = StrStrip( a_row[ 0 ] );
if ( index != "" )
{
if ( index == "table_end" )
{
break;
}
if ( b_convert_numbers )
{
index = str_to_num( index );
}
a_table[ index ] = [];
for ( val = 1; val < a_row.size; val++ )
{
if ( StrStrip( a_headers[ val ] ) != "" && strStrip( a_row[ val ] ) != "" )
{
value = a_row[ val ];
if ( b_convert_numbers )
{
value = str_to_num( value );
}
a_table[ index ][ a_headers[ val ] ] = value;
}
}
}
}
n_row++;
}
while ( isdefined( a_row ) && a_row.size > 0 );
return a_table;
}
function str_to_num( value )
{
if ( StrIsInt( value ) )
{
value = Int( value );
}
else if ( StrIsFloat( value ) )
{
value = Float( value );
}
return value;
}