Neue Spalten aus Daten in einer vorhandenen erstellenIch habe einen großen Datensatz mit einer der Datenspalten, die Zellen mit dem folgenden Format enthalten. Gibt es eine Möglichkeit, die verschiedenen 'AppNames' in 3 separate Spalten zu unterteilen? Ich habe die Funktion "Text in Spalten" in den Dienstprogrammen ausprobiert, aber nicht in allen Zellen der Spalte ist mehr als ein Anwendungsname aufgeführt, oder es sind geringfügig andere Informationen enthalten. Dadurch wird die Ausrichtung aufgehoben, und in meinen neuen Spalten werden falsche Werte angezeigt … Kann ich im Idealfall den String 'AppName:' als 'Begrenzer' verwenden? Aus dem folgenden Beispiel ... sollte ich drei neue Spalten erhalten - mit Daten, die sich auf Anwendung1, Anwendung2 und Anwendung3 beziehen ... Vielen Dank
Format
TX: AppID: 32734, TX: Anwendungsname: Anwendung1 , tx: ServerEnv: Development, tx: ServerStatus: Deployed, tx: OwningVP: xxxxxxxxx, tx: DevMgr: xxxxxxxxx, tx: OwningDirector: xxxxxxxxx, tx: AppOwner: xxxxxxxxx, tx: BusinessOwner: xxxxxxxxx : PCI: Nein, tx: L5_MGR: xxxxxxxxx, tx: DataClass: Interne Verwendung, tx: DRClass: Klasse I, tx: AppType: IT-unterstützt, tx: OrgL2: TSO, tx: OrgL4: TMX, tx: OrgL4: Mobile und VC, tx: AppID: 655369, tx: Anwendungsname: Anwendung2 , tx: OwningVP: xxxxxxxx, tx: DevMgr: xxxxxxxx, tx: OwningDirector: xxxxxxxx, tx: AppOwner: xxxxxxxx, tx: BusinessOwner: xxxxxxxx, tx: SOX: KFS Tier 2, tx: KBA Tier 1, tx: DataClass Eingeschränkt, tx: OrgL2: CBS, tx: OrgL3 :, tx: tx: AppID: 655364, tx: Anwendungsname: Anwendung3
Betreff: Neue Spalten aus Daten in einer vorhandenen erstellenIch habe Ihr Problem etwas anders angegangen. Beim Betrachten Ihrer Daten wurde mir klar, dass Sie viele verschiedene Spalten haben, wobei die Zeilen die Anwendungen sind. Also habe ich ein kleines Skript geschrieben, das all das aufschlüsselt. Jetzt ist das Problem, es gibt Fehler in den Daten. Daher habe ich einen Bereich im Code hinzugefügt, der versucht, diese zu beheben. Ich bin mir sicher, dass Sie nicht alle Ihre Daten haben und dass möglicherweise weitere Korrekturen vorgenommen werden müssen. Sobald diese Daten eingegangen sind, können Sie die Daten problemlos in die drei Spalten transponieren, wenn die Daten weiterhin in drei Spalten angeordnet werden sollen.
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#++;
);
Betreff: Neue Spalten aus Daten in einer vorhandenen erstellenVielen Dank, Jim. Ich denke, ich versuche, die 'AppName'-Daten aus der Spalte' Asset Tag 'herauszunehmen und sie in neue Spalten zu übertragen (Anwendung Nr. 1, Nr. 2, Nr. 3). Siehe Screenshot unten.
(AppName: Exchange 2013 (350578) aus Asset-Tags in Zeile 1 unten)
Einige der Zeilen in der Spalte "Asset Tags" enthalten mehr als einen AppName. Leider sind sie nicht einheitlich, siehe Beispiele unten:
Beispiel 1 Format (1 AppName)
tx: AppID: 350578, tx: Anwendungsname: Exchange 2013 (350578), tx: ServerEnv: Production, tx: ServerStatus: In Wartung, tx: OwningVP: xxxxxxxxx, tx: DevMgr: xxxxxxxxx, tx: OwningDirector: xxxxxxxxx, tx: AppOwner: xxxxxxxxx, tx: BusinessOwner: xxxxxxxxx, tx: BusinessOwner: x : PCI: Nein, tx: L5_MGR: xxxxxxxxx, tx: EMEABanking: KBA Tier 2, tx: DataClass: Stark eingeschränkt, tx: DRClass: Klasse I, tx: AppType: IT-unterstützt, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Messaging und Inhaltsverwaltung
Beispiel 2 Format (3 AppNames)
TX: AppID: 32734, TX: Anwendungsname: CITRIX (32734) , tx: ServerEnv: Development, tx: ServerStatus: Deployed, tx: OwningVP: XXXXXXXXX, tx: DevMgr: XXXXXXXXX, tx: OwningDirector: XXXXXXXXX, tx: AppOwner: XXXXXXXXX, tx: BusinessOwner: XXXXXXXXX, tx: BusinessOwner: XX : PCI: Nein, tx: L5_MGR: XXXXXXXXX, tx: EMEABanking: KBA Tier 2, tx: DataClass: Interne Verwendung, tx: DRClass: Klasse I, tx: AppType: IT-unterstützt, tx: OrgL2: TSO, tx: OrgL3: TMX, tx: OrgL4: Mobil und VC, tx: AppID: 655369, tx: AppName: EBOSS EMEA (655369) , tx: OwningVP: XXXXXXXXX, tx: DevMgr: XXXXXXXXX, tx: OwningDirector: XXXXXXXXX, tx: AppOwner: XXXXXXXXX, tx: BusinessOwner: XXXXXXX, tx: SOX: KFS Tier 2, tx: L5_MGR: XXA Tier 1, TX: DataClass: Restricted, TX: OrgL2: CBS, TX: OrgL3: Dell Financial SVCS, TX: OrgL4: DFS Originations and Lease Servicing, TX: AppID: 655364, TX: AppName: TVALUE (655364)
Beispiel 3 Format (1 AppName, aber anderes Format)
ext: AppName: Spannung , ext: PCI: N, ext: OrgL3: TMX, ext: L5_Mgr: xxxxxxxxx, ext: Owning_Director: xxxxxxxxx, ext: App_Owner: xxxxxxxxx, ext: Owning_Group: Messaging und Content Mgmt, Dell-External, External, High, Prohibited_Services, DC-Scan - Extern, TX: AppID: 2812, TX: AppName: Exchange 2010, TX: ServerEnv: Production, TX: ServerStatus: Deployed, TX: OwningVP: xxxxxxxxx, TX: DevMgr: xxxxxxxxx, TX: OwningDirector: xxxxxxxxx, TX: App-Inhaber: xxxxxxxxx, tx: Business-Inhaber: xxxxxxxxx, tx: SOX: Nein, tx: PCI: Nein, tx: L5_MGR: xxxxxxxxx, tx: EMEABanking: Nein, tx: DataClass: Highly Restricted, tx: DRClass: Class I, tx: AppType: IT unterstützt, TX: ORGL2: TSO, TX: ORGL3: TMX, TX: ORGL4: Messaging und Content Mgmt
Hinweis: Die folgende Spalte der Anwendung Nr. 1 wurde mit der Funktion "In Spalte konvertieren" unter "Spalte> Dienstprogramme" erstellt.
Ich bin mir nicht sicher, ob ich das gut erkläre ;-(

Betreff: Neue Spalten aus Daten in einer vorhandenen erstellenIch glaube, dieser Code wird tun, was Sie wollen. Im Anhang finden Sie eine Datentabelle mit den 3 Zeilen der von Ihnen bereitgestellten Beispiele. Das folgende Skript behandelt die Extraktionen mehrerer Anwendungen
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#++;
);
);
Betreff: Neue Spalten aus Daten in einer vorhandenen erstellenHier ist ein etwas anderer Ansatz, der das Hinzufügen der Werte zur Tabelle einschließt. Ich habe eine Parsing-Funktion am oberen Rand des Codes, die ähnlich ist Wörter , aber die Begrenzer können aus mehreren Zeichen bestehen.
//------------------------------------------------------------------------------
/*
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];
);
);