Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hej all,
with regards to this post (thanks again @AfeefaTk ), i am running into some difficulties, when trying to parse the same text (same file actually) when i fetch it from a s3 bucket (vs from gitlab).
To sum up, here is what i am after:
trace start tab: about;
	// 	#############################################################################################################################
	//	
	//	Some Comments...
	//	
	// 	#############################################################################################################################
trace end tab: about;
trace start tab: execute;
	// 	#############################################################################################################################
	//	
	//	Some Comments...
	//	
	// 	#############################################################################################################################
	//=========================================================================================
	Trace  ********* started: MOD_Table_1.qvs 
    //=========================================================================================
	$(Must_Include=$(vModulesRoot)03_REVENUE\MOD_Table_1.qvs);
	call  StoreIntoSDL ('MOD', 'Table_1', '03_REVENUE', 'Table_1');
	call 	CreateMetaData ('Table_1', 'GEN_MOD_Table_1.qvs', 'MOD_Table_1.qvs', '03_REVENUE');
	
	
	
  	//=========================================================================================
	Trace  ********* started: MOD_Table_2.qvs 
    //=========================================================================================
	$(Must_Include=$(vModulesRoot)03_REVENUE\MOD_Table_2.qvs);
	call StoreIntoSDL ('MOD', 'Table_2', '03_REVENUE', 'Table_2');
	call CreateMetaData ('Table_2', 'GEN_MOD_Table_1.qvs', 'MOD_Table_2.qvs', '03_REVENUE');
	
	
trace end tab: execute;
The important pieces are the includes and the StoreToSDL function. A given file can contain n occurances of includes and StoreToSDLs.
$gen = $inputs['gen'];
// Extract include statements
$include_statements = array();
preg_match_all('/Must_Include=\$\(vModulesRoot\)([^\)]+)/', $gen, $matches);
foreach ($matches[1] as $match) {
    $include_statements[] = $match;
}
// Extract StoreIntoSDL lines following include statements
$store_into_sdl = array();
preg_match_all('/call StoreIntoSDL \((.+?)\);/', $gen, $matches);
foreach ($matches[0] as $match) {
    $store_into_sdl[] = $match;
}
// Combine include statements and StoreIntoSDL lines into a JSON object
$json_array = array();
for ($i = 0; $i < count($include_statements); $i++) {
    $json_array[] = array(
        'include' => $include_statements[$i],
        'store_into_sdl' => $store_into_sdl[$i]
    );
}
// Convert JSON object to JSON string
echo json_encode($json_array);
This worked fine, when the file came from gitlab and i decoded64 its content. However, when the file is coming from a s3 bucket, my automation failes wit the following error:
Fatal error: Uncaught TypeError: preg_match_all(): Argument #2 ($subject) must be of type string, array given in /tmp/code:5
Stack trace:
#0 /tmp/code(5): preg_match_all('/Must_Include=\\...', Array, NULL)
#1 {main}
  thrown in /tmp/code on line 5The expected outcome (and maybe this can be achieved by going a different path...like not using custom code ?) is that, while iterating through the file, i am getting the following output:
1st iteration:
vMod = 03_TRANSFORM/03_REVENUE/MOD_Table_1.qvs
vStore = call StoreIntoSDL ('MOD', 'Table_1', '03_REVENUE', 'Table_1');
2nd iteration
vMod = 03_TRANSFORM/03_REVENUE/MOD_Table_2.qvs
vStore = call StoreIntoSDL ('MOD', 'Table_2', '03_REVENUE', 'Table_2');
and so on...
I have out together a sample automation, just to get the idea. (For some reason, it runs into an error, but you should get the idea of what i am after)
I appreciate every hint and help! Thanks in advance!
I got it to work mysel using the following custom code:
$gen = $inputs['gen'];
// Extract include statements
// Initialize arrays to store include statements and StoreIntoSDL lines
$include_statements = array();
$store_into_sdl = array();
// Extract include statements and StoreIntoSDL lines
preg_match_all('/Must_Include=\$\(vModulesRoot\)([^;]+);/', $gen, $include_matches);
preg_match_all('/call\s+StoreIntoSDL\s+\((.*?)\);/', $gen, $sdl_matches);
// Process each match
foreach ($include_matches[1] as $include_match) {
    $include_statements[] = trim($include_match);
}
foreach ($sdl_matches[1] as $sdl_match) {
    $store_into_sdl[] = trim($sdl_match);
}
// Create an array to store the results
$json_array = array();
// Combine include statements and StoreIntoSDL lines into a JSON object
for ($i = 0; $i < count($include_statements); $i++) {
    $include_statement = str_replace('\\', '/', $include_statements[$i]);
    $store_into_sdl_line = "call StoreIntoSDL ({$store_into_sdl[$i]});";
    
    $json_array[] = array(
        'include' => $include_statement,
        'store_into_sdl' => $store_into_sdl_line
    );
}
// Convert JSON object to JSON string
echo json_encode($json_array);
					
				
			
			
				
			
			
			
				
			
			
			
			
			
		I got it to work mysel using the following custom code:
$gen = $inputs['gen'];
// Extract include statements
// Initialize arrays to store include statements and StoreIntoSDL lines
$include_statements = array();
$store_into_sdl = array();
// Extract include statements and StoreIntoSDL lines
preg_match_all('/Must_Include=\$\(vModulesRoot\)([^;]+);/', $gen, $include_matches);
preg_match_all('/call\s+StoreIntoSDL\s+\((.*?)\);/', $gen, $sdl_matches);
// Process each match
foreach ($include_matches[1] as $include_match) {
    $include_statements[] = trim($include_match);
}
foreach ($sdl_matches[1] as $sdl_match) {
    $store_into_sdl[] = trim($sdl_match);
}
// Create an array to store the results
$json_array = array();
// Combine include statements and StoreIntoSDL lines into a JSON object
for ($i = 0; $i < count($include_statements); $i++) {
    $include_statement = str_replace('\\', '/', $include_statements[$i]);
    $store_into_sdl_line = "call StoreIntoSDL ({$store_into_sdl[$i]});";
    
    $json_array[] = array(
        'include' => $include_statement,
        'store_into_sdl' => $store_into_sdl_line
    );
}
// Convert JSON object to JSON string
echo json_encode($json_array);