Strings nach Muster erstellen - Muster ist als string gespeichert
-
Hallo,
ich habe ein Muster in einem string gespeichert. er beinhaltet codes für zahlen und normale teilstrings:
ein Beispiel: abc[1-2]asbsd[1-3]abcdaraus sollen mit hilfe einer Methode eine Liste von strings erstellt werden. In diesem Fall:
abc1asbsd1abc
abc1asbsd2abc
abc1asbsd3abc
abc2asbsd1abc
abc2asbsd2abc
abc2asbsd3abcAlso [1-2] und [1-3] sind die Codes in diesem Beispiel.
Weiß jemand wie man so etwas programmieren kann? ich habe überhaupt keine ahnung wie ich an die sache ran gehen soll.
Danke im Vorraus
FloFireDerGrosse
-
habe ganz vergessen zu erwähnen, dass die anzahl der "codes" beliebig sein kann.
-
Du meinst du hast strings, und in diesen strings sind in eckigen klammenern zahlenmengen angegeben. Und daraus musst du für jede mögliche Kombination einen string konstruieren. Oder ?
Was genau heißt "Codes beliebig" ?
-
for(int i=1; i<=2; ++i) for(int j=1; j<=3; ++j) string s = string.Format("abc{0}asbsd{1}abc", i, j);
Bleibt die Frage wo dein Musterstring herkommt.
Hier wäre "abc[1-2]asbsd[1-3]abc" in "abc{0}asbsd{1}abc" zu übersetzen. Können mehr als zwei "Codes" vorkommen? Wie können die Muster genau aussehen.Ohne weitere Infos gebe ich schonmal das Stichwort RegEx.
-
Ich bin für ne Frickellösung
static string[] MakeList(string input) { List<string> ret = new List<string>(); List<StringBuilder> sbList = new List<StringBuilder>(); sbList.Add(new StringBuilder()); bool inCode = false; int indexStart=-1; for (int i = 0; i < input.Length; i++) { if (input[i] == '[') { indexStart=i+1; inCode = true; } else if (input[i] == ']') { inCode = false; string sCode = input.Substring(indexStart, i - indexStart); string[] splits = sCode.Split(new char[] { '-' }); int codeStart = int.Parse(splits[0]); int codeEnd = int.Parse(splits[1]); int len = sbList.Count; for (int k = 0; k < len; k++) { for (int j = codeStart + 1; j <= codeEnd; j++) { StringBuilder copy = new StringBuilder(sbList[k].ToString()); copy.Append(j); sbList.Add(copy); } sbList[k].Append(codeStart); } } else if (!inCode) { foreach (StringBuilder sb in sbList) sb.Append(input[i]); } } foreach (StringBuilder sb in sbList) ret.Add(sb.ToString()); ret.Sort(); return ret.ToArray(); }
-
Hallo µ,
danke für deinen Tipp, er hat mir schon viel geholfen
-
Erstmal den String nach den "Markern" durchsuchen, und ne Liste der Marker basteln.
Dann den 1. "Code" inkrementieren. Wenn's nen Overflow gibt den nächsten Code inkrementieren. Wenns da wieder nen Overflow gibt wieder den nächsten Code usw. Und wenns keinen nächsten Code mehr gibt ist man fertig.
Eigentlich recht einfach. Und das ohne dass man die Anzahl der Marker irgendwie festlegen müsste.