Bearbeiten von Zeichenfolgen in einer ListeIch erstelle eine Listbox, die ich in einem Skript verwende, um die Chargennummern auszuwählen, die ich analysieren möchte. Ich möchte die Liste der Chargennummern basierend auf Dateinamen in einem Ordner erstellen. Ich kann nicht herausfinden, wie der Name der Datei so bearbeitet wird, dass er nur die Chargennummer ist.
So sieht die Liste der Dateinamen aus
"data_20229.csv", "data_20230.csv", "data_20231.csv", "data_20232.csv",
"data_20236.csv", "data_20237.csv", "data_20238.csv", "data_20239.csv",
"data_20240.csv", "data_20241.csv", "data_20242.csv", "data_20243.csv",
"data_20244.csv", "data_20245.csv", "data_20247.csv", "data_20248.csv",
"data_20251.csv", "data_20252.csv", "data_20253.csv", "data_20254.csv",
"data_20255.csv", "data_20256.csv", "data_20257.csv", "data_20258.csv",
"data_20259.csv", "data_20260.csv", "data_20261.csv", "data_20262.csv",
"data_20263.csv", "data_20264.csv", "data_20265.csv", "data_20266.csv",
"data_20267.csv", "data_20268.csv", "data_20269.csv", "data_20270.csv"
Ich möchte, dass die Liste so endet
"20229", "20230", "20231", "20232", "20233", "20234", "20235", "20236",
"20237", "20238", "20239", "20240", "20241", "20242", "20243", "20244", "20245",
"20246", "20247", "20248", "20249", "20250", "20251", "20252", "20253", "20254",
"20255", "20256", "20257", "20258", "20259", "20260", "20261", "20262", "20263",
"20264", "20265", "20266", "20267", "20268", "20269", "20270"
SkriptingBetreff: Bearbeiten von Zeichenfolgen in einer ListeDer einfachste Weg, dies zu tun, ist die Verwendung der Word () - Funktion.
Names Default To Here( 1 );
exampleList = {"data_20229.csv", "data_20230.csv", "data_20231.csv",
"data_20232.csv", "data_20236.csv", "data_20237.csv", "data_20238.csv",
"data_20239.csv", "data_20240.csv", "data_20241.csv", "data_20242.csv",
"data_20243.csv", "data_20244.csv", "data_20245.csv", "data_20247.csv",
"data_20248.csv", "data_20251.csv", "data_20252.csv", "data_20253.csv",
"data_20254.csv", "data_20255.csv", "data_20256.csv", "data_20257.csv",
"data_20258.csv", "data_20259.csv", "data_20260.csv", "data_20261.csv",
"data_20262.csv", "data_20263.csv", "data_20264.csv", "data_20265.csv",
"data_20266.csv", "data_20267.csv", "data_20268.csv", "data_20269.csv",
"data_20270.csv"};
For( i = 1, i <= N Items( exampleList ), i++,
exampleList[i] = Word( 2, exampleList[i], "_." )
);
show( exampleList );
Die Dokumentation zur Word () - Funktion finden Sie im Scripting Index.
Betreff: Bearbeiten von Zeichenfolgen in einer ListeDanke, Jim.
Die Wortfunktion ist eine nette und leicht verständliche Funktion für solche Zwecke.
Ein noch allgemeinerer Ansatz könnte die Verwendung von Regex sein.
Ersetzen Sie einfach eine Zeile des Jims-Skripts durch
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
würde nach dem ersten Auftreten einer Zahl suchen.
Dies kann nützlich sein, wenn die Daten nicht so sauber sind wie in diesem Beispiel. Regex ist unglaublich mächtig.
Betreff: Bearbeiten von Zeichenfolgen in einer ListeDieser Ansatz verwendet keine for-Schleife.
Names Default To Here( 1 );
exampleList = {"data_20229.csv", "data_20230.csv", "data_20231.csv",
"data_20232.csv", "data_20236.csv", "data_20237.csv", "data_20238.csv",
"data_20239.csv", "data_20240.csv", "data_20241.csv", "data_20242.csv",
"data_20243.csv", "data_20244.csv", "data_20245.csv", "data_20247.csv",
"data_20248.csv", "data_20251.csv", "data_20252.csv", "data_20253.csv",
"data_20254.csv", "data_20255.csv", "data_20256.csv", "data_20257.csv",
"data_20258.csv", "data_20259.csv", "data_20260.csv", "data_20261.csv",
"data_20262.csv", "data_20263.csv", "data_20264.csv", "data_20265.csv",
"data_20266.csv", "data_20267.csv", "data_20268.csv", "data_20269.csv",
"data_20270.csv"};
str = char(examplelist);
newstr = substitute(str, "data_", "", ".csv", "");
new_list = parse(newstr);
show( new_list );Betreff: Bearbeiten von Zeichenfolgen in einer ListeDanke Georg! Das funktioniert wirklich gut. Ich habe noch nie Regex verwendet und versucht, etwas zu googeln, um dieses eine Problem zu lösen. Ich habe einige Junk-Dateien im selben Ordner, die keine Zahlen enthalten. Der Name dieser Dateien wird also nicht in die Liste aufgenommen, aber der Zeitraum ist. Wie werde ich die Periode los?
Es sieht so aus {.,.,.,.,.,.,., "20131", "20132", "20133",}
Betreff: Bearbeiten von Zeichenfolgen in einer Listesehr geehrter @ealindahl ,
Die Punkte gehören zu fehlenden Werten, dh der reguläre Ausdruck hat keine Übereinstimmung gefunden.
Sie können diese Nachwörter entfernen oder sie während der Listengenerierung vermeiden und müssen die Schleife geringfügig ändern.
Eine einfache Möglichkeit, diese Nachwörter zu entfernen, ist die folgende (erste Möglichkeit über die Manipulation von Zeichenfolgen, zweite über die Schleife).
BR
names default to here(1);
list = {., ., ., ., ., ., ., "20131", "20132", "20133"};
new_list = parse(substitute(char(list),".,", ""));
show (list);
show (new_list);
new_list={};
for (i=1, i<= n items(list), i++,
if (!is missing(list[i]), new_list = insert(new_list, list[i]));
);
show(new_list);