Hacer nuevas columnas a partir de datos en una existenteTengo un gran conjunto de datos con una de las columnas de datos que contienen celdas con el siguiente formato. ¿Hay alguna manera de extraer los diferentes 'AppNames' en 3 columnas separadas? He probado la función Texto a columnas en Utilidades, pero no todas las celdas de la columna tienen más de un nombre de aplicación en la lista o pueden incluir información ligeramente diferente y eso arroja la alineación y termino obteniendo valores incorrectos en mis nuevas columnas … Idealmente, ¿puedo usar la cadena 'AppName:' como 'delimitador'? Entonces, a partir del ejemplo a continuación ... Debo terminar con tres nuevas columnas, con datos que se refieren a Aplicación1, Aplicación2 y Aplicación3 ... gracias
Formato
tx: ID de aplicación: 32734, tx: AppName: Application1 , tx: ServerEnv: Development, tx: ServerStatus: Deployed, tx: OwningVP: xxxxxxxxx, tx: DevMgr: xxxxxxxxx, tx: OwningDirector: xxxxxxxxx, tx: AppOwner: xxxxxxxxx, tx: BusinessOwner: xxxxxxxxx, tx: SOX: No, tx: : PCI: No, tx: L5_MGR: xxxxxxxxx, tx: DataClass: uso interno, tx: DRClass: Class I, tx: AppType: IT Supported, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Mobile y VC, tx: ID de aplicación: 655369, tx: AppName: Application2 , tx: OwningVP: xxxxxxxx, tx: DevMgr: xxxxxxxx, tx: OwningDirector: xxxxxxxx, tx: AppOwner: xxxxxxxx, tx: BusinessOwner: xxxxxxxxx, tx: SOX: KFS Tier 2, tx :: KBA Tier 1, tx: DataClass: Restringido, tx: OrgL2: CBS, tx: OrgL3 :, tx: tx: ID de aplicación: 655364, tx: AppName: Application3
Re: Hacer nuevas columnas a partir de datos en una existenteTomé un enfoque un poco diferente a su problema. Al mirar sus datos, me di cuenta de que lo que tiene son muchas columnas diferentes, siendo las filas las aplicaciones. Así que he escrito un pequeño guión que explica todo esto. Ahora el problema es que hay errores en los datos. Así que he agregado un área dentro del código que intenta solucionarlos. Al no tener todos sus datos, estoy seguro de que es posible que se necesiten más correcciones. Una vez que ingresan estos datos, si aún desea que sus datos se alineen en 3 columnas, puede hacer fácilmente una transposición de los datos en las 3 columnas.
Names Default To Here( 1 );
theData =
"tx:AppID:32734, tx:AppName:Application1, tx:ServerEnv:Development, tx:ServerStatus:Deployed, tx:OwningVP:xxxxxxxxx, tx:DevMgr:xxxxxxxxx, tx:OwningDirector:xxxxxxxxx, tx:AppOwner:xxxxxxxxx, tx:BusinessOwner:xxxxxxxxx, tx:SOX:No, tx:PCI:No, tx:L5_MGR:xxxxxxxxx, tx:DataClass:Internal Use, tx:DRClass:Class I, tx:AppType:IT Supported, tx:OrgL2:TSO, tx:OrgL3:TMX, tx:OrgL4:Mobile and VC, tx:AppID:655369, tx:AppName:Application2, tx:OwningVP:xxxxxxxx, tx:DevMgr:xxxxxxxx, tx:OwningDirector:xxxxxxxx, tx:AppOwner:xxxxxxxx, tx:BusinessOwner:xxxxxxxxx, tx:SOX:KFS Tier 2, tx::KBA Tier 1, tx:DataClass:Restricted, tx:OrgL2:CBS, tx:OrgL3:, tx: tx:AppID:655364, tx:AppName:Application3";
dt = New Table( "The Table" );
dt << delete columns( "Column 1" );
word# = 1;
While( Word( word#, theData, "," ) != "",
colNameList = dt << get column names( string );
theWord = trim(Word( word#, theData, "," ));
// Make found corrections
If( Trim( Word( 2, theWord, ":" ) ) == "tx",
theword = Word( 2, theword, ":" ) || ":" || Word( 3, theWord, ":" ) || ":" || Word( 4, theWord, ":" )
);
If( word( 1, theWord, ":") == "", theWord = "tx" || theWord );
if( word( 2, theWord, ":") == "",
theword = Word( 1, theword, ":" ) || ":" || word(1,Word( 3, theWord, " " )," ") || ":" ||
substr(Word( 3, theWord, ":" ),length(Word( 3, theWord, ":" ))+2);
);
if( word( 3, theWord, ":") == "",
theword = Word( 1, theword, ":" ) || ":" || word(1,Word( 2, theWord, ":" )," ") || ":" ||
substr(Word( 2, theWord, ":" ),length(Word( 1, Word( 2, theWord, ":" ), " " ))+2);
);
if(word(2,theword,":")=="KBA",show(theword));
colName = Word( 2, theWord, ":" );
If( Word( 2, theWord, ":" ) == "AppID",
dt << Add Rows( 1 );
);
If( N Rows( Loc( colNameList, colName ) ) == 0,
dt << New Column( colName, character );
);
Column( dt, colName )[N Rows( dt )] = Word( 3, theWord, ":" );
word#++;
);
Re: Hacer nuevas columnas a partir de datos en una existenteGracias Jim ... Supongo que lo que estoy tratando de hacer es extraer los datos de 'AppName' de la columna 'Asset Tag' y llevarlos a nuevas columnas (Aplicación # 1, # 2, # 3). Ver captura de pantalla a continuación.
(AppName: Exchange 2013 (350578) de las etiquetas de activos en la fila 1 a continuación)
Algunas de las filas en la columna 'Etiquetas de activos' tienen más de un nombre de aplicación incluido y, desafortunadamente, no son uniformes, vea los ejemplos a continuación:
Formato del ejemplo 1 (1 AppName)
tx: ID de aplicación: 350578, tx: Nombre de la aplicación: Exchange 2013 (350578), tx: ServerEnv: Production, tx: ServerStatus: En mantenimiento, tx: OwningVP: xxxxxxxxx, tx: DevMgr: xxxxxxxxx, tx: OwningDirector: xxxxxxxxx, tx: AppOwner: xxxxxxxxx, tx: BusinessOwner: xxxxxxxxx, tx: SOX: No, tx : PCI: No, tx: L5_MGR: xxxxxxxxx, tx: EMEABanking: KBA Tier 2, tx: DataClass: High Restricted, tx: DRClass: Class I, tx: AppType: IT Supported, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Gestión de mensajes y contenido
Formato del ejemplo 2 (3 AppNames)
tx: ID de aplicación: 32734, tx: Nombre de la aplicación: CITRIX (32734) , tx: ServerEnv: Development, tx: ServerStatus: Deployed, tx: OwningVP: XXXXXXXXX, tx: DevMgr: XXXXXXXXX, tx: OwningDirector: XXXXXXXXX, tx: AppOwner: XXXXXXXXX, tx: BusinessOwner: XXXXXXXXX, tx: SOX: No, tx: : PCI: No, tx: L5_MGR: XXXXXXXXX, tx: EMEABanking: KBA Tier 2, tx: DataClass: Internal Use, tx: DRClass: Class I, tx: AppType: IT Supported, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Mobile y VC, tx: AppID: 655369, tx: Nombre de la aplicación: EBOSS EMEA (655369) , tx: OwningVP: XXXXXXXXX, tx: DevMgr: XXXXXXXXX, tx: OwningDirector: XXXXXXXXX, tx: AppOwner: XXXXXXXXX, tx: BusinessOwner: XXXXXXXXX, tx: SOX: KFS Tier 2, tx: L5_MGR: XXXXXXXXX, tx: EMBAABan Nivel 1, tx: DataClass: Restricted, tx: OrgL2: CBS, tx: OrgL3: Dell Financial SVCS, tx: OrgL4: DFS Originations and Lease Servicing, tx: AppID: 655364, tx: Nombre de la aplicación: TVALUE (655364)
Formato del ejemplo 3 (1 AppName, pero diferente formato)
ext: Nombre de la aplicación: voltaje , ext: PCI: N, ext: OrgL3: TMX, ext: L5_Mgr: xxxxxxxxx, ext: Owning_Director: xxxxxxxxx, ext: App_Owner: xxxxxxxxx, ext: Owning_Group: Messaging and Content Mgmt, Dell-External, External, External, High, Prohibited_Services, DC Scan - Externo, tx: ID de aplicación: 2812, tx: Nombre de aplicación: Exchange 2010, tx: ServerEnv: Producción, tx: Estado del servidor: Implementado, tx: OwningVP: xxxxxxxxx, tx: DevMgr: xxxxxxxxx, tx: OwningDirector: xxxxxxxxx, tx: AppOwner: xxxxxxxxx, tx: BusinessOwner: xxxxxxxxx, tx: SOX: No, tx: PCI: No, tx: L5_MGR: xxxxxxxxx, tx: EMEABanking: No, tx: DataClass: Altamente restringido, tx: DRClass: Clase I, tx: Tipo de aplicación: compatible con TI, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Gestión de mensajes y contenido
Nota: La columna de la aplicación n. ° 1 a continuación se creó utilizando la función Texto a columna en Col> Utilidades ...
No estoy seguro si explicar esto bien ;-(

Re: Hacer nuevas columnas a partir de datos en una existenteCreo que este código hará lo que quieras. Se adjunta una tabla de datos, con las 3 filas de los ejemplos que proporcionó. El siguiente script maneja las extracciones de múltiples aplicaciones
Names Default To Here( 1 );
dt = Current Data Table();
dt << New Column( "Application #1", character );
dt << New Column( "Application #2", character );
dt << New Column( "Application #3", character );
For( theRow = 1, theRow <= N Rows( dt ), theRow++,
word# = 1;
appName# = 1;
While( Word( word#, :Asset Tags[theRow], "," ) != "",
theWord = Trim( Word( word#, :Asset Tags[theRow], "," ) );
If( Word( 2, theWord, ":" ) == "AppName",
Column( dt, "Application #" || Char( appName# ) )[theRow] = Word( 3, theWord, ":" );
appName#++;
);
word#++;
);
);
Re: Hacer nuevas columnas a partir de datos en una existenteAquí hay un enfoque ligeramente diferente que incluye agregar los valores a la tabla. Tengo una función de análisis en la parte superior del código que es similar a palabras , pero los delimitadores pueden ser de varios caracteres.
//------------------------------------------------------------------------------
/*
Function Name: my_parse
Description: Parse text according to a given delimiter. Two delimiters in a row
will yield an empty list entry, which is different from the behavior
of WORDS
Returns: list of tokens
Arguments:
_text Text to determine be parsed
_delim Delimiter
*/
my_parse = function({_text, _delim},
{Default Local},
pname = "get_words";
if (is missing(_text),
// then
ret_list = {};
,
// else if
_text == "",
ret_list = {};
,
// else we've got some text to work with
ret_list = {};
len_delim = length(_delim);
istart = 1;
keep_going = 1;
while (keep_going,
iend = contains(_text, _delim, istart);
if (!iend,
keep_going = 0;
insertinto(ret_list, substr(_text, istart), 1);
,
insertinto(ret_list, substr(_text, istart, (iend - istart)), 1);
istart = iend + len_delim;
);
);
);
reverse(ret_list);
); // end my_parse
//------------------------------------------------------------------------------
dt = current data table();
dt << new column("Application #1", character);
dt << new column("Application #2", character);
dt << new column("Application #3", character);
for(i = 1, i <= nrows(dt), i++,
one_asset = dt:asset tags[i];
one_list = my_parse(one_asset, ", ");
app_list = {};
m = 0;
for (k = 1, k <= nitems(one_list), k++,
one_item = one_list[k];
aloc = contains(one_item, "AppName:");
if (aloc,
m++;
app_list[m] = substr(one_item, 8 + aloc);
);
);
show(app_list);
// Now add these to the respective Application # columns
for (k = 1, k <= nitems(app_list), k++,
cname = "Application #" || char(k);
column(dt, cname)[i] = app_list[k];
);
);