Löschen Sie Zeichenfolgen in einer Liste, die ein Wort enthaltenIch habe eine Liste von Dateinamen, aus denen ich bestimmte Dateien auswählen möchte. Die ersten 4 Ziffern sind das Jahr, in dem sich der Unterstrich wie ein Trennzeichen verhält, das "abc" ist nur eine Kennung für den Dateityp, die 3-stellige Nummer ist die ID und "Zusammenfassung" oder "Ergebnis" beziehen sich auf die Art von Datei.
Zunächst möchte ich nur die "Ergebnis" -Dateien betrachten. Ich konnte nicht herausfinden, wie ich alle "Zusammenfassungs" -Dateien von meiner Liste entfernen kann.
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
Zweitens möchte ich die Dateien basierend auf dem Jahr und dem dreistelligen Code auswählen.
Ich habe in der Vergangenheit etwas Ähnliches getan, um Dateien mit Regex auszuwählen, bei denen nur eine Zahl in der Zeichenfolge enthalten war
For( i = 1, i <= N Items( FileList ), i++,
FileList[i] = regex(FileList[i], "([0-9]+)", "\1")
);
aber in diesem Fall habe ich eine Liste mit "2021", "2021", ...
Im Idealfall würde ich eine Liste haben, die so aussieht
{"2021_027 ", "2021_027 ", "2021_028 ",
"2021_028 ", "2021_029 ", "2021_029 ",
"2021_038 ", "2021_038 ", "2021_040 ",
"2021_040 ", "2021_041 ", "2021_041 ",
"2021_042 ", "2021_042 ", "2021_043 ",
"2021_043 ", "2021_044 ", "2021_044 ",
"2021_045 ", "2021_045 ", "2021_046 ",
"2021_046 ", "2021_047 ", "2021_047 ",
"2021_048 ", "2021_048 ", "2021_049 ",
"2021_049 ", "2021_050 ", "2021_050 ",
"2021_051 ", "2021_051 ", "2021_052 ",
"2021_052 ", "2021_053 ", "2021_053 ",
"2021_054 ", "2021_054 ", "2021_055 ",
"2021_055 ", "2021_056 ", "2021_056 ",
"2021_057 ", "2021_057 ", "2021_058 ",
"2021_058 ", "2021_059 ", "2021_059 ",
"2021_060 ", "2021_060 ", "2021_061 ",
"2021_061 ", "2021_062 ", "2021_062 ",
"2021_063 ", "2021_063 ", "2021_064 ",
"2021_064 ", "2021_065 ", "2021_065 ",
"2021_067 "}und dann könnte ich aus dieser Liste die Dateien auswählen, die ich verwenden möchte.
Auch Tipps zum besseren Regex sind willkommen.
Danke!
SkriptingBetreff: Löschen Sie Zeichenfolgen in einer Liste, die ein Wort enthaltenHallo,
Hier ist ein Brute-Force-Ansatz für Ihr Problem, der die Notwendigkeit der Verwendung von Regex umgeht (ich bin mit diesen nicht allzu gut).
Names default to Here (1);
StartList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
ResultList = {};
For (i = 1, i <= N Items (StartList), i++,
if (contains (StartList [i], "result"), insert into (ResultList, StartList[i]))
);
Show (ResultList); // Yields a clean list with results only
FileList = {};
For (i= 1 , i <= N Items (ResultList), i++,
Insert into (FileList, Word (1, ResultList [i], "_") || "_" || Word (3, ResultList [i], "_"))
);
Show (FileList); // Yields the file Year and Numerical ID
Mit dieser Liste können Sie dann in eine ListBox einspeisen oder die entsprechende Datei mit der Funktion Contains () direkt abrufen.
Ich werde das nächste Mal mehr über Regex lesen.
Beste,
TS
Betreff: Löschen Sie Zeichenfolgen in einer Liste, die ein Wort enthaltenHier ist ein Regex-Ansatz:
Names Default To Here( 1 );
Assign(
file_lst,
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv", "2021_abc_028_summary.csv", "2021_abc_029_result.csv",
"2021_abc_029_summary.csv", "2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv", "2021_abc_040_summary.csv",
"2021_abc_041_result.csv", "2021_abc_041_summary.csv", "2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv", "2021_abc_045_result.csv", "2021_abc_045_summary.csv",
"2021_abc_046_result.csv", "2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv", "2021_abc_048_result.csv",
"2021_abc_048_summary.csv", "2021_abc_049_result.csv", "2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv", "2021_abc_052_summary.csv", "2021_abc_053_result.csv",
"2021_abc_053_summary.csv", "2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv", "2021_abc_055_summary.csv",
"2021_abc_056_result.csv", "2021_abc_056_summary.csv", "2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv", "2021_abc_060_result.csv", "2021_abc_060_summary.csv",
"2021_abc_061_result.csv", "2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv", "2021_abc_063_result.csv",
"2021_abc_063_summary.csv", "2021_abc_064_result.csv", "2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
);
For( i = 1, i <= N Items( file_lst ), i++,
print( eval(Regex( file_lst[i], "^([0-9]+)_([a-z]{3})_([0-9]{3}).*result", "Fullname: \0 Part1: \1 Part2: \2 Part3: \3" )) )
);Betreff: Löschen Sie Zeichenfolgen in einer Liste, die ein Wort enthaltenHier ist ein anderer Ansatz.Ich verwende gerne die RegexMatch-Funktion (SourceStr, patStr).Das Punkt-Sternchen (. *) ähnelt der Verwendung eines% in einer Like-Datenbankfunktion.Da Sie Elemente aus Ihrer Liste entfernen möchten, müssen Sie am Ende der Liste beginnen, da sonst Ihr Index beschädigt wird.
Names Default to Here(1);
FileList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
patStr = "2021.*result.*";
For(i = nitems(FileList), i>=1, i--,
SourceStr = FileList[i] ;
ret = Try( Regex Match( SourceStr, patStr )[1], "" );
If( ret != SourceStr, RemoveFrom(FileList,i) );
); //end For i
Show(FileList);
Betreff: Löschen Sie Zeichenfolgen in einer Liste, die ein Wort enthaltenDrei hochwertige Lösungen:
@ Thierry_S - leicht zu verstehen und zu pflegen
@ Georg - genau wie Regex-Ersatz verwendet wird
@ gzmorgan0 - Effizientes Entfernen von einer Liste durch Rückwärtsarbeiten
Sie können diese Ideen kombinieren, um eine ideale Lösung zu finden, die einfach zu warten, effizient und das von Ihnen gelöste Problem klar darstellt.