Analysieren Sie die Zeichenfolge einer Spalte und füllen Sie eine andere SpalteHallo,
Ich habe eine Tabelle mit ProductName und möchte die OUTPUT-Spalte generieren.Die OUTPUT-Spalte ist eine Verkettung von ProductID und Serial#. Wie analysiere ich die Seriennummer genau und erstelle die OUTPUT-Spalte?
Beispiele für Seriennummern:
- 07-08_13 bedeutet Seriennummer 07, 08, 13
- 09-12 bedeutet Seriennummer 09, 10, 11, 12
- 01-03_05-08 bedeutet Seriennummer 01, 02, 03, 05, 06, 07, 08
- 01_04_05-08 bedeutet Seriennummer 01, 04, 05, 06, 07, 08
- 09_11_13_14 bedeutet Seriennummer 09,11,13,14

| Produktname | AUSGABE |
| AABBCC_07-08_13 | AABBCC-07 |
| AABBCC_07-08_13 | AABBCC-08 |
| AABBCC_07-08_13 | AABBCC-13 |
| AABBCC_09-12 | AABBCC-09 |
| AABBCC_09-12 | AABBCC-10 |
| AABBCC_09-12 | AABBCC-11 |
| AABBCC_09-12 | AABBCC-12 |
| EEFFGG_02 | EEFFGG-02 |
| HHIIJJ_01-07 | HHIIJJ-01 |
| HHIIJJ_01-07 | HHIIJJ-02 |
| HHIIJJ_01-07 | HHIIJJ-03 |
| HHIIJJ_01-07 | HHIIJJ-04 |
| HHIIJJ_01-07 | HHIIJJ-05 |
| HHIIJJ_01-07 | HHIIJJ-06 |
| HHIIJJ_01-07 | HHIIJJ-07 |
| KKLLLMM_01-03_05-08 | KKLLLMM-01 |
| KKLLLMM_01-03_05-08 | KKLLLMM-02 |
| KKLLLMM_01-03_05-08 | KKLLLMM-03 |
| KKLLLMM_01-03_05-08 | KKLLLMM-05 |
| KKLLLMM_01-03_05-08 | KKLLLMM-06 |
| KKLLLMM_01-03_05-08 | KKLLLMM-07 |
| KKLLLMM_01-03_05-08 | KKLLLMM-08 |
| NNOOPP_01_04_05-08 | NNOOPP-01 |
| NNOOPP_01_04_05-08 | NNOOPP-04 |
| NNOOPP_01_04_05-08 | NNOOPP-05 |
| NNOOPP_01_04_05-08 | NNOOPP-06 |
| NNOOPP_01_04_05-08 | NNOOPP-07 |
| NNOOPP_01_04_05-08 | NNOOPP-08 |
| QQRRSS_09_11_13_14 | QQRRSS_09 |
| QQRRSS_09_11_13_14 | QQRRSS_11 |
| QQRRSS_09_11_13_14 | QQRRSS_13 |
| QQRRSS_09_11_13_14 | QQRRSS_14 |
Erweiterte statistische ModellierungMassenanpassungBetreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenJa, das können Sie, aber Sie müssen die Logik ausarbeiten, wann neue Zeilen usw. hinzugefügt werden sollen.Ich schlage vor, dass Sie den Code so ausführen, wie er ist, und ihn dann verwenden
Tabellen=>Verbinden
um die beiden Datentabellen zusammenzufügen.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo Jim,
Kann es so gemacht werden, dass es kein dt2 gibt? Können Sie die Spalten ProductID und Output in dt hinzufügen?
Danke!
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenDa die Daten manuell eingegeben werden, werden höchstwahrscheinlich nicht alle Sonderfälle behandelt, es scheint jedoch für aktuelle Werte zu funktionieren:
Names Default To Here(1);
//Test table
/*
dt = New Table("Untitled 4993",
Compress File When Saved(1),
New Column("ProductName",
Character,
"Nominal",
Set Values(
{"AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "EEFFGG_02",
"HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "KKLLLMM_01-03_05-08",
"KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08",
"NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08",
"QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "N4TA47_13-14-15-16-17-18", "N4TA59_13-19", "N4PX74-01-06"}
)
)
);
*/
dt = Current Data Table();
Summarize(dt, uniqProd = by(:ProductName));
newVals = Associative Array();
For Each({prodname_str}, uniqProd,
prodPart = Word(1, prodname_str, "_-");
serialPart = Substr(prodname_str, Length(prodPart) + 2);
//find and remove next range from serialPart
newVals[prodname_str] = {};
While(Length(serialPart) > 0 & serialPart != "_" & serialPart != "-",
nextRange = Regex(serialPart, "\d*-\d*");
If(IsMissing(nextRange),
break();
);
serialPart = Substitute(serialPart, nextRange, "");
If(Contains({"-", "_" }, Substr(serialPart, 1, 1)),
serialPart = Substr(serialPart, 2); //remove -_ if first character
);
nextRange = Words(nextRange, "-");
rangeVals = Index(Num(nextRange[1]), Num(nextRange[2]));
For Each({val}, rangeVals,
val = char(val);
val = Substr("00", Length(val) + 1) || val;
Insert Into(newVals[prodname_str], prodPart||"-"||val);
);
);
singleVals = Transform Each({val}, Words(serialPart, "_"),
val = char(val);
val = Substr("00", Length(val) + 1) || val;
prodPart||"-"||val;
);
Insert Into(newVals[prodname_str], singleVals);
);
vals = {{}, {}};
For Each({{key, value}}, newVals,
productname_list = Repeat({key}, N Items(value));
Insert Into(vals[1], productname_list);
Insert Into(vals[2], Sort List(value));
);
//add values to new table
dt = New Table("Productname",
New Column("ProductName", Character, "Nominal", Set Values({})),
New Column("OUTPUT", Character, "Nominal", Set Values({}))
);
dt:ProductName << Set Values(vals[1]);
dt:OUTPUT << Set Values(vals[2]);
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenEs gab nur einen kleinen Fehler, bei dem ein -1 nicht entfernt wurde, als ich meinen Code umstrukturierte.

