Publicado el :
Macro CREATION_INTERNE

Extraer el nombre de archivo y la ruta de una ruta absoluta

Este código también está disponible en: Français Deutsch English Español
Este macroprograma SAS©, `_getAbsPathComponents`, toma como entrada una ruta de archivo absoluta (usando '/' como separador). Identifica la posición del último separador '/' para aislar el nombre del archivo del resto de la ruta. Se crean dos variables macro de salida: una que contiene el nombre del archivo y la otra que contiene la ruta del directorio padre. El código gestiona los casos en que la ruta no contiene un separador, considerándolo entonces completamente como un nombre de archivo.
Análisis de datos

Type : CREATION_INTERNE


El macroprograma no lee ningún dato tabular. Opera exclusivamente sobre la cadena de caracteres proporcionada como parámetro de entrada (`i_absPath`) para extraer sus componentes.

1 Bloque de código
Macro
Explicación :
Este bloque define la macro `_getAbsPathComponents`. Primero inicializa las variables macro de salida. Verifica si la cadena de entrada `i_absPath` no está vacía. Si contiene un separador '/', usa `countw` y `scan` para encontrar el último elemento (el nombre del archivo) y `findw` para su posición inicial. Luego se usa la función `substr` para extraer la ruta y el nombre del archivo. Si no se encuentra ningún separador, la cadena completa se considera el nombre del archivo.
¡Copiado!
1%MACRO _getAbsPathComponents (i_absPath =
2 ,o_fileName =
3 ,o_pathWithoutName =
4 );
5 
6 %LOCAL l_pathElementCount;
7 %LOCAL l_fileNameStartPos;
8 
9 %LET &o_fileName=;
10 %LET &o_pathWithoutName=;
11 
12 %IF "%sysfunc(compress(&i_absPath))" NE "" %THEN %DO; /*if not empty input string*/
13 %IF %sysfunc(index(&i_absPath.,/)) GT 0 %THEN %DO; /*input string contains dir separators*/
14 %LET l_pathElementCount=%sysfunc(countw(&i_absPath.,/));
15 %LET l_fileNameStartPos=%sysfunc(findw(&i_absPath.,%scan(&i_absPath,&l_pathElementCount,/)));
16 %LET &o_pathWithoutName=%sysfunc(substr(&i_absPath.,1,%EVAL(&l_fileNameStartPos. - 2)));
17 %LET &o_fileName = %sysfunc(substr(&i_absPath.,&l_fileNameStartPos.));
18 %END; /*IF %sysfunc(index(&i_absPath.,'/')) GT 0*/
19 %ELSE %DO; /*input string is a filename only*/
20 %LET &o_fileName = &i_absPath;
21 %END;
22 %END; /*IF "%sysfunc(compress(&i_absPath))" NE ""*/
23
24%MEND _getAbsPathComponents;
Este material se proporciona "tal cual" por We Are Cas. No hay garantías, expresas o implícitas, en cuanto a la comerciabilidad o idoneidad para un propósito particular con respecto a los materiales o el código contenidos en este documento. We Are Cas no es responsable de los errores en este material tal como existe ahora o existirá, ni We Are Cas proporciona soporte técnico para el mismo.
Información de copyright : Copyright 2010-2023 HMS Analytical Software GmbH, http://www.analytical-software.de. This file is part of SASUnit, the Unit testing framework for SAS(R) programs.