Bearbeiten von Zeichenfolgen in einer ListeIch erstelle ein Listenfeld, das ich in einem Skript verwende, um die Chargennummern auszuwählen, die ich analysieren möchte. Ich möchte die Liste der Chargennummern basierend auf den Dateinamen in einem Ordner erstellen. Ich kann nicht herausfinden, wie ich den Namen der Datei so bearbeiten kann, dass er nur die Chargennummer enthält.
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"
Automatisierung und SkripterstellungInhaltsorganisationDatenmischung und -bereinigungBetreff: Zeichenfolgen in einer Liste bearbeitenLiebling @ealindahl ,
Die Punkte gehören zu fehlenden Werten, dh der reguläre Ausdruck hat keine Übereinstimmung gefunden.
Sie können sie nachträglich entfernen oder während der Listengenerierung vermeiden und müssen die Schleife leicht ändern.
Eine einfache Möglichkeit, sie nachträglich zu entfernen, ist die folgende (erster Weg über String-Manipulation, zweiter Weg über 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);
Betreff: Zeichenfolgen in einer Liste bearbeitenDanke Georg! Das funktioniert wirklich gut. Ich habe noch nie Regex verwendet und habe versucht, etwas darüber zu googeln, um dieses eine Problem zu lösen. Ich habe einige Junk-Dateien im selben Ordner, die keine Nummern enthalten. Daher wird der Name dieser Dateien nicht in die Liste aufgenommen, wohl aber der Punkt. Wie werde ich die Periode los?
Es sieht so aus: {., ., ., ., ., ., ., „20131“, „20132“, „20133“,}
Betreff: Zeichenfolgen in einer Liste bearbeitenDieser 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: Zeichenfolgen in einer Liste bearbeitenDanke, Jim.
Die Word-Funktion ist für solche Zwecke eine nette und leicht verständliche Funktion.
Ein noch allgemeinerer Ansatz könnte die Verwendung von Regex sein,
Ersetzen Sie also einfach eine Zeile von Jims Script durch
exampleList[i] = regex(exampleList[i], "([0-9]+)", "\1")
würde nach dem ersten Vorkommen 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: Zeichenfolgen in einer Liste bearbeitenDer 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 );
Eine Dokumentation zur Word()-Funktion finden Sie im Scripting Index.