Names Default To Here( 1 );
dt = Current Data Table();
dt2 = New Table( "The Output",
New Column( "Product Name", character ),
New Column( "ProductID", Character ),
New Column( "OUTPUT", Character )
);
For( dtRow = 1, dtRow <= N Rows( dt ), dtRow++,
If( dtRow == 1 | dt:ProductName[dtRow - 1] != dt:ProductName[dtRow],
prodID = Word( 1, dt:ProductName[dtRow], "_" );
remainder = Substr( dt:ProductName[dtRow], Length( prodID ) + 2 );
While( Word( 1, remainder, "_" ) != "",
theWord = Word( 1, remainder, "_" );
If( Contains( theWord, "-" ),
numDigets = Length( Word( 1, theWord, "-" ) ) - 1;
zeros = Repeat( "0", numDigets );
For( loop = Num( Word( 1, theWord, "-" ) ),
loop <= Num( Word( 2, theWord, "-" ) ), loop++,
dt2 << Add rows( 1 );
theRow = N Rows( dt2 );
dt2:ProductName[theRow] = dt:ProductName[dtRow];
dt2:ProductID[theRow] = Word( 1, dt:ProductName[dtRow], "_-" );
dt2:output[theRow] = dt2:ProductID[theRow] || "-" ||
Substr( zeros, Length( Char( loop ) ) ) || Char( loop );
);
,
dt2 << Add Rows( 1 );
theRow = N Rows( dt2 );
dt2:output[theRow] = prodID || "-" || Word( 1, theWord, "-" );
dt2:ProductName[theRow] = dt:ProductName[dtRow];
dt2:ProductID[theRow] = Word( 1, dt:ProductName[dtRow], "_-" );
);
remainder = Substr( remainder, Length( theWord ) + 2 );
);
)
);
Bitte nehmen Sie sich die Zeit, den Code zu studieren, damit Sie vollständig verstehen, wie er funktioniert.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenDanke Jim, aber die AUSGABE scheint falsch zu sein. In den ersten drei Zeilen sollte die Ausgabe beispielsweise wie folgt lauten:
AABBCC-07
AABBCC-08
AABBCC-13
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenDie ProductName-Daten werden manuell eingegeben. Dies sind Ausnahmen und werden sich mit der Zeit verbessern. Bitte ignorieren Sie sie.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHier ist ein Skript, das eine neue Tabelle erstellt, die die Zeilen wie gewünscht erweitert.Durch das Platzieren der Daten in einer neuen Tabelle wird das Problem umgangen, dass nicht genügend Zeilen für die Erweiterung vorhanden sind.Es scheint alle bekannten Muster zu verarbeiten.

Names Default To Here( 1 );
dt = Current Data Table();
dt2 = New Table( "The Output",
New Column( "Product Name", character ),
New Column( "ProductID", Character ),
New Column( "OUTPUT", Character )
);
For( dtRow = 1, dtRow <= N Rows( dt ), dtRow++,
If( dtRow == 1 | dt:ProductName[dtRow - 1] != dt:ProductName[dtRow],
prodID = Word( 1, dt:ProductName[dtRow], "_" );
remainder = Substr( dt:ProductName[dtRow], Length( prodID ) + 2 );
While( Word( 1, remainder, "_" ) != "",
theWord = Word( 1, remainder, "_" );
If( Contains( theWord, "-" ),
numDigets = Length( Word( 1, theWord, "-" ) ) - 1;
zeros = Repeat( "0", numDigets );
For( loop = Num( Word( 1, theWord, "-" ) ) + 1,
loop <= Num( Word( 2, theWord, "-" ) ), loop++,
dt2 << Add rows( 1 );
theRow = N Rows( dt2 );
dt2:ProductName[theRow] = dt:ProductName[dtRow];
dt2:ProductID[theRow] = Word( 1, dt:ProductName[dtRow], "_-" );
dt2:output[theRow] = dt2:ProductID[theRow] || "-" ||
Substr( zeros, Length( Char( loop ) ) ) || Char( loop );
);
,
dt2 << Add Rows( 1 );
theRow = N Rows( dt2 );
dt2:output[theRow] = prodID || "-" || Word( 1, theWord, "-" );
dt2:ProductName[theRow] = dt:ProductName[dtRow];
dt2:ProductID[theRow] = Word( 1, dt:ProductName[dtRow], "_-" );
);
remainder = Substr( remainder, Length( theWord ) + 2 );
);
)
);Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenÜberprüfen Sie schnell, ob drei verschiedene Probleme vorliegen:
1. Verstoß gegen die „Regel“, dass es immer so viele Produktnamen gibt, wie Serien sein sollten. N4TA59_13-19 in den Daten nur einmal, sollte 7 Mal sein
2. Seriennummernteil beginnt nicht mit _ (N4PX74 - 01-06)
3. Bereich beginnt nicht mit _ (N4TA47_13-14-15-16-17-18) oder es sollten nur einzelne Werte sein
All dies erfordert unterschiedliche Korrekturen. Liegen diese Datenqualitätsprobleme bei Ihren Daten vor oder sollte das Skript in der Lage sein, alle diese Probleme zu bewältigen?
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo jthi,
Ihr Skript funktioniert nicht, wenn mein Produktname eine Mischung aus Zeichen und Zahlen ist. Ich habe eine Tabelle angehängt. So wird der Großteil meines Produktnamens aussehen. Danke, dass du mir geholfen hast.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenWenn das der Fall ist, sollte es bereits damit umgehen können. Ich habe kleine Änderungen vorgenommen (Erstellung einer OUTPUT-Spalte, falls diese fehlt). Derzeit ist es darauf angewiesen, dass die Datentabelle nach Produktnamen sortiert ist, was irgendwann zu Problemen führen kann. Sie können aber auch sicherstellen, dass die Eingabetabelle sortiert ist (einfachste Lösung).
Sie sollten in der Lage sein, den For Each-Teil auch ohne Datentabelle zu verwenden, solange Sie eine Listenvariable mit dem Namen uniqProd haben, die ProductNames hat. Danach muss nur noch herausgefunden werden, wie man der Datentabelle Werte hinzufügt.
Names Default To Here(1);
//Test table
/*
dt = New Table("Untitled 4993",
Compress File When Saved(1),
New Column("ProductName",
Character,
"Nominal",
Set Values(
{"AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "EEFFGG_02",
"HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "KKLLLMM_01-03_05-08",
"KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08",
"NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08",
"QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14"}
)
)
);
*/
dt = Current Data Table();
Summarize(dt, uniqProd = by(:ProductName));
valList = {};
For Each({prod}, uniqProd, //loop for each ProductName
prodPart = Word(1, prod, "_");
serialPart = Substr(prod, Contains(prod, "_") + 1); //remove start
possibleRanges = Words(serialPart, "_"); //if they contain -
For Each({val}, possibleRanges, //Loop for serialnumber inside the ProductName
If(Contains(val, "-"), //range
rangeVals = Words(val, "-");
For Each({val1}, Index(Num(rangeVals[1]), Num(rangeVals[2])),
valToAdd = Substr("0", Length(Char(val1))) || Char(val1);
Insert Into(valList, prodPart || "-" || valToAdd)
);
,
Insert Into(valList, prodPart || "-" || Substr("0", Length(Char(val))) || Char(val))
)
);
);
//if starting table doesn't have OUTPUT column create it
If(!Contains(dt << Get Column Names("String"), "OUTPUT"),
dt << New Column("OUTPUT", Character, "Nominal");
);
//dt[0,"OUTPUT"] = valList; subscripting, maybe a bit more difficult to understand
dt:OUTPUT << Set Values(valList);
Vereinfachte Version dessen, was das Skript zu tun versucht:
1. Das Skript ruft alle eindeutigen Werte in der Spalte „ProductName“ ab
2. Das Skript durchläuft jede dieser Schleifen in zwei Teilen, For Each-Schleife
3. Die erste Schleife durchläuft die eindeutigen Werte und teilt sie in Produkt- und Zahlenteile auf
4. Der Seriennummernteil wird dann erneut in einer Schleife durchlaufen, um ihn in einzelne Werte aufzuteilen. Diese Einzelwerte werden mit dem Produktteil verkettet und dann wird die Zeichenfolge in die valList-Liste eingefügt (dies 4. ist nicht ganz so einfach, wie ich hier erklärt habe).
5. Nachdem beide Schleifen abgeschlossen sind, sollten Sie eine Liste haben, die alle möglichen Seriennummern enthält. Der Produktteil wird in alphabetischer Reihenfolge angezeigt.
6. Diese Liste wird dann, sofern vorhanden, zu OUTPUT hinzugefügt. Ist dies nicht der Fall, wird sie zunächst erstellt.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo jthi,
Ja, die Anzahl der Zeilen stimmte mit der Anzahl der Seriennummern überein.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenEs sollte ziemlich einfach sein. Verfügen die abgerufenen Daten über so viele Zeilen, wie Seriennummern vorhanden sind?
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo jthi,
Vielen Dank für das Skript, aber meine Tabelle ist tatsächlich dynamisch. Jeden Tag rufe ich diese Tabelle aus einer Datenbank mit einem anderen Datumsbereich auf und es werden unterschiedliche Sätze von Produktnamen angezeigt. Es sind also nicht immer 32 Zeilen. Ihr Skript kann fast funktionieren, aber können Sie die Array-Größe berücksichtigen? Danke.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo Chris,
Ich habe ein Skript, das einen Teil des Produktnamens anspricht und manchmal falsch analysiert. Können Sie Codes überprüfen und hinzufügen, um die bisher nicht funktionierenden Produktnamen zu beheben?
Funktioniert für die folgenden Beispiele:
EEFFGG_02
HHIIJJ_01-07
KKLLLMM_01-03_05-08
Funktioniert für die folgenden Beispiele noch nicht:
AABBCC_07-08_13
NNOOPP_01_04_05-08
QQRRSS_09_11_13_14
dt=current data table();
(dt << New Column( "ProductID", Character )) << Set Selected;
(dt << New Column( "OUTPUT", Character )) << Set Selected;
//Parse string in ProductName column
For Each Row(
dt,
//Assign the ProductID value
:ProductID = Word( 1, :ProductName, "_-" ); //"_"
//If the ProductName changes, capture the start and end
If( :ProductName != Lag( :ProductName, 1 ),
start = Num( Word( 2, :ProductName, "_-" ) );
end = Num( Word( 3, :ProductName, "_-" ) );
);
//Assign the OUTPUT value
:OUTPUT = :ProductID || "-" || Repeat( "0", 2 - Length( Char( start ) ) ) || Char( start );
//After end value & there is an _, set start to value after _
If( start == end & Contains( :ProductName, "_"),
start = Num( Word(-2, :ProductName, "_-" ) ),
start++);
);
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenOk, das könnte funktionieren. Erfordert JMP16 aufgrund der Verwendung von For Each (kann für andere Versionen durch For ersetzt werden). Hierbei handelt es sich um eine stark skriptgesteuerte Lösung mit wenigen oder keinen Kommentaren, für deren Funktion eine bestimmte Starttabelle erforderlich ist (Ausgangsspalte erforderlich).
Names Default To Here(1);
dt = New Table("Untitled 4993",
Add Rows(32),
Compress File When Saved(1),
New Column("ProductName",
Character,
"Nominal",
Set Values(
{"AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_07-08_13", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "AABBCC_09-12", "EEFFGG_02",
"HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "HHIIJJ_01-07", "KKLLLMM_01-03_05-08",
"KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08", "KKLLLMM_01-03_05-08",
"NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08", "NNOOPP_01_04_05-08",
"QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14", "QQRRSS_09_11_13_14"}
)
),
New Column("OUTPUT",
Character(16),
"Nominal",
Set Values({"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""})
)
);
Summarize(dt, uniqProd = by(:ProductName));
valList = {};
For Each({prod}, uniqProd,
prodPart = Word(1, prod, "_");
serialPart = Substr(prod, Contains(prod, "_") + 1); //remove start
possibleRanges = Words(serialPart, "_"); //if they contain -
For Each({val}, possibleRanges,
If(Contains(val, "-"), //range
rangeVals = Words(val, "-");
For Each({val1}, Index(Num(rangeVals[1]), Num(rangeVals[2])),
valToAdd = Substr("0", Length(Char(val1))) || Char(val1);
Insert Into(valList, prodPart || "-" || valToAdd)
);
,
Insert Into(valList, prodPart || "-" || Substr("0", Length(Char(val))) || Char(val))
)
);
);
dt[0,"OUTPUT"] = valList;Ich frage mich, ob so etwas mit JMPs eigenem Mustervergleich „einfach“ zu bewerkstelligen wäre @Craige_Hales
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenDanke, aber ich bevorzuge ein JSL anstelle des interaktiven Trennzeichens. Ihre Methode hat das Szenario nicht behoben, als die Seriennummer 09-12. Es sollten Zeilen wie unten ausgegeben werden. Nicht nur AABBCC-09 und AABBCC-12. Das „-“ bedeutet „bis“ und bedeutet Bereich. 09-12 bedeutet also 09, 10, 11, 12.
| AABBCC_09-12 | AABBCC-09 |
| AABBCC_09-12 | AABBCC-10 |
| AABBCC_09-12 | AABBCC-11 |
| AABBCC_09-12 | AABBCC-12 |
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenOh, du hast recht. das - wird als Bereich interpretiert und das _ wird als echtes Trennzeichen von Elementen interpretiert
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllen@jthi ,
Du warst schneller als ich. 
Ihre Erklärung ist detaillierter und auch das, woran ich gedacht habe.
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHallo @cchueng ,
Es gibt mehrere Möglichkeiten. Einige basieren auf Skripten (suchen Sie nach einer Antwort von jemandem, der dies mit einem Beispiel vorschlägt), oder Sie können aufeinanderfolgende Runden von Text zu Spalten verwenden (Beispiele finden Sie hier). Gelöst: Wie kann ich Text in einer Spalte in mehrere Spalten aufteilen? - JMP-Benutzergemeinschaft) Anschließend können Sie die gewünschten Spalten verketten, indem Sie sie auswählen und dann entweder eine Spaltenformel verwenden oder die Option „Neue Formelspalte“ verwenden, nachdem Sie mit der rechten Maustaste auf eine der ausgewählten Spalten geklickt haben. Suchen Sie nach den Zeichenoptionen für concat.Die Spaltenformel ist flexibler und bietet Ihnen viele Optionen. Weitere Informationen finden Sie in der Hilfe zu diesem Thema ( Erstellen Sie Formeln in JMP )
Ich hoffe, das gibt Ihnen eine Richtung.
Am besten,
Betreff: Zeichenfolge einer Spalte analysieren und eine andere Spalte füllenHöchstwahrscheinlich könnten Sie dafür eine Formel mit Lag schreiben (oder ein Skript mit JSL), Sie können dies aber auch interaktiv versuchen, aber es sind einige Schritte erforderlich:
1. Wählen Sie die Spalte ProductName aus
2. Gehen Sie zu den Spalten „Cols/Utilities/Text To“ und verwenden Sie sowohl „-“ als auch „_“ als Trennzeichen

3. Gehen Sie zu „Tabellen und Stapel“ und fügen Sie alles andere außer der ersten Spalte zur Auswahl „Stapelspalten“ hinzu


5. Entfernen Sie die Spalte „Beschriftung“.
6. Wählen Sie beide verbleibenden Spalten aus, gehen Sie zu Zeilen / Zeilenauswahl / Doppelte Zeilen auswählen und löschen Sie diese Zeilen

7. Wählen Sie eine Zelle mit leerem Wert aus, wählen Sie „Übereinstimmende Zellen auswählen“ und löschen Sie diese Zeilen
8. Wählen Sie nun beide Spalten aus, klicken Sie mit der rechten Maustaste auf die Spaltenüberschrift und erstellen Sie eine Formel

9. Öffnen Sie die soeben erstellte Formel und ändern Sie , in _

10. Spalten/Formeln umbenennen und löschen
11. Wenn Sie es brauchen Geben Sie dort den Produktnamen ein, Sie sollten ihn dort behalten können, wenn Sie ihn nicht versehentlich im ersten Schritt löschen, wie ich es getan habe

Wenn Sie je nach Seriennummer - oder _ benötigen, können Sie dies höchstwahrscheinlich in der Verkettungsformel verarbeiten
Bearbeiten: Ich habe die Frage etwas genauer überprüft und das ist etwas komplizierter als ich hier gezeigt habe. Für einige der Seriennummern müssen Sie Berechnungen hinzufügen, da diese zwischen den Nummern liegen. In diesen Fällen funktioniert diese Lösung nicht, da einige Zeilen entfernt werden, wenn Duplikate entfernt werden.