Durchsuchen Sie jede Zelle in einer Spalte, um einen bestimmten Inhalt zu findenHallo zusammen,
Ich habe eine JMP-Datentabelle mit einer Spalte, die in jeder Zeile unterschiedliche Zeichenfolgen enthält. Ich würde gerne wissen, ob ich diese Spalte durchlaufen kann, um einen bestimmten Teil der Zeichenfolge in dieser Zelle zu finden.
Dies ist ein Beispiel für die Zeichenfolgen:
Klasse: 10 Tabelle:15 Stat:NA loc:NA teacher:Sam --> Inhalt der Zelle
Klasse: 11 Tabelle: 11 Statistik: NA Ort: NA Lehrer: Sam
Die Herausforderung besteht darin, dass ich unterschiedliche Klassennummern und unterschiedliche Tabellennummern habe. Ich muss jedoch nur die Zellen finden, die mit „Klasse: #“ beginnen, und den Rest der Zellen in eine Liste aufnehmen.
Meine Frage lautet also: Kann ich in dieser bestimmten Spalte eine teilweise Zellensuche durchführen?
Automatisierung und SkripterstellungGrundlegende Datenanalyse und ModellierungBetreff: Durchsuchen Sie jede Zelle in einer Spalte, um einen bestimmten Inhalt zu findenDies ist eine Möglichkeit, damit umzugehen
Names Default To Here( 1 );
dt = Current Data Table();
foundList = {};
For Each Row(
If(
Word( 1, thestringcolumn, " " ) & Is Missing(
Num( word * 2, thestringcolumn, " " )
) == 0,
Insert Into(
foundList,
Substr(
thestringcolumn,
Length( Word( 1, thestringcolumn, " " ) )
+Length( Word( 2, thestringcolumn, " " ) ) + 2
)
)
)
);Betreff: Durchsuchen Sie jede Zelle in einer Spalte, um einen bestimmten Inhalt zu findenAbhängig von Ihrem Zeichenfolgenformat können Sie möglicherweise „Recode“ verwenden (beachten Sie, dass „Text beibehalten, wenn keine Übereinstimmung vorhanden“ nicht aktiviert ist).

oder Skript mit „Für jede Zeile“. Wenn Sie „Für jede Zeile“ verwenden, stehen Ihnen viele verschiedene Optionen zum Parsen der Zeichenfolge und zum Speichern Ihrer Ergebnisse zur Verfügung. Nachfolgend finden Sie ein weiteres Beispiel
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(2),
Compress File When Saved(1),
New Column("Column 1",
Character,
"Nominal",
Set Values(
{"Class: 10 Table:15 Stat:NA loc:NA teacher:Sam",
"Class: 11 Table:11 Stat:NA loc:NA teacher:Sam"}
)
)
);
result = {};
For Each Row(dt,
res = Regex(:Column 1, "^(Class: \d+) (.*)?", "\2");
If(!IsMissing(res),
Insert Into(result, res);
);
);
show(result);
// result = {"Table:15 Stat:NA loc:NA teacher:Sam", "Table:11 Stat:NA loc:NA teacher:Sam"};Betreff: Durchsuchen Sie jede Zelle in einer Spalte, um einen bestimmten Inhalt zu findenDanke @jthi . Dies funktioniert perfekt für das Beispiel, das ich oben bereitgestellt habe.
Ich habe eine Folgefrage. Nehmen wir an, wir haben die folgende String-Liste:
10::Klasse: A
11::Klasse: A1
12::Klasse: A2
..
20::Klasse B
21::Klasse B1
22::Klasse B1
30::Klasse C
31::Klasse C1
32::Klasse C2
Angenommen, ich möchte für jede Klasse eine Liste erstellen. Ich möchte, dass der erste ClassAList = (11::Class: A ,11::Class: A ,11::Class: A );
Ich habe versucht, regex() zu ändern, um nach der führenden Ziffer in einer Zeichenfolge zu suchen und sie dann in die entsprechende Liste zu verschieben. Ich habe so etwas verwendet: Regex("10:::Class" , "[1]")
Das Problem hierbei ist, dass in der gesamten Zeichenfolge nach [1] gesucht wird. Ist es möglich, den Index auszuwählen, in dem die Regex nach einer Übereinstimmung suchen soll?
Das andere Problem hierbei ist, dass nur 1 zurückgegeben wird, nicht die gesamte Zeichenfolge.
Jede Anleitung ist willkommen.
Betreff: Durchsuchen Sie jede Zelle in einer Spalte, um einen bestimmten Inhalt zu findenDies könnte Ihnen eine Idee geben, was Sie tun könnten
Names Default To Here(1);
mylist = {"10::Class: A", "11::Class: A1", "12::Class: A2", "20::Class B", "21::Class B1",
"22::Class B1", "30::Class C", "31::Class C1", "32::Class C2"};
class_pattern = "\d+::(Class:? [A-Z])";
aa = Associative Array();
For Each({myitem}, mylist,
res = Regex(myitem, class_pattern, "\1");
If(!Contains(aa, res),
aa[res] = {};
);
Insert Into(aa[res], myitem);
);
show(aa);
https://regex101.com/r/itqqww/1 zur Erläuterung des Regex-Musters
Betreff: Durchsuchen aller Zellen einer Spalte, um einen bestimmten Inhalt zu findenDanke @jthi . Das funktioniert perfekt.
Zusatzfrage:
Ich möchte die Liste in Untergruppen gruppieren, die nur auf der ersten Ziffer basieren. Ich habe versucht, dazu Regex-Anker zu verwenden. Allerdings wird nicht nur die erste Ziffer abgeglichen, sondern die erste und alle nachfolgenden Ziffern. Für jede Anleitung bin ich dankbar.
Betreff: Durchsuchen aller Zellen einer Spalte, um einen bestimmten Inhalt zu findenMeinen Sie den Teil der Klasse B1? Sie können den regulären Ausdruck ändern, indem Sie \d? in Klammern einfügen ( https://regex101.com/r/Yfh6pZ/1 ). \d entspricht einer Ziffer und ? entspricht dem Token davor NULL oder EINMAL. Wenn Sie keine Gruppen erfassen möchten, die keine Ziffern haben, lassen Sie ? weg oder ersetzen Sie es durch {1}

[
"Class B" => {"20::Class B"},
"Class B1" => {"21::Class B1", "22::Class B1"},
"Class C" => {"30::Class C"},
"Class C1" => {"31::Class C1"},
"Class C2" => {"32::Class C2"},
"Class: A" => {"10::Class: A"},
"Class: A1" => {"11::Class: A1"},
"Class: A2" => {"12::Class: A2"}
]