Advertisement
Guest User

Untitled

a guest
Oct 17th, 2018
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ///script_grid = csv_to_grid( file, cell bounds, text bounds )
  2. //this reads a .csv file and imports the data into a ds_grid
  3. //"file" is the name of the .csv, placed in the included files
  4. //"cell bounds" is the character the csv is using to designate the boundaries between cells
  5. //"text bounds" is the character the csv is using to designate boundaries between text in cells (usually unused?)
  6.  
  7. switch( argument_count ) {
  8.    
  9.     case 1:
  10.         var file = argument[0];
  11.         var cellDelimiter = "";
  12.         var textDelimiter = "";
  13.     break;
  14.    
  15.     case 2:
  16.         var file = argument[0];
  17.         var cellDelimiter = argument[1];
  18.         var textDelimiter = "";
  19.     break;
  20.    
  21.     case 3:
  22.         var file = argument[0];
  23.         var cellDelimiter = argument[1];
  24.         var textDelimiter = argument[2];
  25.     break;
  26.    
  27.     default:
  28.         return noone;
  29.     break;
  30.    
  31. }
  32.  
  33. if ( cellDelimiter == "" ) cellDelimiter = ",";
  34. if ( textDelimiter == "" ) textDelimiter = chr(34);
  35.  
  36.  
  37. var cellDelimiterOrd = ord( cellDelimiter );
  38. var textDelimiterOrd = ord( textDelimiter );
  39.  
  40. //
  41. var buffer = buffer_create( 1, buffer_grow, 1 );
  42. buffer_load_ext( buffer, file, 0 );
  43. buffer_seek( buffer, buffer_seek_start, 0 );
  44.  
  45. //width and height of the spreadsheet
  46. var sheetWidth = 0;
  47. var sheetHeight = 1;
  48.  
  49. var prevVal = 0;
  50. var nextVal = 0;
  51. var val = 0;
  52. var str = "";
  53. var inText = false;
  54. var grid = noone;
  55.  
  56. var size = buffer_get_size( buffer );
  57. for( var i = 0; i < size; i++ ) {
  58.    
  59.     prevVal = val;
  60.     var val = buffer_read( buffer, buffer_u8 );
  61.    
  62.     if ( val == 13 ) continue;
  63.    
  64.     if ( val == textDelimiterOrd ) {
  65.        
  66.         var nextVal = buffer_peek( buffer, buffer_tell( buffer ), buffer_u8 );
  67.        
  68.         if ( inText ) {
  69.             if ( nextVal == textDelimiterOrd ) continue;
  70.             if ( prevVal == textDelimiterOrd ) {
  71.                 str += textDelimiter;
  72.                 continue;
  73.             }
  74.         }
  75.        
  76.         inText = !inText;
  77.         continue;
  78.        
  79.     }
  80.    
  81.     if ( inText ) and ( ( prevVal == 13 ) and ( val == 10 ) ) {  
  82.         str += "#";
  83.         continue;
  84.     }
  85.    
  86.     if ( ( val == cellDelimiterOrd ) or ( ( prevVal == 13 ) and ( val == 10 ) ) ) and ( !inText ) {
  87.        
  88.         sheetWidth++;
  89.         if ( grid == noone ) {
  90.             grid = ds_grid_create( max( 1, sheetWidth ), max( 1, sheetHeight ) );
  91.             ds_grid_clear( grid, "" );
  92.         } else ds_grid_resize( grid, max( sheetWidth, ds_grid_width( grid ) ), sheetHeight );
  93.        
  94.         ds_grid_set( grid, sheetWidth - 1, sheetHeight - 1, str );
  95.         str = "";
  96.         inText = false;
  97.        
  98.         if ( val == 10 ) {
  99.             sheetWidth = 0;
  100.             sheetHeight++;
  101.         }
  102.        
  103.         continue;
  104.     }
  105.    
  106.     str += chr( val );
  107.    
  108. }
  109.  
  110. buffer_delete( buffer );
  111.  
  112. sheetWidth = ds_grid_width( grid );
  113. sheetHeight = ds_grid_height( grid );
  114. for( var yy = 0; yy < sheetHeight; yy++ ) {
  115.     for( var xx = 0; xx < sheetWidth; xx++ ) {
  116.         var val = ds_grid_get( grid, xx, yy );
  117.         if ( !is_string( val ) ) ds_grid_set( grid, xx, yy, "" );
  118.     }
  119. }
  120.  
  121. //return the grid
  122. return grid;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement